def test_convert_typedef_to_json_type(self): tdef = [Param('x', 'int')] types = {} convert_typedefs_to_type_for_json(tdef, types) x = PrimitiveType('int') self.assertEqual(types, { x.type_hash: x, TypedefedType('x', x).type_hash: TypedefedType('x', x) })
def test_parse_typedef_and_ptr_to_struct_to_type_for_json(self): types = {} struct = 'typedef struct xy {} *ptr_s, typ;' s_info = parse_struct(struct, 'file') parse_struct_to_type_for_json(s_info, types) st = StructType('xy', []) ptr = PointerType(st) tptr = TypedefedType('ptr_s', ptr) typedef = TypedefedType('typ', st) expected = { st.type_hash: st, ptr.type_hash: ptr, tptr.type_hash: tptr, typedef.type_hash: typedef } self.assertEqual(types, expected)
def test_parse_typedef_and_ptr_to_union_to_type_for_json(self): types = {} union = 'typedef union xy {} *ptr_s, typ;' s_info = parse_union(union, 'file') parse_union_to_type_for_json(s_info, types) st = UnionType('xy', []) ptr = PointerType(st) tptr = TypedefedType('ptr_s', ptr) typedef = TypedefedType('typ', st) expected = { st.type_hash: st, ptr.type_hash: ptr, tptr.type_hash: tptr, typedef.type_hash: typedef } self.assertEqual(types, expected)
def test_parse_typedefed_ptr_to_enum_to_type_for_json(self): types = {} enum = 'typedef enum x{One = 1, Two = 3} my_type, *ptr;' enum_info = parse_enum(enum, 'file') parse_enum_to_type_for_json(enum_info, types) e = EnumType('x', [EnumItem('One', 1), EnumItem('Two', 3)]) typ = TypedefedType('my_type', e) ptr = PointerType(e) tptr = TypedefedType('ptr', ptr) expected = { e.type_hash: e, typ.type_hash: typ, tptr.type_hash: tptr, ptr.type_hash: ptr } self.assertEqual(types, expected)
def test_typedef_to_int_type_for_json(self): types = {} typedef = Param('tdef', 'int') parse_typedef_to_type_for_json(typedef, types) t = PrimitiveType('int') tdef = TypedefedType('tdef', t) expected = {t.type_hash: t, tdef.type_hash: tdef} self.assertEqual(types, expected)
def test_parse_typedef_to_struct_without_name_to_type_for_json(self): types = {} struct = 'typedef struct {} type_s;' s_info = parse_struct(struct, 'file') parse_struct_to_type_for_json(s_info, types) st = StructType('_TYPEDEF_type_s', []) typedef = TypedefedType('type_s', st) expected = {st.type_hash: st, typedef.type_hash: typedef} self.assertEqual(types, expected)
def test_parse_typedef_to_union_without_name_to_type_for_json(self): types = {} union = 'typedef union {} type_s;' s_info = parse_union(union, 'file') parse_union_to_type_for_json(s_info, types) st = UnionType('_TYPEDEF_type_s', []) typedef = TypedefedType('type_s', st) expected = {st.type_hash: st, typedef.type_hash: typedef} self.assertEqual(types, expected)
def test_parse_typedefed_enum_to_type_for_json(self): types = {} enum = 'typedef enum x{One = 1, Two = 3} my_type;' enum_info = parse_enum(enum, 'file') parse_enum_to_type_for_json(enum_info, types) e = EnumType('x', [EnumItem('One', 1), EnumItem('Two', 3)]) typ = TypedefedType('my_type', e) expected = {e.type_hash: e, typ.type_hash: typ} self.assertEqual(types, expected)
def test_parse_typedefed_enum_without_name(self): types = {} enum = 'typedef enum{ }e_type;' enum_info = parse_enum(enum, 'file') parse_enum_to_type_for_json(enum_info, types) enum_type = EnumType('_TYPEDEF_' + 'e_type', []) tdef = TypedefedType('e_type') expected = {enum_type.type_hash: enum_type, tdef.type_hash: tdef} self.assertEqual(types, expected)
def test_parse_nested_union_without_name_to_type_for_json_use_typedefed_name( self): union = 'typedef union { union { char c; }s2; } Tunion;' types = {} union = parse_union(union, 'file') parse_union_to_type_for_json(union, types) prim = PrimitiveType('char') s1 = UnionType('_TYPEDEF_Tunion', []) s2 = UnionType('_LOCAL_Tunion_s2', []) tdef = TypedefedType('Tunion', s1) expected = { prim.type_hash: prim, s1.type_hash: s1, s2.type_hash: s2, tdef.type_hash: tdef } self.assertEqual(types, expected)
def test_invalid_typedef_name_is_returned_as_typedef_with_empty_name_and_type( self): self.assertEqual(get_primitive_type_or_typedef(['xx(xx)']), TypedefedType(''))
def test_typedefed_type_correct_string_repr(self): self.assertEqual( TypedefedType('Tptr').__repr__(), "TypedefedType('Tptr', 'unknown')")
def test_typedefed_name_text_returns_correct_string(self): self.assertEqual(TypedefedType('Tptr').name_text, 'Tptr')
def test_not_primitve_type_without_modifiers_is_typedefed_type(self): self.assertEqual(parse_type_to_type_for_json('FILE', {}), TypedefedType('FILE'))
def test_parsing_empty_string_to_json_types_returns_typedef_to_unknown( self): self.assertEqual(parse_type_to_type_for_json('', {}), TypedefedType(''))
def test_ignore_macros_around_common_typedefs(self): self.assertEqual(parse_type_to_type_for_json('HRESULT MYAPI', {}), TypedefedType('HRESULT'))
def test_typedef_name_with_space_is_returned_as_unnamed_unknown_typedef( self): self.assertEqual(parse_type_to_type_for_json('some Macro', {}), TypedefedType(''))
def test_parse_ptr_to_common_typedef_correctly(self): self.assertEqual(parse_type_to_type_for_json('BOOL * MYAPI', {}), PointerType(TypedefedType('BOOL')))
def test_known_typedefed_type_returns_false_if_unknown_is_set(self): self.assertFalse(TypedefedType('Tname').known_typedefed_type)