def test_call_conv_is_set_only_when_one_of_CALL_CONVENTIONS(self): types = {} fptr = 'void (__MYCALL)(int p1)' fptr_type = parse_type_to_type_for_json(fptr, types) types[fptr_type.type_hash] = fptr_type ret_type = VoidType() p1 = PrimitiveType('int') func_type = FunctionType(ret_type, [Param('p1', p1.type_hash)], False) expected = { ret_type.type_hash: ret_type, p1.type_hash: p1, func_type.type_hash: func_type } self.assertEqual(types, expected)
def test_parse_function_with_call_conv_to_type_for_json(self): types = {} fptr = 'void (__cdecl)(int p1)' fptr_type = parse_type_to_type_for_json(fptr, types) types[fptr_type.type_hash] = fptr_type ret_type = VoidType() p1 = PrimitiveType('int') func_type = FunctionType(ret_type, [Param('p1', p1.type_hash)], False, 'cdecl') expected = { ret_type.type_hash: ret_type, p1.type_hash: p1, func_type.type_hash: func_type } self.assertEqual(types, expected)
def test_parse_ptr_to_function_no_params_to_type_for_json(self): types = {} fptr = 'void * (*)()' fptr_type = parse_type_to_type_for_json(fptr, types) types[fptr_type.type_hash] = fptr_type ret = PrimitiveType('void') ret_type = PointerType(ret) func_type = FunctionType(ret_type, []) ptr = PointerType(func_type) expected = { ret_type.type_hash: ret_type, ret.type_hash: ret, func_type.type_hash: func_type, ptr.type_hash: ptr } self.assertEqual(types, expected)
def test_parse_ptr_to_vararg_function_to_type_for_json(self): types = {} fptr = 'void (*)(int p1, ...)' fptr_type = parse_type_to_type_for_json(fptr, types) types[fptr_type.type_hash] = fptr_type ret_type = PrimitiveType('void') p1 = PrimitiveType('int') func_type = FunctionType(ret_type, [Param('p1', p1.type_hash)], True) ptr = PointerType(func_type) expected = { ret_type.type_hash: ret_type, p1.type_hash: p1, func_type.type_hash: func_type, ptr.type_hash: ptr } self.assertEqual(types, expected)
def test_parse_ptr_to_function_with_ptr_to_func_as_param(self): types = {} fptr = 'void (*)(void (*)())' fptr_type = parse_type_to_type_for_json(fptr, types) types[fptr_type.type_hash] = fptr_type ret_type = PrimitiveType('void') param = FunctionType(ret_type, []) param_ptr = PointerType(param) func_type = FunctionType(ret_type, [Param('', param_ptr.type_hash)]) ptr = PointerType(func_type) expected = { ret_type.type_hash: ret_type, param.type_hash: param, param_ptr.type_hash: param_ptr, func_type.type_hash: func_type, ptr.type_hash: ptr } self.assertEqual(types, expected)
def test_parse_array_multi_dimensional(self): self.assertEqual(parse_type_to_type_for_json('int [10][10][12]', {}), ArrayType(PrimitiveType('int'), [10, 10, 12]))
def test_parse_array_one_dimension_not_specified(self): self.assertEqual(parse_type_to_type_for_json('int [][10]', {}), ArrayType(PrimitiveType('int'), ['', 10]))
def test_parse_array_of_structs(self): self.assertEqual(parse_type_to_type_for_json('struct A [10]', {}), ArrayType(StructType('A'), [10]))
def test_parse_ptr_to_const_struct_inversion(self): self.assertEqual( parse_type_to_type_for_json('struct info const *', {}), PointerType(QualifierType('const', StructType('info'))))
def test_unsigned_type_is_primitive_type_place_of_unsigned_not_matter( self): self.assertEqual(parse_type_to_type_for_json('long unsigned int', {}), PrimitiveType('long unsigned int'))
def test_not_primitve_type_without_modifiers_is_typedefed_type(self): self.assertEqual(parse_type_to_type_for_json('FILE', {}), TypedefedType('FILE'))
def test_char_const_is_constant_type_of_primitive_type(self): self.assertEqual(parse_type_to_type_for_json('char const', {}), QualifierType('const', PrimitiveType('char')))
def test_restrict_char_is_restrict_type_of_primitive_type(self): self.assertEqual(parse_type_to_type_for_json('restrict char', {}), QualifierType('restrict', PrimitiveType('char')))
def test_more_modifiers_in_one_type_parsed_correctly(self): self.assertEqual( parse_type_to_type_for_json('volatile char * const', {}), QualifierType( 'const', PointerType(QualifierType('volatile', PrimitiveType('char')))))
def test_ptr_to_const_ptr_to_void_is_(self): self.assertEqual( parse_type_to_type_for_json('void * const *', {}), PointerType( QualifierType('const', PointerType(PrimitiveType('void')))))
def test_char_const_ptr_is_pointer_type_to_const_type_of_primitive_type( self): self.assertEqual( parse_type_to_type_for_json('char const *', {}), PointerType(QualifierType('const', PrimitiveType('char'))))
def test_signed_modifier_with_primitive_type_is_primitive_type(self): self.assertEqual( parse_type_to_type_for_json('long signed long int', {}), PrimitiveType('long signed long int'))
def test_signed_is_primitive_type(self): self.assertEqual(parse_type_to_type_for_json('signed', {}), PrimitiveType('signed'))
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_volatile_char_is_volatile_type_of_primitive_type(self): self.assertEqual(parse_type_to_type_for_json('volatile char', {}), QualifierType('volatile', PrimitiveType('char')))
def test_parse_array_dimension_set_by_arithmetic_expr(self): self.assertEqual( parse_type_to_type_for_json('int [10][5 + sizeof(int) - 4 * 3]', {}), ArrayType(PrimitiveType('int'), [10, '5 + sizeof(int) - 4 * 3']))
def test_ignore_macros_around_common_typedefs(self): self.assertEqual(parse_type_to_type_for_json('HRESULT MYAPI', {}), TypedefedType('HRESULT'))
def test_struct_in_params_is_struct_type(self): self.assertEqual(parse_type_to_type_for_json('struct sname', {}), StructType('sname'))
def test_unsigned_type_is_primitive_type(self): self.assertEqual(parse_type_to_type_for_json('unsigned long int', {}), PrimitiveType('unsigned long int'))
def test_union_in_params_is_union_type(self): self.assertEqual(parse_type_to_type_for_json('union uname', {}), UnionType('uname'))
def test_enum_in_params_is_enum_type(self): self.assertEqual(parse_type_to_type_for_json('enum ename', {}), EnumType('ename'))
def test_ignore_macros_around_void_type(self): self.assertEqual(parse_type_to_type_for_json('void MYAPI', {}), VoidType())
def test_parse_const_array_one_dimension(self): self.assertEqual( parse_type_to_type_for_json('const int [10]', {}), ArrayType(QualifierType('const', PrimitiveType('int')), [10]))
def test_parse_ptr_to_common_typedef_correctly(self): self.assertEqual(parse_type_to_type_for_json('BOOL * MYAPI', {}), PointerType(TypedefedType('BOOL')))
def test_ptr_ptr_char_is_pointer_type_to_pointer_type_to_primitive_type( self): self.assertEqual(parse_type_to_type_for_json('char **', {}), PointerType(PointerType(PrimitiveType('char'))))