You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
4.5 KiB

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"