File indexing completed on 2024-05-05 05:43:50

0001 import re
0002 from unittest import TestCase
0003 
0004 from doxyqml.qmlclass import QmlFunction, QmlArgument, QmlProperty
0005 
0006 
0007 class QmlFunctionTestCase(TestCase):
0008     def test_post_process_doc_at(self):
0009         self._test_post_process_doc("""
0010         /**
0011          * Create a user
0012          *
0013          * @param type:string firstname The user firstname
0014          * @param type:string lastname The user lastname
0015          * @param type:int age The user age
0016          * @param misc A parameter with no type
0017          * @return type:User A new user
0018          */
0019          """)
0020 
0021     def test_post_process_doc_backslash(self):
0022         self._test_post_process_doc(r"""
0023         /**
0024          * Create a user
0025          *
0026          * \param type:string firstname The user firstname
0027          * \param type:string lastname The user lastname
0028          * \param type:int age The user age
0029          * \param misc A parameter with no type
0030          * \return type:User A new user
0031          */
0032          """)
0033 
0034     def _test_post_process_doc(self, doc):
0035         fcn = QmlFunction()
0036         fcn.args = [
0037             QmlArgument("firstname"),
0038             QmlArgument("lastname"),
0039             QmlArgument("age"),
0040             QmlArgument("misc"),
0041             ]
0042         fcn.doc = doc
0043         fcn.post_process_doc()
0044 
0045         self.assertEqual(fcn.args[0].type, "string")
0046         self.assertEqual(fcn.args[1].type, "string")
0047         self.assertEqual(fcn.args[2].type, "int")
0048         self.assertEqual(fcn.args[3].type, "")
0049         self.assertEqual(fcn.type, "User")
0050 
0051         # "[@\]param type:..." are turned into "@param"
0052         expected_doc = re.sub(r"[@\\]param type:\w+", r"@param", doc)
0053         # "[@\]return type:..." are turned into "[@\]return"
0054         expected_doc = re.sub(r"([@\\])return type:\w+", r"\1return", expected_doc)
0055         self.assertMultiLineEqual(fcn.doc, expected_doc)
0056 
0057 
0058 class QmlPropertyTestCase(TestCase):
0059     def test_property_type(self):
0060         prop = QmlProperty()
0061         prop.doc = "/// type:User The current user"
0062         prop.type = "alias"
0063 
0064         prop.post_process_doc()
0065 
0066         self.assertEqual(prop.type, "User")
0067         self.assertEqual(prop.doc, "/// The current user")
0068 
0069     def test_no_property_type(self):
0070         prop = QmlProperty()
0071         prop.doc = "/// The user age"
0072         prop.type = "int"
0073 
0074         prop.post_process_doc()
0075 
0076         self.assertEqual(prop.type, "int")
0077         self.assertEqual(prop.doc, "/// The user age")
0078 
0079     def test_default_property(self):
0080         prop = QmlProperty()
0081         prop.doc = "/// Children"
0082         prop.type = "list<Item>"
0083         prop.is_default = True
0084 
0085         self.assertEqual(str(prop),
0086                          "/// Children\n" + QmlProperty.DEFAULT_PROPERTY_COMMENT + "\nQ_PROPERTY(list<Item>  READ dummyGetter__ignore)")