From d8e257464bd93ea502740169887297fa62925a16 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 6 Nov 2015 12:42:11 +0100 Subject: tests: Add more regression tests for (not nullable) On bug #719966, the question arose of whether parameters annotated with (element-type) but not (not nullable) are regarded as nullable or non-nullable. Add some new unit tests to Regress-1.0.gir to check the behaviour is as expected: annotating a parameter with (element-type) implicitly makes it non-nullable (unless also annotated with (nullable)). https://bugzilla.gnome.org/show_bug.cgi?id=757678 --- giscanner/maintransformer.py | 1 + ...Obj.not_nullable_element_typed_gpointer_in.page | 56 ++++++++++++++++++++++ ...ess.TestObj.not_nullable_typed_gpointer_in.page | 47 ++++++++++++++++++ ...Obj.not_nullable_element_typed_gpointer_in.page | 36 ++++++++++++++ ...ess.TestObj.not_nullable_typed_gpointer_in.page | 36 ++++++++++++++ ...Obj.not_nullable_element_typed_gpointer_in.page | 53 ++++++++++++++++++++ ...ess.TestObj.not_nullable_typed_gpointer_in.page | 45 +++++++++++++++++ tests/scanner/Regress-1.0-expected.gir | 38 +++++++++++++++ tests/scanner/Regress-1.0-sections-expected.txt | 2 + tests/scanner/regress.c | 24 ++++++++++ tests/scanner/regress.h | 7 +++ 11 files changed, 345 insertions(+) create mode 100644 tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page create mode 100644 tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page create mode 100644 tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page create mode 100644 tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page create mode 100644 tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page create mode 100644 tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index b4b39345..23ed4102 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -649,6 +649,7 @@ class MainTransformer(object): # gpointer parameters and return values are always nullable unless: # - annotated with (type) and not also with (nullable); or + # - annotated with (element-type) and not also with (nullable); or # - annotated (not nullable) # See: https://bugzilla.gnome.org/show_bug.cgi?id=719966#c22 if node.type.is_equiv(ast.TYPE_ANY): diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page b/tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page new file mode 100644 index 00000000..ddc90078 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page @@ -0,0 +1,56 @@ + + + + + + + void + + regress_test_obj_not_nullable_element_typed_gpointer_in + + RegressTestObj* + obj + + + guint8* + input + + + guint + count + + + + regress_test_obj_not_nullable_element_typed_gpointer_in + +void regress_test_obj_not_nullable_element_typed_gpointer_in (RegressTestObj* obj, + guint8* input, + guint count); + + + + + +<code>obj</code> +

A

+
+ +<code>input</code> +

some uint8 array

+
+ +<code>count</code> +

length of input

+
+ +<code>Returns</code> + + +
+ +
diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page b/tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page new file mode 100644 index 00000000..7e04ac54 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page @@ -0,0 +1,47 @@ + + + + + + + void + + regress_test_obj_not_nullable_typed_gpointer_in + + RegressTestObj* + obj + + + gpointer + input + + + + regress_test_obj_not_nullable_typed_gpointer_in + +void regress_test_obj_not_nullable_typed_gpointer_in (RegressTestObj* obj, + gpointer input); + + + + + +<code>obj</code> +

A

+
+ +<code>input</code> +

some GObject.Object

+
+ +<code>Returns</code> + + +
+ +
diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page new file mode 100644 index 00000000..d14a4ad5 --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page @@ -0,0 +1,36 @@ + + + + + + + void + + regress_test_obj_not_nullable_element_typed_gpointer_in + + ByteArray + input + + + + Regress.TestObj.prototype.not_nullable_element_typed_gpointer_in + +function not_nullable_element_typed_gpointer_in(input: ByteArray): void { + // Gjs wrapper for regress_test_obj_not_nullable_element_typed_gpointer_in() +} + + + + + +<code>input</code> +

some uint8 array

+
+
+ +
diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page new file mode 100644 index 00000000..eac06e1b --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page @@ -0,0 +1,36 @@ + + + + + + + void + + regress_test_obj_not_nullable_typed_gpointer_in + + GObject.Object + input + + + + Regress.TestObj.prototype.not_nullable_typed_gpointer_in + +function not_nullable_typed_gpointer_in(input: GObject.Object): void { + // Gjs wrapper for regress_test_obj_not_nullable_typed_gpointer_in() +} + + + + + +<code>input</code> +

some GObject.Object

+
+
+ +
diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page new file mode 100644 index 00000000..4f60d9df --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_element_typed_gpointer_in.page @@ -0,0 +1,53 @@ + + + + + + + none + + regress_test_obj_not_nullable_element_typed_gpointer_in + + Regress.TestObj + self + + + [guint8] + input + + + int + count + + + + Regress.TestObj.not_nullable_element_typed_gpointer_in + +@accepts(Regress.TestObj, [guint8], int) +@returns(none) +def not_nullable_element_typed_gpointer_in(self, input, count): + # Python wrapper for regress_test_obj_not_nullable_element_typed_gpointer_in() + + + + + +<code>self</code> +

A

+
+ +<code>input</code> +

some uint8 array

+
+ +<code>count</code> +

length of input

+
+
+ +
diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page new file mode 100644 index 00000000..eb0a23f7 --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestObj.not_nullable_typed_gpointer_in.page @@ -0,0 +1,45 @@ + + + + + + + none + + regress_test_obj_not_nullable_typed_gpointer_in + + Regress.TestObj + self + + + GObject.Object + input + + + + Regress.TestObj.not_nullable_typed_gpointer_in + +@accepts(Regress.TestObj, GObject.Object) +@returns(none) +def not_nullable_typed_gpointer_in(self, input): + # Python wrapper for regress_test_obj_not_nullable_typed_gpointer_in() + + + + + +<code>self</code> +

A

+
+ +<code>input</code> +

some GObject.Object

+
+
+ +
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 6f991b78..06aff1d4 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -3151,6 +3151,44 @@ case. + + + + + + + A #RegressTestObj + + + + some uint8 array + + + + + + length of @input + + + + + + + + + + + A #RegressTestObj + + + + some #GObject + + + + diff --git a/tests/scanner/Regress-1.0-sections-expected.txt b/tests/scanner/Regress-1.0-sections-expected.txt index e0f9a1b7..c7ba75c6 100644 --- a/tests/scanner/Regress-1.0-sections-expected.txt +++ b/tests/scanner/Regress-1.0-sections-expected.txt @@ -343,6 +343,8 @@ regress_forced_method regress_test_obj_instance_method regress_test_obj_instance_method_callback regress_test_obj_instance_method_full +regress_test_obj_not_nullable_element_typed_gpointer_in +regress_test_obj_not_nullable_typed_gpointer_in regress_test_obj_set_bare regress_test_obj_skip_inout_param regress_test_obj_skip_out_param diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index 9a9ee679..fa481054 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -3041,6 +3041,30 @@ regress_func_obj_nullable_in (RegressTestObj *obj) { } +/** + * regress_test_obj_not_nullable_typed_gpointer_in: + * @obj: A #RegressTestObj + * @input: (type GObject): some #GObject + */ +void +regress_test_obj_not_nullable_typed_gpointer_in (RegressTestObj *obj, + gpointer input) +{ +} + +/** + * regress_test_obj_not_nullable_element_typed_gpointer_in: + * @obj: A #RegressTestObj + * @input: (element-type guint8) (array length=count): some uint8 array + * @count: length of @input + */ +void +regress_test_obj_not_nullable_element_typed_gpointer_in (RegressTestObj *obj, + gpointer input, + guint count) +{ +} + /** * regress_test_array_fixed_out_objects: * @objs: (out) (array fixed-size=2) (transfer full): An array of #RegressTestObj diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index d77a7a97..99cd3112 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -927,6 +927,13 @@ void regress_test_obj_null_out (RegressTestObj **obj); void regress_func_obj_nullable_in (RegressTestObj *obj); +void regress_test_obj_not_nullable_typed_gpointer_in (RegressTestObj *obj, + gpointer input); + +void regress_test_obj_not_nullable_element_typed_gpointer_in (RegressTestObj *obj, + gpointer input, + guint count); + /* inheritance */ #define REGRESS_TEST_TYPE_SUB_OBJ (regress_test_sub_obj_get_type ()) #define REGRESS_TEST_SUB_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), REGRESS_TEST_TYPE_SUB_OBJ, RegressTestSubObj)) -- cgit v1.2.1