Warning, file /sdk/doxyqml/tests/unit/qmlparsertestcase.py was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 from unittest import TestCase 0002 0003 from doxyqml.lexer import Lexer 0004 from doxyqml.qmlclass import QmlClass 0005 from doxyqml import qmlparser 0006 0007 0008 class QmlParserTestCase(TestCase): 0009 def test(self): 0010 src = "Item { function foo() {} function bar() {} }" 0011 lexer = Lexer(src) 0012 lexer.tokenize() 0013 qmlclass = QmlClass("Foo") 0014 qmlparser.parse(lexer.tokens, qmlclass) 0015 0016 self.assertEqual(qmlclass.base_name, "Item") 0017 0018 functions = qmlclass.get_functions() 0019 self.assertEqual(len(functions), 2) 0020 self.assertEqual(functions[0].name, "foo") 0021 self.assertEqual(functions[1].name, "bar") 0022 0023 def test_default_property(self): 0024 src = """Item { 0025 /// v1 doc 0026 default property int v1 0027 /// v2 doc 0028 property int v2 0029 }""" 0030 lexer = Lexer(src) 0031 lexer.tokenize() 0032 qmlclass = QmlClass("Foo") 0033 qmlparser.parse(lexer.tokens, qmlclass) 0034 0035 properties = qmlclass.get_properties() 0036 self.assertEqual(len(properties), 2) 0037 self.assertEqual(properties[0].name, "v1") 0038 self.assertEqual(properties[0].type, "int") 0039 self.assertEqual(properties[0].doc, "/// v1 doc") 0040 self.assertTrue(properties[0].is_default) 0041 0042 self.assertEqual(properties[1].name, "v2") 0043 self.assertEqual(properties[1].type, "int") 0044 self.assertEqual(properties[1].doc, "/// v2 doc") 0045 self.assertFalse(properties[1].is_default) 0046 0047 def test_readonly_property(self): 0048 src = """Item { 0049 /// v1 doc 0050 readonly property int v1 0051 /// v2 doc 0052 property int v2 0053 }""" 0054 lexer = Lexer(src) 0055 lexer.tokenize() 0056 qmlclass = QmlClass("Foo") 0057 qmlparser.parse(lexer.tokens, qmlclass) 0058 0059 properties = qmlclass.get_properties() 0060 self.assertEqual(len(properties), 2) 0061 self.assertEqual(properties[0].name, "v1") 0062 self.assertEqual(properties[0].type, "int") 0063 self.assertEqual(properties[0].doc, "/// v1 doc") 0064 self.assertTrue(properties[0].is_readonly) 0065 0066 self.assertEqual(properties[1].name, "v2") 0067 self.assertEqual(properties[1].type, "int") 0068 self.assertEqual(properties[1].doc, "/// v2 doc") 0069 self.assertFalse(properties[1].is_readonly) 0070 0071 def test_var_property(self): 0072 src = """Item { 0073 property var varProperty: { "key1": "value1", "key2": "value2" } 0074 }""" 0075 0076 lexer = Lexer(src) 0077 lexer.tokenize() 0078 qmlclass = QmlClass("Foo") 0079 qmlparser.parse(lexer.tokens, qmlclass) 0080 0081 properties = qmlclass.get_properties() 0082 self.assertEqual(len(properties), 1) 0083 self.assertEqual(properties[0].name, "varProperty") 0084 self.assertEqual(properties[0].type, "var") 0085 0086 def test_function_property(self): 0087 src = """Item { 0088 property var fnProperty: function (arg1, arg2) { return arg1 + arg2; } 0089 }""" 0090 0091 lexer = Lexer(src) 0092 lexer.tokenize() 0093 qmlclass = QmlClass("Foo") 0094 qmlparser.parse(lexer.tokens, qmlclass) 0095 0096 properties = qmlclass.get_properties() 0097 self.assertEqual(len(properties), 1) 0098 self.assertEqual(properties[0].name, "fnProperty") 0099 self.assertEqual(properties[0].type, "var") 0100 0101 def test_multiline_string(self): 0102 src = """Item { 0103 prop1: "A string that spans \\ 0104 multiple lines" 0105 /// prop2 doc 0106 property string prop2: "bar" 0107 }""" 0108 0109 lexer = Lexer(src) 0110 lexer.tokenize() 0111 qmlclass = QmlClass("Foo") 0112 qmlparser.parse(lexer.tokens, qmlclass) 0113 0114 properties = qmlclass.get_properties() 0115 self.assertEqual(len(properties), 1) 0116 self.assertEqual(properties[0].name, "prop2") 0117 self.assertEqual(properties[0].type, "string") 0118 self.assertEqual(properties[0].doc, "/// prop2 doc") 0119 0120 def test_normal_arguments(self): 0121 src = """Item { 0122 function foo(arg1, arg2) { 0123 return arg1 + arg2; 0124 } 0125 }""" 0126 0127 lexer = Lexer(src) 0128 lexer.tokenize() 0129 qmlclass = QmlClass("Foo") 0130 qmlparser.parse(lexer.tokens, qmlclass) 0131 0132 functions = qmlclass.get_functions() 0133 self.assertEqual(len(functions), 1) 0134 self.assertEqual(functions[0].name, "foo") 0135 self.assertEqual(functions[0].type, "void") 0136 0137 def test_keyword_arguments(self): 0138 src = """Item { 0139 function foo(propertyArgument, signalArgument) { 0140 return propertyArgument + signalArgument; 0141 } 0142 }""" 0143 0144 lexer = Lexer(src) 0145 lexer.tokenize() 0146 qmlclass = QmlClass("Foo") 0147 qmlparser.parse(lexer.tokens, qmlclass) 0148 0149 functions = qmlclass.get_functions() 0150 self.assertEqual(len(functions), 1) 0151 self.assertEqual(functions[0].name, "foo") 0152 self.assertEqual(functions[0].type, "void") 0153 0154 def test_signals(self): 0155 src = """Item { 0156 signal userAdded(string username, int age) 0157 }""" 0158 0159 lexer = Lexer(src) 0160 lexer.tokenize() 0161 qmlclass = QmlClass("Foo") 0162 qmlparser.parse(lexer.tokens, qmlclass) 0163 0164 signals = qmlclass.get_signals() 0165 self.assertEqual(len(signals), 1) 0166 signal = signals[0] 0167 self.assertEqual(signal.name, "userAdded") 0168 0169 self.assertEqual(len(signal.args), 2) 0170 self.assertEqual(signal.args[0].name, "username") 0171 self.assertEqual(signal.args[0].type, "string") 0172 self.assertEqual(signal.args[1].name, "age") 0173 self.assertEqual(signal.args[1].type, "int") 0174 0175 def test_functions(self): 0176 src = """Item { 0177 function scale(aspect = 4.0 / 3.0) {} 0178 }""" 0179 lexer = Lexer(src) 0180 lexer.tokenize() 0181 qmlclass = QmlClass("Foo") 0182 qmlparser.parse(lexer.tokens, qmlclass) 0183 functions = qmlclass.get_functions() 0184 self.assertEqual(len(functions), 1) 0185 self.assertEqual(functions[0].args[0].name, "aspect") 0186 self.assertEqual(functions[0].args[0].default_value, "4.0/3.0")