def test_namespace(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' namespace A { namespace B { struct C { } } } ''', debug=True) self.assertEqual(1, len(parser.root_namespace._children)) a = parser.root_namespace._children[0] self.assertEqual('A', a.name) self.assertEqual(1, len(a._children)) b = a._children[0] self.assertEqual(1, len(b._children)) self.assertEqual('B', b.name) c = b._children[0] self.assertEqual(0, len(c._children)) self.assertEqual('C', c.name)
def test_function(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, 'typedef void (*T)();', debug=True) typedef = parser.root_namespace.user_type_map['T'] if not isinstance(typedef, cpptypeinfo.usertype.Typedef): raise Exception() self.assertEqual(typedef.typeref.ref, cpptypeinfo.UInt64())
def test_void_int(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, 'void func(int a);', debug=True) func = parser.root_namespace.functions[0] self.assertEqual(TypeRef(cpptypeinfo.Void(), False), func.result) self.assertEqual(1, len(func.params)) self.assertEqual(TypeRef(cpptypeinfo.Int32()), func.params[0].typeref)
def test_int8_ptr(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, 'typedef char* T;', debug=True) typedef = parser.root_namespace.user_type_map['T'] if not isinstance(typedef, cpptypeinfo.usertype.Typedef): raise Exception() self.assertEqual(typedef.typeref.ref, cpptypeinfo.usertype.Pointer(cpptypeinfo.Int8()))
def test_callback(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' typedef struct _NCB { void (*ncb_post)( struct _NCB * ); /* POST routine address */ } NCB, *PNCB; ''', debug=True)
def test_struct_forward_pointer(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' typedef struct Forward *T; ''', debug=True) typedef = parser.root_namespace.user_type_map['T'] if not isinstance(typedef, cpptypeinfo.usertype.Typedef): raise Exception()
def test_linklist(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY; ''', debug=True)
def test_elaborated(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' typedef struct __crt_locale_pointers { struct __crt_locale_data* locinfo; struct __crt_multibyte_data* mbcinfo; } __crt_locale_pointers ''', debug=True)
def test_anonymous_union(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' typedef struct D3D11_VIDEO_COLOR { union { int YCbCr; float RGBA; } ; } D3D11_VIDEO_COLOR; ''', debug=True)
def test_struct(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' typedef struct Tag { } T; typedef T* TP; ''', debug=True) typedef = parser.root_namespace.user_type_map['T'] if not isinstance(typedef, cpptypeinfo.usertype.Typedef): raise Exception() self.assertEqual(typedef.typeref.ref, cpptypeinfo.usertype.Struct('Tag'))
def test_excpt(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, ''' int __cdecl __C_specific_handler( struct _EXCEPTION_RECORD* ExceptionRecord, void* EstablisherFrame, struct _CONTEXT* ContextRecord, struct _DISPATCHER_CONTEXT* DispatcherContext ); ''', debug=True) func = parser.root_namespace.functions[0] self.assertEqual(TypeRef(cpptypeinfo.Void(), False), func.result) self.assertEqual(1, len(func.params)) self.assertEqual(TypeRef(cpptypeinfo.Int32()), func.params[0].typeref)
def test_function(self) -> None: parser = cpptypeinfo.TypeParser() cpptypeinfo.parse_source(parser, SOURCE, debug=True)