from cffi.model import * def test_void_type(): assert void_type.get_c_name() == "void" assert void_type.get_c_name("foo") == "void foo" assert void_type.get_c_name("*foo") == "void *foo" def test_primitive_type(): int_type = PrimitiveType("int") assert int_type.get_c_name() == "int" assert int_type.get_c_name("foo") == "int foo" assert int_type.get_c_name("*foo") == "int *foo" assert int_type.get_c_name("[5]") == "int[5]" def test_raw_function_type(): int_type = PrimitiveType("int") fn_type = RawFunctionType([], int_type, False) assert fn_type.get_c_name() == "int()(void)" assert fn_type.get_c_name("*") == "int( *)(void)" assert fn_type.get_c_name("*foo") == "int( *foo)(void)" fn_type = RawFunctionType([int_type], int_type, False) assert fn_type.get_c_name() == "int()(int)" fn_type = RawFunctionType([int_type] * 2, int_type, False) assert fn_type.get_c_name() == "int()(int, int)" # fn_type = RawFunctionType([int_type], int_type, True) assert fn_type.get_c_name() == "int()(int, ...)" assert fn_type.get_c_name("*foo") == "int( *foo)(int, ...)" # res_type = FunctionPtrType([int_type], int_type, True) fn_type = RawFunctionType([int_type], res_type, True) assert fn_type.get_c_name("x") == "int(*( x)(int, ...))(int, ...)" def test_function_ptr_type(): int_type = PrimitiveType("int") fn_type = FunctionPtrType([], int_type, False) assert fn_type.get_c_name() == "int(*)(void)" assert fn_type.get_c_name("*") == "int(* *)(void)" assert fn_type.get_c_name("*foo") == "int(* *foo)(void)" fn_type = FunctionPtrType([int_type], int_type, False) assert fn_type.get_c_name() == "int(*)(int)" fn_type = FunctionPtrType([int_type] * 2, int_type, False) assert fn_type.get_c_name() == "int(*)(int, int)" # fn_type = FunctionPtrType([int_type], int_type, True) assert fn_type.get_c_name() == "int(*)(int, ...)" def test_pointer_type(): ptr_type = PointerType(PrimitiveType("int")) assert ptr_type.get_c_name("x") == "int * x" def test_const_pointer_type(): ptr_type = ConstPointerType(PrimitiveType("int")) assert ptr_type.get_c_name("x") == "int const * x" ptr_type = ConstPointerType(ArrayType(PrimitiveType("int"), 5)) assert ptr_type.get_c_name("") == "int(const *)[5]" assert ptr_type.get_c_name("*x") == "int(const * *x)[5]" def test_qual_pointer_type(): ptr_type = PointerType(PrimitiveType("long long"), Q_RESTRICT) assert ptr_type.get_c_name("") == "long long __restrict *" assert const_voidp_type.get_c_name("") == "void const *" def test_unknown_pointer_type(): ptr_type = unknown_ptr_type("foo_p") assert ptr_type.get_c_name("") == "foo_p" assert ptr_type.get_c_name("x") == "foo_p x" def test_unknown_type(): u_type = unknown_type("foo_t") assert u_type.get_c_name("") == "foo_t" assert u_type.get_c_name("x") == "foo_t x" def test_array_type(): a_type = ArrayType(PrimitiveType("int"), None) assert a_type.get_c_name("") == "int[]" assert a_type.get_c_name("x") == "int x[]" assert a_type.get_c_name("*x") == "int(*x)[]" assert a_type.get_c_name(" *x") == "int(*x)[]" assert a_type.get_c_name("[5]") == "int[5][]" a_type = ArrayType(unknown_type("foo_t"), 5) assert a_type.get_c_name("") == "foo_t[5]" assert a_type.get_c_name("x") == "foo_t x[5]" assert a_type.get_c_name("*x") == "foo_t(*x)[5]" a_type = ArrayType(unknown_ptr_type("foo_p"), None) assert a_type.get_c_name("") == "foo_p[]" assert a_type.get_c_name("x") == "foo_p x[]" assert a_type.get_c_name("*x") == "foo_p(*x)[]" a_type = ArrayType(ConstPointerType(PrimitiveType("int")), None) assert a_type.get_c_name("") == "int const *[]" assert a_type.get_c_name("x") == "int const * x[]" assert a_type.get_c_name("*x") == "int const *(*x)[]" fn_type = FunctionPtrType([], PrimitiveType("int"), False) a_type = ArrayType(fn_type, 5) assert a_type.get_c_name("") == "int(*[5])(void)" assert a_type.get_c_name("x") == "int(* x[5])(void)" assert a_type.get_c_name("*x") == "int(*(*x)[5])(void)" def test_struct_type(): struct_type = StructType("foo_s", None, None, None) assert struct_type.get_c_name() == "struct foo_s" assert struct_type.get_c_name("*x") == "struct foo_s *x" def test_union_type(): union_type = UnionType("foo_s", None, None, None) assert union_type.get_c_name() == "union foo_s" def test_enum_type(): enum_type = EnumType("foo_e", [], []) assert enum_type.get_c_name() == "enum foo_e"