diff options
author | Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2017-01-16 12:08:17 +0100 |
---|---|---|
committer | Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2017-01-16 12:08:17 +0100 |
commit | c464487eaa8fbbc4f2990716fc7683cfd9478857 (patch) | |
tree | 6ba6785eb15713626bab65211d63133d8488f61b | |
parent | 01d4bebd3412458a48dbe51a6727f913c5e709b6 (diff) | |
download | qtivi-qface-c464487eaa8fbbc4f2990716fc7683cfd9478857.tar.gz |
updated tests for qtcpp filters
-rw-r--r-- | qface/generator.py | 9 | ||||
-rw-r--r-- | tests/test_qtcpp_helper.py | 223 |
2 files changed, 134 insertions, 98 deletions
diff --git a/qface/generator.py b/qface/generator.py index cb30d06..6ef2aa4 100644 --- a/qface/generator.py +++ b/qface/generator.py @@ -101,18 +101,21 @@ class FileSystem(object): :param system: system to be used (optional) """ logger.debug('parse document: {0}'.format(path)) + stream = FileStream(str(path), encoding='utf-8') + return FileSystem._parse_stream(stream, system) + @staticmethod + def _parse_stream(stream, system: System = None): + logger.debug('parse stream') system = system or System() - data = FileStream(str(path), encoding='utf-8') - lexer = TLexer(data) + lexer = TLexer(stream) stream = CommonTokenStream(lexer) parser = TParser(stream) parser.addErrorListener(DiagnosticErrorListener.DiagnosticErrorListener()) tree = parser.documentSymbol() walker = ParseTreeWalker() walker.walk(DomainListener(system), tree) - return system @staticmethod diff --git a/tests/test_qtcpp_helper.py b/tests/test_qtcpp_helper.py index 0d7da64..586f8bd 100644 --- a/tests/test_qtcpp_helper.py +++ b/tests/test_qtcpp_helper.py @@ -2,8 +2,11 @@ import logging import logging.config from pathlib import Path -from qface.idl.domain import * from qface.helper import qtcpp +from qface.generator import FileSystem + + +from antlr4 import InputStream logging.basicConfig() @@ -12,124 +15,154 @@ log = logging.getLogger(__name__) src = Path('tests/in') -system = System() -module = Module('org.example', system) -interface = Interface('Test', module) -operation = Operation('echo', interface) -parameter = Parameter('message', operation) -parameter.type.name = 'string' -parameter.type.is_primitive = True +document = """ +// org.example.qface +module org.example 1.0 + +interface Test { + void echo(string message); + Message message; + Status status; + list<int> list001; + list<Message> list002; + +} + +struct Message { + string body +} + +enum Status { + ON, + OFF +} +""" + + +def parse_document(): + stream = InputStream(document) + return FileSystem._parse_stream(stream) def test_return_type(): + system = parse_document() interface = system.lookup('org.example.Test') assert interface operation = interface._operationMap['echo'] assert operation parameter = operation._parameterMap['message'] - # bool - parameter.type.name = 'bool' - assert parameter.type.is_bool - answer = qtcpp.Filters.returnType(parameter) - assert answer == 'bool' - - # int - parameter.type.name = 'int' - assert parameter.type.is_int - answer = qtcpp.Filters.returnType(parameter) - assert answer == 'int' - - # real - parameter.type.name = 'real' - assert parameter.type.is_real - answer = qtcpp.Filters.returnType(parameter) - assert answer == 'qreal' - - # string - parameter.type.name = 'string' - assert parameter and parameter.type.is_string - answer = qtcpp.Filters.returnType(parameter) - assert answer == 'QString' - - # var - parameter.type.name = 'var' - assert parameter and parameter.type.is_variant - answer = qtcpp.Filters.returnType(parameter) - assert answer == 'QVariant' + types = { + 'bool': 'bool', + 'int': 'int', + 'real': 'qreal', + 'string': 'QString', + 'var': 'QVariant' + } + + for key, value in types.items(): + parameter.type.name = key + answer = qtcpp.Filters.returnType(parameter) + assert answer == value + + # check for struct + prop = interface._propertyMap['message'] + answer = qtcpp.Filters.returnType(prop) + assert answer == 'QmlMessage' + # check for enum + prop = interface._propertyMap['status'] + answer = qtcpp.Filters.returnType(prop) + assert answer == 'QmlExampleModule::Status' + + # check for list of primitive + prop = interface._propertyMap['list001'] + answer = qtcpp.Filters.returnType(prop) + assert answer == 'QVariantList' + + # check for list of structs + prop = interface._propertyMap['list002'] + answer = qtcpp.Filters.returnType(prop) + assert answer == 'QVariantList' def test_default_value(): + system = parse_document() interface = system.lookup('org.example.Test') assert interface operation = interface._operationMap['echo'] assert operation parameter = operation._parameterMap['message'] - # bool - parameter.type.name = 'bool' - assert parameter.type.is_bool - answer = qtcpp.Filters.defaultValue(parameter) - assert answer == 'false' - - # int - parameter.type.name = 'int' - assert parameter.type.is_int - answer = qtcpp.Filters.defaultValue(parameter) - assert answer == '0' - - # real - parameter.type.name = 'real' - assert parameter.type.is_real - answer = qtcpp.Filters.defaultValue(parameter) - assert answer == '0.0' - - # string - parameter.type.name = 'string' - assert parameter and parameter.type.is_string - answer = qtcpp.Filters.defaultValue(parameter) - assert answer == 'QString()' - - # var - parameter.type.name = 'var' - assert parameter and parameter.type.is_variant - answer = qtcpp.Filters.defaultValue(parameter) - assert answer == 'QVariant()' + types = { + 'bool': 'false', + 'int': '0', + 'real': '0.0', + 'string': 'QString()', + 'var': 'QVariant()' + } + + for key, value in types.items(): + parameter.type.name = key + answer = qtcpp.Filters.defaultValue(parameter) + assert answer == value + + # check for struct + prop = interface._propertyMap['message'] + answer = qtcpp.Filters.defaultValue(prop) + assert answer == 'QmlMessage()' + # check for enum + prop = interface._propertyMap['status'] + answer = qtcpp.Filters.defaultValue(prop) + assert answer == 'Status::ON' + + # check for list of primitive + prop = interface._propertyMap['list001'] + answer = qtcpp.Filters.defaultValue(prop) + assert answer == 'QVariantList()' + + # check for list of structs + prop = interface._propertyMap['list002'] + answer = qtcpp.Filters.defaultValue(prop) + assert answer == 'QVariantList()' def test_parameter_type(): + system = parse_document() interface = system.lookup('org.example.Test') assert interface operation = interface._operationMap['echo'] assert operation parameter = operation._parameterMap['message'] name = parameter.name - # bool - parameter.type.name = 'bool' - assert parameter.type.is_bool - answer = qtcpp.Filters.parameterType(parameter) - assert answer == 'bool {0}'.format(name) - - # int - parameter.type.name = 'int' - assert parameter.type.is_int - answer = qtcpp.Filters.parameterType(parameter) - assert answer == 'int {0}'.format(name) - - # real - parameter.type.name = 'real' - assert parameter.type.is_real - answer = qtcpp.Filters.parameterType(parameter) - assert answer == 'qreal {0}'.format(name) - - # string - parameter.type.name = 'string' - assert parameter and parameter.type.is_string - answer = qtcpp.Filters.parameterType(parameter) - assert answer == 'const QString &{0}'.format(name) - - # var - parameter.type.name = 'var' - assert parameter and parameter.type.is_variant - answer = qtcpp.Filters.parameterType(parameter) - assert answer == 'const QVariant &{0}'.format(name) + + types = { + 'bool': 'bool {0}'.format(name), + 'int': 'int {0}'.format(name), + 'real': 'qreal {0}'.format(name), + 'string': 'const QString &{0}'.format(name), + 'var': 'const QVariant &{0}'.format(name) + } + + for key, value in types.items(): + parameter.type.name = key + answer = qtcpp.Filters.parameterType(parameter) + assert answer == value + + # check for struct + prop = interface._propertyMap['message'] + answer = qtcpp.Filters.parameterType(prop) + assert answer == 'const QmlMessage &{0}'.format(prop.name) + # check for enum + prop = interface._propertyMap['status'] + answer = qtcpp.Filters.parameterType(prop) + assert answer == 'QmlExampleModule::Status {0}'.format(prop.name) + + # check for list of primitive + prop = interface._propertyMap['list001'] + answer = qtcpp.Filters.parameterType(prop) + assert answer == 'const QVariantList &{0}'.format(prop.name) + + # check for list of structs + prop = interface._propertyMap['list002'] + answer = qtcpp.Filters.parameterType(prop) + assert answer == 'const QVariantList &{0}'.format(prop.name) |