summaryrefslogtreecommitdiff
path: root/tests/test_parser.py
blob: 2edb1d612974a9892b701ea319f815a276e98889 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from qface.idl.domain import System
from qface.generator import FileSystem
import logging
import logging.config
from pathlib import Path

# logging.config.fileConfig('logging.ini')
logging.basicConfig()

log = logging.getLogger(__name__)

examples = Path('./examples')
log.debug('examples folder: {0}'.format(examples.absolute()))


def loadTuner():
    path = examples / 'entertainment.tuner.Tuner.qface'
    return FileSystem.parse_document(path)


def test_parse():
    log.debug('test parse')
    names = FileSystem.find_files(examples, '*.qface')
    # import pdb; pdb.set_trace()
    system = System()
    for name in names:
        log.debug('name: {0}'.format(name))
        FileSystem.parse_document(name, system)


def test_package():
    system = loadTuner()
    assert len(system.packages) == 1
    package = system.lookup_package('entertainment.tuner')
    assert package in system.packages


def test_service():
    system = loadTuner()
    package = system.lookup_package('entertainment.tuner')
    service = system.lookup_service('entertainment.tuner.Tuner')
    assert service in package.services
    assert service.comment == '/*! Service Tuner */'


def test_attribute():
    system = loadTuner()
    service = system.lookup_service('entertainment.tuner.Tuner')
    package = system.lookup_package('entertainment.tuner')
    attr = service.attributeMap['currentStation']
    assert attr.type.name == 'Station'
    assert attr.package == package
    assert attr.type.qualifiedName == 'entertainment.tuner.Station'
    assert attr.is_readonly
    assert attr.comment == '/*! attribute currentStation */'


def test_struct():
    system = loadTuner()
    package = system.lookup_package('entertainment.tuner')
    symbol = system.lookup_struct('entertainment.tuner.Station')
    assert symbol.name == 'Station'
    assert symbol.package == package
    assert symbol.qualifiedName == 'entertainment.tuner.Station'
    assert symbol.comment == '/*! struct Station */'


def test_enum():
    system = loadTuner()
    definition = system.lookup_definition('entertainment.tuner.Waveband')
    package = system.lookup_package('entertainment.tuner')
    symbol = system.lookup_enum('entertainment.tuner.Waveband')
    assert definition == symbol
    assert symbol.name == 'Waveband'
    assert symbol.package == package
    assert symbol.qualifiedName == 'entertainment.tuner.Waveband'
    assert symbol.comment == '/*! enum Waveband */'
    assert symbol.is_enum


def test_flag():
    system = loadTuner()
    symbol = system.lookup_enum('entertainment.tuner.Features')
    assert symbol.is_flag


def test_list():
    system = loadTuner()
    service = system.lookup_service('entertainment.tuner.Tuner')
    attr = service.attributeMap['primitiveList']
    assert attr.type.name == 'list'
    assert attr.type.is_list is True
    assert attr.type.nested.is_primitive
    assert attr.type.nested.name == 'int'

    attr = service.attributeMap['complexList']
    assert attr.type.name == 'list'
    assert attr.type.is_list is True
    assert attr.type.nested.is_complex
    assert attr.type.nested.name == 'Station'


def test_model():
    system = loadTuner()
    service = system.lookup_service('entertainment.tuner.Tuner')
    attr = service.attributeMap['primitiveModel']
    assert attr.type.name == 'model'
    assert attr.type.is_model is True
    assert attr.type.nested.is_primitive
    assert attr.type.nested.name == 'int'

    attr = service.attributeMap['complexModel']
    assert attr.type.name == 'model'
    assert attr.type.is_model is True
    assert attr.type.nested.is_complex
    assert attr.type.nested.name == 'Station'