Coverage for /home/runner/work/zserio/zserio/compiler/extensions/python/runtime/tests/test_typeinfo.py: 100%
71 statements
« prev ^ index » next coverage.py v6.5.0, created at 2024-07-18 11:41 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2024-07-18 11:41 +0000
1import unittest
2import enum
4from zserio.typeinfo import (
5 TypeInfo,
6 RecursiveTypeInfo,
7 MemberInfo,
8 CaseInfo,
9 ItemInfo,
10 TypeAttribute,
11 MemberAttribute,
12)
15class TypeInfoTest(unittest.TestCase):
16 class DummyType:
17 pass
19 class DummyEnum(enum.Enum):
20 ONE = 1
21 TWO = 2
23 class RecursiveType:
24 @staticmethod
25 def type_info():
26 return TypeInfo(
27 "schema_name",
28 TypeInfoTest.RecursiveType,
29 attributes={
30 TypeAttribute.FIELDS: [
31 MemberInfo(
32 "recursive",
33 RecursiveTypeInfo(TypeInfoTest.RecursiveType.type_info),
34 ),
35 ]
36 },
37 )
39 def test_type_info(self):
40 type_info_1 = TypeInfo("schema_name", TypeInfoTest.DummyType)
41 self.assertEqual("schema_name", type_info_1.schema_name)
42 self.assertEqual(TypeInfoTest.DummyType, type_info_1.py_type)
43 self.assertEqual(0, len(type_info_1.attributes))
45 type_info_2 = TypeInfo(
46 "schema_name",
47 TypeInfoTest.DummyType,
48 attributes={
49 TypeAttribute.FIELDS: [
50 MemberInfo("member_1", type_info_1),
51 MemberInfo(
52 "member_2",
53 type_info_1,
54 attributes={
55 MemberAttribute.OPTIONAL: None,
56 MemberAttribute.IS_USED_INDICATOR_NAME: "is_member_2_used",
57 MemberAttribute.IS_SET_INDICATOR_NAME: "is_member_2_set",
58 MemberAttribute.PROPERTY_NAME: "member_2_prop_name",
59 },
60 ),
61 ]
62 },
63 )
65 self.assertEqual("schema_name", type_info_2.schema_name)
66 self.assertEqual(TypeInfoTest.DummyType, type_info_2.py_type)
67 self.assertEqual(1, len(type_info_2.attributes))
68 self.assertIn(TypeAttribute.FIELDS, type_info_2.attributes)
70 fields = type_info_2.attributes[TypeAttribute.FIELDS]
71 member_1 = fields[0]
72 self.assertEqual("member_1", member_1.schema_name)
73 self.assertEqual(type_info_1, member_1.type_info)
74 self.assertEqual(0, len(member_1.attributes))
75 member_2 = fields[1]
76 self.assertEqual("member_2", member_2.schema_name)
77 self.assertEqual(type_info_1, member_2.type_info)
78 self.assertEqual(4, len(member_2.attributes))
79 self.assertIn(MemberAttribute.OPTIONAL, member_2.attributes)
80 self.assertIsNone(member_2.attributes[MemberAttribute.OPTIONAL])
81 self.assertIn(MemberAttribute.IS_USED_INDICATOR_NAME, member_2.attributes)
82 self.assertEqual(
83 "is_member_2_used",
84 member_2.attributes[MemberAttribute.IS_USED_INDICATOR_NAME],
85 )
86 self.assertIn(MemberAttribute.IS_SET_INDICATOR_NAME, member_2.attributes)
87 self.assertEqual(
88 "is_member_2_set",
89 member_2.attributes[MemberAttribute.IS_SET_INDICATOR_NAME],
90 )
91 self.assertIn(MemberAttribute.PROPERTY_NAME, member_2.attributes)
92 self.assertEqual("member_2_prop_name", member_2.attributes[MemberAttribute.PROPERTY_NAME])
94 def test_recursive_type_info(self):
95 type_info = TypeInfoTest.RecursiveType.type_info()
96 recursive_type_info = type_info.attributes[TypeAttribute.FIELDS][0].type_info
98 self.assertEqual(type_info.schema_name, recursive_type_info.schema_name)
99 self.assertEqual(type_info.py_type, recursive_type_info.py_type)
100 self.assertEqual(
101 len(type_info.attributes[TypeAttribute.FIELDS]),
102 len(recursive_type_info.attributes[TypeAttribute.FIELDS]),
103 )
105 def test_member_info(self):
106 member_info = MemberInfo(
107 "schema_name",
108 TypeInfo("uint32", int),
109 attributes={MemberAttribute.PROPERTY_NAME: "property_name"},
110 )
111 self.assertEqual("schema_name", member_info.schema_name)
112 self.assertEqual("uint32", member_info.type_info.schema_name)
113 self.assertEqual(int, member_info.type_info.py_type)
114 self.assertEqual(1, len(member_info.attributes))
115 self.assertIn(MemberAttribute.PROPERTY_NAME, member_info.attributes)
116 self.assertEqual("property_name", member_info.attributes[MemberAttribute.PROPERTY_NAME])
118 member_info = MemberInfo(
119 "schema_name",
120 TypeInfo("uint32", int),
121 attributes={MemberAttribute.ALIGN: "8"},
122 )
123 self.assertEqual(1, len(member_info.attributes))
124 self.assertEqual("8", member_info.attributes[MemberAttribute.ALIGN])
126 def test_case_info(self):
127 member_info = MemberInfo("schema_name", TypeInfo("uint32", int))
128 case_info = CaseInfo(["1", "2"], member_info)
129 self.assertEqual(["1", "2"], case_info.case_expressions)
130 self.assertEqual(member_info, case_info.field)
132 case_info = CaseInfo([], None) # default without field
133 self.assertEqual(0, len(case_info.case_expressions))
134 self.assertIsNone(case_info.field)
136 def test_item_info(self):
137 item_info = ItemInfo("one", TypeInfoTest.DummyEnum.ONE, False, False)
138 self.assertEqual("one", item_info.schema_name)
139 self.assertEqual(TypeInfoTest.DummyEnum.ONE, item_info.py_item)
140 self.assertEqual(False, item_info.is_deprecated)
141 self.assertEqual(False, item_info.is_removed)