Coverage for /home/jenkins/workspace/NDS/Zserio/NDS_ZSERIO-linux-build/compiler/extensions/python/runtime/tests/test_typeinfo.py: 100%
71 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-12-13 15:12 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2023-12-13 15:12 +0000
1import unittest
2import enum
4from zserio.typeinfo import (TypeInfo, RecursiveTypeInfo, MemberInfo, CaseInfo, ItemInfo, TypeAttribute,
5 MemberAttribute)
7class TypeInfoTest(unittest.TestCase):
8 class DummyType:
9 pass
11 class DummyEnum(enum.Enum):
12 ONE = 1
13 TWO = 2
15 class RecursiveType:
16 @staticmethod
17 def type_info():
18 return TypeInfo("schema_name", TypeInfoTest.RecursiveType,
19 attributes={TypeAttribute.FIELDS : [
20 MemberInfo("recursive", RecursiveTypeInfo(TypeInfoTest.RecursiveType.type_info)),
21 ]}
22 )
24 def test_type_info(self):
25 type_info_1 = TypeInfo("schema_name", TypeInfoTest.DummyType)
26 self.assertEqual("schema_name", type_info_1.schema_name)
27 self.assertEqual(TypeInfoTest.DummyType, type_info_1.py_type)
28 self.assertEqual(0, len(type_info_1.attributes))
30 type_info_2 = TypeInfo("schema_name", TypeInfoTest.DummyType,
31 attributes={TypeAttribute.FIELDS : [
32 MemberInfo("member_1", type_info_1),
33 MemberInfo("member_2", type_info_1,
34 attributes={MemberAttribute.OPTIONAL : None,
35 MemberAttribute.IS_USED_INDICATOR_NAME : "is_member_2_used",
36 MemberAttribute.IS_SET_INDICATOR_NAME : "is_member_2_set",
37 MemberAttribute.PROPERTY_NAME : "member_2_prop_name"})
38 ]}
39 )
41 self.assertEqual("schema_name", type_info_2.schema_name)
42 self.assertEqual(TypeInfoTest.DummyType, type_info_2.py_type)
43 self.assertEqual(1, len(type_info_2.attributes))
44 self.assertIn(TypeAttribute.FIELDS, type_info_2.attributes)
46 fields = type_info_2.attributes[TypeAttribute.FIELDS]
47 member_1 = fields[0]
48 self.assertEqual("member_1", member_1.schema_name)
49 self.assertEqual(type_info_1, member_1.type_info)
50 self.assertEqual(0, len(member_1.attributes))
51 member_2 = fields[1]
52 self.assertEqual("member_2", member_2.schema_name)
53 self.assertEqual(type_info_1, member_2.type_info)
54 self.assertEqual(4, len(member_2.attributes))
55 self.assertIn(MemberAttribute.OPTIONAL, member_2.attributes)
56 self.assertIsNone(member_2.attributes[MemberAttribute.OPTIONAL])
57 self.assertIn(MemberAttribute.IS_USED_INDICATOR_NAME, member_2.attributes)
58 self.assertEqual("is_member_2_used", member_2.attributes[MemberAttribute.IS_USED_INDICATOR_NAME])
59 self.assertIn(MemberAttribute.IS_SET_INDICATOR_NAME, member_2.attributes)
60 self.assertEqual("is_member_2_set", member_2.attributes[MemberAttribute.IS_SET_INDICATOR_NAME])
61 self.assertIn(MemberAttribute.PROPERTY_NAME, member_2.attributes)
62 self.assertEqual("member_2_prop_name", member_2.attributes[MemberAttribute.PROPERTY_NAME])
64 def test_recursive_type_info(self):
65 type_info = TypeInfoTest.RecursiveType.type_info()
66 recursive_type_info = type_info.attributes[TypeAttribute.FIELDS][0].type_info
68 self.assertEqual(type_info.schema_name, recursive_type_info.schema_name)
69 self.assertEqual(type_info.py_type, recursive_type_info.py_type)
70 self.assertEqual(len(type_info.attributes[TypeAttribute.FIELDS]),
71 len(recursive_type_info.attributes[TypeAttribute.FIELDS]))
74 def test_member_info(self):
75 member_info = MemberInfo("schema_name", TypeInfo("uint32", int), attributes={
76 MemberAttribute.PROPERTY_NAME: "property_name"
77 })
78 self.assertEqual("schema_name", member_info.schema_name)
79 self.assertEqual("uint32", member_info.type_info.schema_name)
80 self.assertEqual(int, member_info.type_info.py_type)
81 self.assertEqual(1, len(member_info.attributes))
82 self.assertIn(MemberAttribute.PROPERTY_NAME, member_info.attributes)
83 self.assertEqual("property_name", member_info.attributes[MemberAttribute.PROPERTY_NAME])
85 member_info = MemberInfo("schema_name", TypeInfo("uint32", int), attributes={
86 MemberAttribute.ALIGN: "8"
87 })
88 self.assertEqual(1, len(member_info.attributes))
89 self.assertEqual("8", member_info.attributes[MemberAttribute.ALIGN])
91 def test_case_info(self):
92 member_info = MemberInfo("schema_name", TypeInfo("uint32", int))
93 case_info = CaseInfo(["1", "2"], member_info)
94 self.assertEqual(["1", "2"], case_info.case_expressions)
95 self.assertEqual(member_info, case_info.field)
97 case_info = CaseInfo([], None) # default without field
98 self.assertEqual(0, len(case_info.case_expressions))
99 self.assertIsNone(case_info.field)
101 def test_item_info(self):
102 item_info = ItemInfo("one", TypeInfoTest.DummyEnum.ONE, False, False)
103 self.assertEqual("one", item_info.schema_name)
104 self.assertEqual(TypeInfoTest.DummyEnum.ONE, item_info.py_item)
105 self.assertEqual(False, item_info.is_deprecated)
106 self.assertEqual(False, item_info.is_removed)