diff options
author | Mikkel Kamstrup Erlandsen <mikkel.kamstrup@canonical.com> | 2011-10-04 12:01:42 +0200 |
---|---|---|
committer | Martin Pitt <martin.pitt@ubuntu.com> | 2011-10-25 08:41:16 +0200 |
commit | e05ed0f9c1de597cb6f925505f58cb919a5bf1c4 (patch) | |
tree | 6e9277d3b35151027b97f389d4c88ad250251b67 /tests | |
parent | d6ab510feb72ac0ff30f0942e874e2d52f3e82f6 (diff) | |
download | gobject-introspection-e05ed0f9c1de597cb6f925505f58cb919a5bf1c4.tar.gz |
fixes and more tests for marshalling of arrays of gvariants
Fix return type annotation for gi_marshalling_tests_array_gvariant_in()
Add function variations of gi_marshalling_tests_array_gvariant_i() with
different transfer modes.
Make gi_marshalling_tests_array_gvariant_none_in() actually respect
the transfer none annotation on the return value.
https://bugzilla.gnome.org/show_bug.cgi?id=638915
Signed-off-by: Martin Pitt <martin.pitt@ubuntu.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gimarshallingtests.c | 65 | ||||
-rw-r--r-- | tests/gimarshallingtests.h | 6 |
2 files changed, 67 insertions, 4 deletions
diff --git a/tests/gimarshallingtests.c b/tests/gimarshallingtests.c index 637c7d50..073d153a 100644 --- a/tests/gimarshallingtests.c +++ b/tests/gimarshallingtests.c @@ -1578,18 +1578,77 @@ gi_marshalling_tests_array_zero_terminated_inout (gchar ***utf8s) } /** - * gi_marshalling_tests_array_gvariant_in: + * gi_marshalling_tests_array_gvariant_none_in: * @variants: (array zero-terminated=1) (transfer none): + * Returns: (array zero-terminated=1) (transfer none): + */ +GVariant ** +gi_marshalling_tests_array_gvariant_none_in (GVariant **variants) +{ + /* Use a static container to detect if someone tries to free it */ + static GVariant *private_container[3] = { NULL, NULL, NULL }; + + if (private_container[0] == NULL) { + private_container[0] = g_variant_new_int32 (27); + private_container[1] = g_variant_new_string ("Hello"); + } + + g_assert (variants != NULL); + g_assert_cmpint (g_variant_get_int32 (variants[0]), ==, 27); + g_assert_cmpstr (g_variant_get_string (variants[1], NULL), ==, "Hello"); + g_assert (variants[2] == NULL); + + return private_container; +} + +/** + * gi_marshalling_tests_array_gvariant_container_in: + * @variants: (array zero-terminated=1) (transfer container): + * Returns: (array zero-terminated=1) (transfer container): */ GVariant ** -gi_marshalling_tests_array_gvariant_in (GVariant **variants) +gi_marshalling_tests_array_gvariant_container_in (GVariant **variants) { + GVariant **container; + g_assert (variants != NULL); g_assert_cmpint (g_variant_get_int32 (variants[0]), ==, 27); g_assert_cmpstr (g_variant_get_string (variants[1], NULL), ==, "Hello"); g_assert (variants[2] == NULL); + + container = g_new0 (GVariant*, 3); + container[0] = variants[0]; + container[1] = variants[1]; + g_free (variants); + + return container; +} + +/** + * gi_marshalling_tests_array_gvariant_full_in: + * @variants: (array zero-terminated=1) (transfer full): + * Returns: (array zero-terminated=1) (transfer full): + */ +GVariant ** +gi_marshalling_tests_array_gvariant_full_in (GVariant **variants) +{ + GVariant **container; - return variants; + g_assert (variants != NULL); + g_assert_cmpint (g_variant_get_int32 (variants[0]), ==, 27); + g_assert_cmpstr (g_variant_get_string (variants[1], NULL), ==, "Hello"); + g_assert (variants[2] == NULL); + + /* To catch different behaviors we reconstruct one variant from scratch, + * while leaving the other untouched. Both approaches are legal with full + * transfer in and out */ + container = g_new0 (GVariant*, 3); + container[0] = g_variant_new_int32 (g_variant_get_int32 (variants[0])); + g_variant_unref (variants[0]); + container[1] = variants[1]; + g_free (variants); + + return container; } /** diff --git a/tests/gimarshallingtests.h b/tests/gimarshallingtests.h index 81c3a50a..388ee051 100644 --- a/tests/gimarshallingtests.h +++ b/tests/gimarshallingtests.h @@ -403,7 +403,11 @@ void gi_marshalling_tests_array_zero_terminated_out (gchar ***utf8s); void gi_marshalling_tests_array_zero_terminated_inout (gchar ***utf8s); -GVariant **gi_marshalling_tests_array_gvariant_in (GVariant **variants); +GVariant **gi_marshalling_tests_array_gvariant_none_in (GVariant **variants); + +GVariant **gi_marshalling_tests_array_gvariant_container_in (GVariant **variants); + +GVariant **gi_marshalling_tests_array_gvariant_full_in (GVariant **variants); /* GArray */ |