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

1import unittest 

2import enum 

3 

4from zserio.typeinfo import (TypeInfo, RecursiveTypeInfo, MemberInfo, CaseInfo, ItemInfo, TypeAttribute, 

5 MemberAttribute) 

6 

7class TypeInfoTest(unittest.TestCase): 

8 class DummyType: 

9 pass 

10 

11 class DummyEnum(enum.Enum): 

12 ONE = 1 

13 TWO = 2 

14 

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 ) 

23 

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)) 

29 

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 ) 

40 

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) 

45 

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]) 

63 

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 

67 

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])) 

72 

73 

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]) 

84 

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]) 

90 

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) 

96 

97 case_info = CaseInfo([], None) # default without field 

98 self.assertEqual(0, len(case_info.case_expressions)) 

99 self.assertIsNone(case_info.field) 

100 

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)