summaryrefslogtreecommitdiff
path: root/testing/cffi0/test_model.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/cffi0/test_model.py')
-rw-r--r--testing/cffi0/test_model.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/testing/cffi0/test_model.py b/testing/cffi0/test_model.py
new file mode 100644
index 0000000..bb653ca
--- /dev/null
+++ b/testing/cffi0/test_model.py
@@ -0,0 +1,111 @@
+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"