From e2b96aaa46ce73812fd41e46d996cd21da18f7be Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Thu, 7 Aug 2014 12:23:54 -0400 Subject: tests: Add regression test for callbacks with an inout array https://bugzilla.gnome.org/show_bug.cgi?id=702508 --- .../Regress.TestCallbackArrayInOut.page | 33 +++++++++++++++++ .../Regress.test_array_inout_callback.page | 38 ++++++++++++++++++++ .../Regress.TestCallbackArrayInOut.page | 29 +++++++++++++++ .../Regress.test_array_inout_callback.page | 40 +++++++++++++++++++++ .../Regress.TestCallbackArrayInOut.page | 30 ++++++++++++++++ .../Regress.test_array_inout_callback.page | 41 ++++++++++++++++++++++ tests/scanner/Regress-1.0-expected.gir | 34 ++++++++++++++++++ tests/scanner/regress.c | 31 ++++++++++++++++ tests/scanner/regress.h | 7 ++++ 9 files changed, 283 insertions(+) create mode 100644 tests/scanner/Regress-1.0-C-expected/Regress.TestCallbackArrayInOut.page create mode 100644 tests/scanner/Regress-1.0-C-expected/Regress.test_array_inout_callback.page create mode 100644 tests/scanner/Regress-1.0-Gjs-expected/Regress.TestCallbackArrayInOut.page create mode 100644 tests/scanner/Regress-1.0-Gjs-expected/Regress.test_array_inout_callback.page create mode 100644 tests/scanner/Regress-1.0-Python-expected/Regress.TestCallbackArrayInOut.page create mode 100644 tests/scanner/Regress-1.0-Python-expected/Regress.test_array_inout_callback.page diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.TestCallbackArrayInOut.page b/tests/scanner/Regress-1.0-C-expected/Regress.TestCallbackArrayInOut.page new file mode 100644 index 00000000..0c8be370 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.TestCallbackArrayInOut.page @@ -0,0 +1,33 @@ + + + + + + Regress.TestCallbackArrayInOut + +void TestCallbackArrayInOut (int** ints, + int* length); + + + + + +<code>ints</code> + + + +<code>length</code> + + + +<code>Returns</code> + + + + + diff --git a/tests/scanner/Regress-1.0-C-expected/Regress.test_array_inout_callback.page b/tests/scanner/Regress-1.0-C-expected/Regress.test_array_inout_callback.page new file mode 100644 index 00000000..9da453a0 --- /dev/null +++ b/tests/scanner/Regress-1.0-C-expected/Regress.test_array_inout_callback.page @@ -0,0 +1,38 @@ + + + + + + + int + + regress_test_array_inout_callback + + RegressTestCallbackArrayInOut + callback + + + + regress_test_array_inout_callback + +int regress_test_array_inout_callback (RegressTestCallbackArrayInOut callback); + + + + + +<code>callback</code> + + + +<code>Returns</code> + + + + + diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestCallbackArrayInOut.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestCallbackArrayInOut.page new file mode 100644 index 00000000..8b77cbb1 --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.TestCallbackArrayInOut.page @@ -0,0 +1,29 @@ + + + + + + Regress.TestCallbackArrayInOut + +function onTestCallbackArrayInOut(ints: Array(Number(gint))): Array(Number(gint)) { +} + + + + + +<code>Returns</code> + + + +<code>Returns (out)</code> + + + + + diff --git a/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_array_inout_callback.page b/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_array_inout_callback.page new file mode 100644 index 00000000..e02c96da --- /dev/null +++ b/tests/scanner/Regress-1.0-Gjs-expected/Regress.test_array_inout_callback.page @@ -0,0 +1,40 @@ + + + + + + + Number(gint) + + regress_test_array_inout_callback + + Regress.TestCallbackArrayInOut + callback + + + + Regress.test_array_inout_callback + +function test_array_inout_callback(callback: Regress.TestCallbackArrayInOut): Number(gint) { + // Gjs wrapper for regress_test_array_inout_callback() +} + + + + + +<code>callback</code> + + + +<code>Returns</code> + + + + + diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.TestCallbackArrayInOut.page b/tests/scanner/Regress-1.0-Python-expected/Regress.TestCallbackArrayInOut.page new file mode 100644 index 00000000..0b4dd602 --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.TestCallbackArrayInOut.page @@ -0,0 +1,30 @@ + + + + + + Regress.TestCallbackArrayInOut + +@accepts([int], int) +@returns(none) +def on_TestCallbackArrayInOut(ints, length): + + + + + +<code>ints</code> + + + +<code>length</code> + + + + + diff --git a/tests/scanner/Regress-1.0-Python-expected/Regress.test_array_inout_callback.page b/tests/scanner/Regress-1.0-Python-expected/Regress.test_array_inout_callback.page new file mode 100644 index 00000000..aea60c6a --- /dev/null +++ b/tests/scanner/Regress-1.0-Python-expected/Regress.test_array_inout_callback.page @@ -0,0 +1,41 @@ + + + + + + + int + + regress_test_array_inout_callback + + Regress.TestCallbackArrayInOut + callback + + + + Regress.test_array_inout_callback + +@accepts(Regress.TestCallbackArrayInOut) +@returns(int) +def test_array_inout_callback(callback): + # Python wrapper for regress_test_array_inout_callback() + + + + + +<code>callback</code> + + + +<code>Returns</code> +{formatter.format(node, node.retval.doc)} + + + + diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index 89ecaa45..a907b300 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -2313,6 +2313,28 @@ use it should be. + + + + + + + + + + + + + + + @@ -4977,6 +4999,18 @@ libgnome-keyring. + + + + + + + + + + diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index b42e0cd0..e60b8e17 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -3362,6 +3362,37 @@ int regress_test_array_callback (RegressTestCallbackArray callback) return sum; } +/** + * regress_test_array_inout_callback: + * @callback: (scope call): + * + */ +int +regress_test_array_inout_callback (RegressTestCallbackArrayInOut callback) +{ + int *ints; + int length; + + ints = g_new (int, 5); + for (length = 0; length < 5; ++length) + ints[length] = length - 2; + + callback (&ints, &length); + + g_assert_cmpint (length, ==, 4); + for (length = 0; length < 4; ++length) + g_assert_cmpint (ints[length], ==, length - 1); + + callback (&ints, &length); + + g_assert_cmpint (length, ==, 3); + for (length = 0; length < 3; ++length) + g_assert_cmpint (ints[length], ==, length); + + g_free (ints); + return length; +} + /** * regress_test_simple_callback: * @callback: (scope call) (allow-none): diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index 667f1298..3bbcb991 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -713,11 +713,18 @@ typedef int (*RegressTestCallbackFull) (int foo, double bar, char *path); * @two_length: */ typedef int (*RegressTestCallbackArray) (int *one, gsize one_length, const char** two, int two_length); +/** + * RegressTestCallbackArrayInOut: + * @ints: (inout) (array length=length): + * @length: (inout): + */ +typedef void (* RegressTestCallbackArrayInOut) (int **ints, int *length); void regress_test_simple_callback (RegressTestSimpleCallback callback); int regress_test_callback (RegressTestCallback callback); int regress_test_multi_callback (RegressTestCallback callback); int regress_test_array_callback (RegressTestCallbackArray callback); +int regress_test_array_inout_callback (RegressTestCallbackArrayInOut callback); int regress_test_callback_user_data (RegressTestCallbackUserData callback, gpointer user_data); int regress_test_callback_destroy_notify (RegressTestCallbackUserData callback, -- cgit v1.2.1