diff options
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 24 | ||||
-rw-r--r-- | tests/scanner/regress.c | 92 | ||||
-rw-r--r-- | tests/scanner/regress.h | 2 |
3 files changed, 118 insertions, 0 deletions
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir index ae047256..5d806d36 100644 --- a/tests/scanner/Regress-1.0-expected.gir +++ b/tests/scanner/Regress-1.0-expected.gir @@ -2201,6 +2201,30 @@ call and can be released on return.</doc> </type> </return-value> </function> + <function name="test_ghash_gvalue_in" + c:identifier="regress_test_ghash_gvalue_in"> + <return-value transfer-ownership="none"> + <type name="none" c:type="void"/> + </return-value> + <parameters> + <parameter name="hash" transfer-ownership="none"> + <doc xml:whitespace="preserve">the hash table returned by regress_test_ghash_gvalue_return().</doc> + <type name="GLib.HashTable" c:type="GHashTable*"> + <type name="utf8"/> + <type name="GObject.Value"/> + </type> + </parameter> + </parameters> + </function> + <function name="test_ghash_gvalue_return" + c:identifier="regress_test_ghash_gvalue_return"> + <return-value transfer-ownership="none"> + <type name="GLib.HashTable" c:type="GHashTable*"> + <type name="utf8"/> + <type name="GObject.Value"/> + </type> + </return-value> + </function> <function name="test_ghash_nested_everything_return" c:identifier="regress_test_ghash_nested_everything_return"> <doc xml:whitespace="preserve">Specify nested parameterized types directly with the (type ) annotation.</doc> diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index 7e838d34..30029f9f 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -1205,6 +1205,98 @@ regress_test_ghash_nothing_return2 (void) return regress_test_table_ghash_const (); } +static GValue * +g_value_new (GType type) +{ + GValue *value = g_slice_new0(GValue); + g_value_init(value, type); + return value; +} + +static void +g_value_free (GValue *value) +{ + g_value_unset(value); + g_slice_free(GValue, value); +} + +static const gchar *string_array[] = { + "first", + "second", + "third", + NULL +}; + +/** + * regress_test_ghash_gvalue_return: + * + * Return value: (element-type utf8 GValue) (transfer none): + */ +GHashTable * +regress_test_ghash_gvalue_return (void) +{ + GHashTable *hash; + GValue *value; + hash = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, (GDestroyNotify)g_value_free); + + value = g_value_new(G_TYPE_INT); + g_value_set_int(value, 12); + g_hash_table_insert(hash, g_strdup("integer"), value); + + value = g_value_new(G_TYPE_BOOLEAN); + g_value_set_boolean(value, TRUE); + g_hash_table_insert(hash, g_strdup("boolean"), value); + + value = g_value_new(G_TYPE_STRING); + g_value_set_string(value, "some text"); + g_hash_table_insert(hash, g_strdup("string"), value); + + value = g_value_new(G_TYPE_STRV); + g_value_set_boxed(value, string_array); + g_hash_table_insert(hash, g_strdup("strings"), value); + + return hash; +} + +/** + * regress_test_ghash_gvalue_in: + * @hash: (element-type utf8 GValue): the hash table returned by + * regress_test_ghash_gvalue_return(). + */ +void +regress_test_ghash_gvalue_in (GHashTable *hash) +{ + GValue *value; + const gchar **strings; + int i; + + g_assert(hash != NULL); + + value = g_hash_table_lookup(hash, "integer"); + g_assert(value != NULL); + g_assert(G_VALUE_HOLDS_INT(value)); + g_assert(g_value_get_int(value) == 12); + + value = g_hash_table_lookup(hash, "boolean"); + g_assert(value != NULL); + g_assert(G_VALUE_HOLDS_BOOLEAN(value)); + g_assert(g_value_get_boolean(value) == TRUE); + + value = g_hash_table_lookup(hash, "string"); + g_assert(value != NULL); + g_assert(G_VALUE_HOLDS_STRING(value)); + g_assert(strcmp(g_value_get_string(value), "some text") == 0); + + value = g_hash_table_lookup(hash, "strings"); + g_assert(value != NULL); + g_assert(G_VALUE_HOLDS(value, G_TYPE_STRV)); + strings = g_value_get_boxed(value); + g_assert(strings != NULL); + for (i = 0; string_array[i] != NULL; i++) + g_assert(strcmp(strings[i], string_array[i]) == 0); +} + /** * regress_test_ghash_container_return: * diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h index 65a158a1..6ef3b604 100644 --- a/tests/scanner/regress.h +++ b/tests/scanner/regress.h @@ -102,6 +102,8 @@ void regress_test_gslist_null_out(GSList **out_list); const GHashTable *regress_test_ghash_null_return (void); const GHashTable *regress_test_ghash_nothing_return (void); GHashTable *regress_test_ghash_nothing_return2 (void); +GHashTable *regress_test_ghash_gvalue_return (void); +void regress_test_ghash_gvalue_in (GHashTable *hash); GHashTable *regress_test_ghash_container_return (void); GHashTable *regress_test_ghash_everything_return (void); void regress_test_ghash_null_in (const GHashTable *in); |