1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
4 #include <glib-object.h>
5 #include <gobject/gvaluecollector.h>
9 static gboolean abort_on_error = TRUE;
11 #define ASSERT_VALUE(condition) \
13 g_assert (condition); \
15 g_warn_if_fail (condition); \
18 regress_set_abort_on_error (gboolean in)
25 regress_test_boolean (gboolean in)
31 regress_test_boolean_true (gboolean in)
33 ASSERT_VALUE (in == TRUE);
38 regress_test_boolean_false (gboolean in)
40 ASSERT_VALUE (in == FALSE);
45 regress_test_int8 (gint8 in)
51 regress_test_uint8 (guint8 in)
57 regress_test_int16 (gint16 in)
63 regress_test_uint16 (guint16 in)
69 regress_test_int32 (gint32 in)
75 regress_test_uint32 (guint32 in)
81 regress_test_int64 (gint64 in)
87 regress_test_uint64 (guint64 in)
93 regress_test_short (gshort in)
99 regress_test_ushort (gushort in)
105 regress_test_int (gint in)
111 regress_test_uint (guint in)
117 regress_test_long (glong in)
123 regress_test_ulong (gulong in)
129 regress_test_ssize (gssize in)
135 regress_test_size (gsize in)
141 regress_test_float (gfloat in)
147 regress_test_double (gdouble in)
153 regress_test_unichar (gunichar in)
159 regress_test_timet (time_t in)
165 regress_test_gtype (GType in)
171 regress_test_closure (GClosure *closure)
173 GValue return_value = {0, };
176 g_value_init (&return_value, G_TYPE_INT);
178 g_closure_invoke (closure,
183 ret = g_value_get_int (&return_value);
185 g_value_unset(&return_value);
191 regress_test_closure_one_arg (GClosure *closure, int arg)
193 GValue return_value = {0, };
197 g_value_init (&return_value, G_TYPE_INT);
199 memset (&arguments[0], 0, sizeof (arguments));
200 g_value_init (&arguments[0], G_TYPE_INT);
201 g_value_set_int (&arguments[0], arg);
203 g_closure_invoke (closure,
208 ret = g_value_get_int (&return_value);
210 g_value_unset(&return_value);
211 g_value_unset(&arguments[0]);
217 * regress_test_closure_variant:
218 * @closure: GClosure which takes one GVariant and returns a GVariant
219 * @arg: (transfer none): a GVariant passed as argument to @closure
221 * Return value: (transfer full): the return value of @closure
224 regress_test_closure_variant (GClosure *closure, const GVariant* arg)
226 GValue return_value = {0, };
227 GValue arguments[1] = {{0,} };
229 GVariant *local_arg = (GVariant*)g_memdup(arg, sizeof (GVariant*));
231 g_value_init (&return_value, G_TYPE_VARIANT);
233 g_value_init (&arguments[0], G_TYPE_VARIANT);
234 g_value_set_variant (&arguments[0], local_arg);
236 g_closure_invoke (closure,
241 ret = g_value_get_variant (&return_value);
244 g_value_unset (&return_value);
245 g_value_unset (&arguments[0]);
251 * regress_test_value_arg:
252 * @v: (transfer none): a GValue expected to contain an int
254 * Return value: the int contained in the GValue.
257 regress_test_int_value_arg(const GValue *v)
261 i = g_value_get_int (v);
268 * regress_test_value_return:
271 * Return value: (transfer none): the int wrapped in a GValue.
274 regress_test_value_return(int i)
276 memset(&value, '\0', sizeof(GValue));
278 g_value_init (&value, G_TYPE_INT);
279 g_value_set_int (&value, i);
284 /************************************************************************/
285 /* foreign structs */
288 * regress_test_cairo_context_full_return:
290 * Returns: (transfer full):
293 regress_test_cairo_context_full_return (void)
295 cairo_surface_t *surface;
296 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 10, 10);
297 return cairo_create (surface);
301 * regress_test_cairo_context_none_in:
302 * @context: (transfer none):
305 regress_test_cairo_context_none_in (cairo_t *context)
307 cairo_surface_t *surface = cairo_get_target (context);
309 g_assert (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32);
310 g_assert (cairo_image_surface_get_width (surface) == 10);
311 g_assert (cairo_image_surface_get_height (surface) == 10);
316 * regress_test_cairo_surface_none_return:
318 * Returns: (transfer none):
321 regress_test_cairo_surface_none_return (void)
323 static cairo_surface_t *surface;
325 if (surface == NULL) {
326 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 10, 10);
333 * regress_test_cairo_surface_full_return:
335 * Returns: (transfer full):
338 regress_test_cairo_surface_full_return (void)
340 return cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 10, 10);
344 * regress_test_cairo_surface_none_in:
345 * @surface: (transfer none):
348 regress_test_cairo_surface_none_in (cairo_surface_t *surface)
350 g_assert (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32);
351 g_assert (cairo_image_surface_get_width (surface) == 10);
352 g_assert (cairo_image_surface_get_height (surface) == 10);
356 * regress_test_cairo_surface_full_out:
357 * @surface: (out) (transfer full):
360 regress_test_cairo_surface_full_out (cairo_surface_t **surface)
362 *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 10, 10);
366 * regress_test_gvariant_i:
368 * Returns: (transfer none): New variant
371 regress_test_gvariant_i (void)
373 return g_variant_new_int32 (1);
377 * regress_test_gvariant_s:
379 * Returns: (transfer none): New variant
382 regress_test_gvariant_s (void)
384 return g_variant_new_string ("one");
388 * regress_test_gvariant_asv:
390 * Returns: (transfer none): New variant
393 regress_test_gvariant_asv (void)
397 g_variant_builder_init (&b, G_VARIANT_TYPE ("a{sv}"));
399 g_variant_builder_add (&b, "{sv}", "name", g_variant_new_string ("foo"));
400 g_variant_builder_add (&b, "{sv}", "timeout", g_variant_new_int32 (10));
402 return g_variant_builder_end (&b);
406 * regress_test_gvariant_v:
408 * Returns: (transfer none): New variant
411 regress_test_gvariant_v (void)
413 return g_variant_new_variant (g_variant_new_string ("contents"));
417 * regress_test_gvariant_as:
419 * Returns: (transfer none): New variant
422 regress_test_gvariant_as (void)
424 const char *as[] = { "one", "two", "three", NULL };
426 return g_variant_new_strv (as, -1);
429 /************************************************************************/
431 /* insert BLACK HEART SUIT to ensure UTF-8 doesn't get mangled */
432 static const char utf8_const[] = "const \xe2\x99\xa5 utf8";
433 static const char utf8_nonconst[] = "nonconst \xe2\x99\xa5 utf8";
436 * regress_test_utf8_const_return:
438 * Return value: UTF-8 string
441 regress_test_utf8_const_return (void)
443 /* transfer mode none */
448 * regress_test_utf8_nonconst_return:
450 * Return value: (transfer full): UTF-8 string
453 regress_test_utf8_nonconst_return (void)
455 return g_strdup (utf8_nonconst);
459 * regress_test_utf8_const_in:
463 regress_test_utf8_const_in (const char *in)
465 /* transfer mode none */
466 g_assert (strcmp (in, utf8_const) == 0);
470 * regress_test_utf8_out:
471 * @out: (out) (transfer full):
474 regress_test_utf8_out (char **out)
476 /* out parameter, transfer mode full */
477 *out = g_strdup (utf8_nonconst);
481 * regress_test_utf8_inout:
482 * @inout: (inout) (transfer full):
485 regress_test_utf8_inout (char **inout)
487 /* inout parameter, transfer mode full */
488 g_assert (strcmp (*inout, utf8_const) == 0);
489 *inout = g_strdup (utf8_nonconst);
493 * regress_test_filename_return:
495 * Return value: (element-type filename) (transfer full): list of strings
498 regress_test_filename_return (void)
500 GSList *filenames = NULL;
501 filenames = g_slist_prepend (filenames, g_filename_from_utf8("/etc/fstab", -1, NULL, NULL, NULL));
502 filenames = g_slist_prepend (filenames, g_filename_from_utf8("åäö", -1, NULL, NULL, NULL));
506 /* in arguments after out arguments */
509 * regress_test_int_out_utf8:
514 regress_test_int_out_utf8 (int *length, const char *in)
516 *length = g_utf8_strlen(in, -1);
520 /* multiple output arguments */
523 * regress_test_multi_double_args:
529 regress_test_multi_double_args (gdouble in, gdouble *one, gdouble *two)
536 * regress_test_utf8_out_out:
537 * @out0: (out) (transfer full): a copy of "first"
538 * @out1: (out) (transfer full): a copy of "second"
541 regress_test_utf8_out_out (char **out0, char **out1)
543 *out0 = g_strdup ("first");
544 *out1 = g_strdup ("second");
548 * regress_test_utf8_out_nonconst_return:
549 * @out: (out) (transfer full): a copy of "second"
551 * Returns: (transfer full): a copy of "first"
554 regress_test_utf8_out_nonconst_return (char **out)
556 *out = g_strdup ("second");
557 return g_strdup ("first");
561 * regress_test_utf8_null_in:
565 regress_test_utf8_null_in (char *in)
567 g_assert (in == NULL);
571 * regress_test_utf8_null_out:
572 * @char_out: (allow-none) (out):
574 void regress_test_utf8_null_out (char **char_out)
580 /* non-basic-types */
582 static const char *test_sequence[] = {"1", "2", "3"};
587 * regress_test_array_int_in:
589 * @ints: (array length=n_ints): List of ints
592 regress_test_array_int_in (int n_ints, int *ints)
595 for (i = 0; i < n_ints; i++)
601 * regress_test_array_int_out:
602 * @n_ints: (out): the length of @ints
603 * @ints: (out) (array length=n_ints) (transfer full): a list of 5 integers, from 0 to 4 in consecutive order
606 regress_test_array_int_out (int *n_ints, int **ints)
610 *ints = g_malloc0(sizeof(**ints) * *n_ints);
611 for (i = 1; i < *n_ints; i++)
612 (*ints)[i] = (*ints)[i-1] + 1;
616 * regress_test_array_int_inout:
617 * @n_ints: (inout): the length of @ints
618 * @ints: (inout) (array length=n_ints) (transfer full): a list of integers whose items will be increased by 1, except the first that will be dropped
621 regress_test_array_int_inout (int *n_ints, int **ints)
629 new_ints = g_malloc(sizeof(**ints) * *n_ints);
630 for (i = 0; i < *n_ints; i++)
631 new_ints[i] = (*ints)[i + 1] + 1;
637 * regress_test_array_gint8_in:
639 * @ints: (array length=n_ints): List of ints
642 regress_test_array_gint8_in (int n_ints, gint8 *ints)
645 for (i = 0; i < n_ints; i++)
651 * regress_test_array_gint16_in:
653 * @ints: (array length=n_ints): List of ints
656 regress_test_array_gint16_in (int n_ints, gint16 *ints)
659 for (i = 0; i < n_ints; i++)
665 * regress_test_array_gint32_in:
667 * @ints: (array length=n_ints): List of ints
670 regress_test_array_gint32_in (int n_ints, gint32 *ints)
674 for (i = 0; i < n_ints; i++)
680 * regress_test_array_gint64_in:
682 * @ints: (array length=n_ints): List of ints
685 regress_test_array_gint64_in (int n_ints, gint64 *ints)
689 for (i = 0; i < n_ints; i++)
695 * regress_test_strv_in:
696 * @arr: (array zero-terminated=1) (transfer none):
699 regress_test_strv_in (char **arr)
701 if (g_strv_length (arr) != 3)
703 if (strcmp (arr[0], "1") != 0)
705 if (strcmp (arr[1], "2") != 0)
707 if (strcmp (arr[2], "3") != 0)
713 * regress_test_array_gtype_in:
715 * @types: (array length=n_types): List of types
717 * Return value: (transfer full): string representation of provided types
720 regress_test_array_gtype_in (int n_types, GType *types)
725 string = g_string_new ("[");
726 for (i = 0; i < n_types; i++)
728 g_string_append (string, g_type_name (types[i]));
729 g_string_append_c (string, ',');
731 g_string_append_c (string, ']');
732 return g_string_free (string, FALSE);
736 * regress_test_strv_out:
738 * Returns: (transfer full):
741 regress_test_strv_out (void)
745 char **ret = g_new (char *, n);
746 ret[i++] = g_strdup ("thanks");
747 ret[i++] = g_strdup ("for");
748 ret[i++] = g_strdup ("all");
749 ret[i++] = g_strdup ("the");
750 ret[i++] = g_strdup ("fish");
757 * regress_test_strv_out_container:
759 * Return value: (array zero-terminated=1) (transfer container):
762 regress_test_strv_out_container (void)
764 char **ret = g_new (char *, 4);
773 * regress_test_strv_outarg:
774 * @retp: (array zero-terminated=1) (out) (transfer container):
777 regress_test_strv_outarg (char ***retp)
779 char **ret = g_new (char *, 4);
788 * regress_test_array_fixed_size_int_in:
789 * @ints: (array fixed-size=5): a list of 5 integers
791 * Returns: the sum of the items in @ints
794 regress_test_array_fixed_size_int_in (int *ints)
797 for (i = 0; i < 5; i++)
803 * regress_test_array_fixed_size_int_out:
804 * @ints: (out) (array fixed-size=5) (transfer full): a list of 5 integers ranging from 0 to 4
807 regress_test_array_fixed_size_int_out (int **ints)
810 *ints = g_malloc0(sizeof(**ints) * 5);
811 for (i = 1; i < 5; i++)
812 (*ints)[i] = (*ints)[i-1] + 1;
816 * regress_test_array_fixed_size_int_return:
818 * Returns: (array fixed-size=5) (transfer full): a list of 5 integers ranging from 0 to 4
821 regress_test_array_fixed_size_int_return (void)
824 ints = g_malloc0(sizeof(*ints) * 5);
825 for (i = 1; i < 5; i++)
826 ints[i] = ints[i-1] + 1;
831 * regress_test_strv_out_c:
833 * Returns: (transfer none):
836 regress_test_strv_out_c (void)
838 static char **ret = NULL;
841 ret = regress_test_strv_out ();
843 return (const char * const *) ret;
847 * regress_test_array_int_full_out:
848 * @len: length of the returned array.
850 * Returns: (array length=len) (transfer full): a new array of integers.
853 regress_test_array_int_full_out(int *len)
857 result = g_malloc0(sizeof(*result) * (*len));
858 for (i=1; i < (*len); i++)
859 result[i] = result[i-1] + 1;
864 * regress_test_array_int_none_out:
865 * @len: length of the returned array.
867 * Returns: (array length=len) (transfer none): a static array of integers.
870 regress_test_array_int_none_out(int *len)
872 static int result[5] = { 1, 2, 3, 4, 5 };
878 * regress_test_array_int_null_in:
879 * @arr: (array length=len) (allow-none):
883 regress_test_array_int_null_in (int *arr, int len)
885 g_assert (arr == NULL);
889 * regress_test_array_int_null_out:
890 * @arr: (out) (array length=len) (allow-none):
891 * @len: (out) : length
894 regress_test_array_int_null_out (int **arr, int *len)
902 /************************************************************************/
905 static /*const*/ GList *
906 regress_test_sequence_list()
908 static GList *list = NULL;
911 for (i = 0; i < G_N_ELEMENTS(test_sequence); ++i) {
912 list = g_list_prepend (list, (gpointer)test_sequence[i]);
914 list = g_list_reverse (list);
920 * regress_test_glist_nothing_return:
922 * Return value: (element-type utf8) (transfer none):
925 regress_test_glist_nothing_return (void)
927 return regress_test_sequence_list ();
931 * regress_test_glist_nothing_return2:
933 * Return value: (element-type utf8) (transfer none):
936 regress_test_glist_nothing_return2 (void)
938 return regress_test_sequence_list ();
942 * regress_test_glist_container_return:
944 * Return value: (element-type utf8) (transfer container):
947 regress_test_glist_container_return (void)
949 return g_list_copy (regress_test_sequence_list ());
953 * regress_test_glist_everything_return:
955 * Return value: (element-type utf8) (transfer full):
958 regress_test_glist_everything_return (void)
963 list = g_list_copy (regress_test_sequence_list ());
964 for (l = list; l != NULL; l = l->next)
965 l->data = g_strdup (l->data);
970 regress_assert_test_sequence_list (const GList *in)
975 for (i = 0, l = in; l != NULL; ++i, l = l->next) {
976 g_assert (i < G_N_ELEMENTS(test_sequence));
977 g_assert (strcmp (l->data, test_sequence[i]) == 0);
979 g_assert (i == G_N_ELEMENTS(test_sequence));
983 * regress_test_glist_nothing_in:
984 * @in: (element-type utf8):
987 regress_test_glist_nothing_in (const GList *in)
989 regress_assert_test_sequence_list (in);
993 * regress_test_glist_nothing_in2:
994 * @in: (element-type utf8):
997 regress_test_glist_nothing_in2 (GList *in)
999 regress_assert_test_sequence_list (in);
1003 * regress_test_glist_null_in:
1004 * @in: (element-type utf8) (allow-none):
1007 regress_test_glist_null_in (GSList *in)
1009 g_assert (in == NULL);
1013 * regress_test_glist_null_out:
1014 * @out_list: (out) (element-type utf8) (allow-none):
1017 regress_test_glist_null_out (GSList **out_list)
1023 /************************************************************************/
1026 static /*const*/ GSList *
1027 regress_test_sequence_slist()
1029 static GSList *list = NULL;
1032 for (i = 0; i < G_N_ELEMENTS(test_sequence); ++i) {
1033 list = g_slist_prepend (list, (gpointer)test_sequence[i]);
1035 list = g_slist_reverse (list);
1041 * regress_test_gslist_nothing_return:
1043 * Return value: (element-type utf8) (transfer none):
1046 regress_test_gslist_nothing_return (void)
1048 return regress_test_sequence_slist ();
1052 * regress_test_gslist_nothing_return2:
1054 * Return value: (element-type utf8) (transfer none):
1057 regress_test_gslist_nothing_return2 (void)
1059 return regress_test_sequence_slist ();
1063 * regress_test_gslist_container_return:
1065 * Return value: (element-type utf8) (transfer container):
1068 regress_test_gslist_container_return (void)
1070 return g_slist_copy (regress_test_sequence_slist ());
1074 * regress_test_gslist_everything_return:
1076 * Return value: (element-type utf8) (transfer full):
1079 regress_test_gslist_everything_return (void)
1084 list = g_slist_copy (regress_test_sequence_slist ());
1085 for (l = list; l != NULL; l = l->next)
1086 l->data = g_strdup (l->data);
1091 regress_assert_test_sequence_slist (const GSList *in)
1096 for (i = 0, l = in; l != NULL; ++i, l = l->next) {
1097 g_assert (i < G_N_ELEMENTS(test_sequence));
1098 g_assert (strcmp (l->data, test_sequence[i]) == 0);
1100 g_assert (i == G_N_ELEMENTS(test_sequence));
1104 * regress_test_gslist_nothing_in:
1105 * @in: (element-type utf8):
1108 regress_test_gslist_nothing_in (const GSList *in)
1110 regress_assert_test_sequence_slist (in);
1114 * regress_test_gslist_nothing_in2:
1115 * @in: (element-type utf8):
1118 regress_test_gslist_nothing_in2 (GSList *in)
1120 regress_assert_test_sequence_slist (in);
1124 * regress_test_gslist_null_in:
1125 * @in: (element-type utf8) (allow-none):
1128 regress_test_gslist_null_in (GSList *in)
1130 g_assert (in == NULL);
1134 * regress_test_gslist_null_out:
1135 * @out_list: (out) (element-type utf8) (allow-none):
1138 regress_test_gslist_null_out (GSList **out_list)
1143 /************************************************************************/
1146 static char *table_data[3][2] = {
1147 { "foo", "bar" }, { "baz", "bat" }, { "qux", "quux" }
1151 regress_test_table_ghash_new_container()
1155 hash = g_hash_table_new(g_str_hash, g_str_equal);
1157 g_hash_table_insert(hash, table_data[i][0], table_data[i][1]);
1162 regress_test_table_ghash_new_full()
1166 hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
1168 g_hash_table_insert(hash,
1169 g_strdup(table_data[i][0]),
1170 g_strdup(table_data[i][1]));
1174 static /*const*/ GHashTable *
1175 regress_test_table_ghash_const()
1177 static GHashTable *hash = NULL;
1179 hash = regress_test_table_ghash_new_container();
1185 * regress_test_ghash_null_return:
1187 * Return value: (element-type utf8 utf8) (transfer none) (allow-none):
1190 regress_test_ghash_null_return (void)
1196 * regress_test_ghash_nothing_return:
1198 * Return value: (element-type utf8 utf8) (transfer none):
1201 regress_test_ghash_nothing_return (void)
1203 return regress_test_table_ghash_const ();
1207 * regress_test_ghash_nothing_return2:
1209 * Return value: (element-type utf8 utf8) (transfer none):
1212 regress_test_ghash_nothing_return2 (void)
1214 return regress_test_table_ghash_const ();
1218 g_value_new (GType type)
1220 GValue *value = g_slice_new0(GValue);
1221 g_value_init(value, type);
1226 g_value_free (GValue *value)
1228 g_value_unset(value);
1229 g_slice_free(GValue, value);
1232 static const gchar *string_array[] = {
1240 * regress_test_ghash_gvalue_return:
1242 * Return value: (element-type utf8 GValue) (transfer none):
1245 regress_test_ghash_gvalue_return (void)
1249 hash = g_hash_table_new_full(g_str_hash, g_str_equal,
1250 g_free, (GDestroyNotify)g_value_free);
1252 value = g_value_new(G_TYPE_INT);
1253 g_value_set_int(value, 12);
1254 g_hash_table_insert(hash, g_strdup("integer"), value);
1256 value = g_value_new(G_TYPE_BOOLEAN);
1257 g_value_set_boolean(value, TRUE);
1258 g_hash_table_insert(hash, g_strdup("boolean"), value);
1260 value = g_value_new(G_TYPE_STRING);
1261 g_value_set_string(value, "some text");
1262 g_hash_table_insert(hash, g_strdup("string"), value);
1264 value = g_value_new(G_TYPE_STRV);
1265 g_value_set_boxed(value, string_array);
1266 g_hash_table_insert(hash, g_strdup("strings"), value);
1268 value = g_value_new(REGRESS_TEST_TYPE_FLAGS);
1269 g_value_set_flags(value, REGRESS_TEST_FLAG1 | REGRESS_TEST_FLAG3);
1270 g_hash_table_insert(hash, g_strdup("flags"), value);
1272 value = g_value_new(regress_test_enum_get_type());
1273 g_value_set_enum(value, REGRESS_TEST_VALUE2);
1274 g_hash_table_insert(hash, g_strdup("enum"), value);
1280 * regress_test_ghash_gvalue_in:
1281 * @hash: (element-type utf8 GValue): the hash table returned by
1282 * regress_test_ghash_gvalue_return().
1285 regress_test_ghash_gvalue_in (GHashTable *hash)
1288 const gchar **strings;
1291 g_assert(hash != NULL);
1293 value = g_hash_table_lookup(hash, "integer");
1294 g_assert(value != NULL);
1295 g_assert(G_VALUE_HOLDS_INT(value));
1296 g_assert(g_value_get_int(value) == 12);
1298 value = g_hash_table_lookup(hash, "boolean");
1299 g_assert(value != NULL);
1300 g_assert(G_VALUE_HOLDS_BOOLEAN(value));
1301 g_assert(g_value_get_boolean(value) == TRUE);
1303 value = g_hash_table_lookup(hash, "string");
1304 g_assert(value != NULL);
1305 g_assert(G_VALUE_HOLDS_STRING(value));
1306 g_assert(strcmp(g_value_get_string(value), "some text") == 0);
1308 value = g_hash_table_lookup(hash, "strings");
1309 g_assert(value != NULL);
1310 g_assert(G_VALUE_HOLDS(value, G_TYPE_STRV));
1311 strings = g_value_get_boxed(value);
1312 g_assert(strings != NULL);
1313 for (i = 0; string_array[i] != NULL; i++)
1314 g_assert(strcmp(strings[i], string_array[i]) == 0);
1316 value = g_hash_table_lookup(hash, "flags");
1317 g_assert(value != NULL);
1318 g_assert(G_VALUE_HOLDS_FLAGS(value));
1319 g_assert(g_value_get_flags(value) == REGRESS_TEST_FLAG1 | REGRESS_TEST_FLAG3);
1321 value = g_hash_table_lookup(hash, "enum");
1322 g_assert(value != NULL);
1323 g_assert(G_VALUE_HOLDS_ENUM(value));
1324 g_assert(g_value_get_enum(value) == REGRESS_TEST_VALUE2);
1328 * regress_test_ghash_container_return:
1330 * Return value: (element-type utf8 utf8) (transfer container):
1333 regress_test_ghash_container_return (void)
1335 return regress_test_table_ghash_new_container ();
1339 * regress_test_ghash_everything_return:
1341 * Return value: (element-type utf8 utf8) (transfer full):
1344 regress_test_ghash_everything_return (void)
1346 return regress_test_table_ghash_new_full ();
1350 assert_test_table_ghash (const GHashTable *in)
1352 GHashTable *h = regress_test_table_ghash_const();
1353 GHashTableIter iter;
1354 gpointer key, value;
1356 g_assert(g_hash_table_size(h) ==
1357 g_hash_table_size((GHashTable*)in));
1359 g_hash_table_iter_init(&iter, (GHashTable*)in);
1360 while (g_hash_table_iter_next (&iter, &key, &value))
1361 g_assert( strcmp(g_hash_table_lookup(h, (char*)key), (char*)value) == 0);
1365 * regress_test_ghash_null_in:
1366 * @in: (element-type utf8 utf8) (allow-none):
1369 regress_test_ghash_null_in (const GHashTable *in)
1371 g_assert (in == NULL);
1375 * regress_test_ghash_null_out:
1376 * @out: (element-type utf8 utf8) (allow-none) (out):
1379 regress_test_ghash_null_out (const GHashTable **out)
1385 * regress_test_ghash_nothing_in:
1386 * @in: (element-type utf8 utf8):
1389 regress_test_ghash_nothing_in (const GHashTable *in)
1391 assert_test_table_ghash (in);
1395 * regress_test_ghash_nothing_in2:
1396 * @in: (element-type utf8 utf8):
1399 regress_test_ghash_nothing_in2 (GHashTable *in)
1401 assert_test_table_ghash (in);
1404 /* Nested collection types */
1407 * regress_test_ghash_nested_everything_return:
1409 * Specify nested parameterized types directly with the (type ) annotation.
1411 * Return value: (type GLib.HashTable<utf8,GLib.HashTable<utf8,utf8>>) (transfer full):
1414 regress_test_ghash_nested_everything_return (void)
1417 hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
1418 (void (*) (gpointer)) g_hash_table_destroy);
1419 g_hash_table_insert(hash, g_strdup("wibble"), regress_test_table_ghash_new_full());
1424 * regress_test_ghash_nested_everything_return2:
1426 * Another way of specifying nested parameterized types: using the
1427 * element-type annotation.
1429 * Return value: (element-type utf8 GLib.HashTable<utf8,utf8>) (transfer full):
1432 regress_test_ghash_nested_everything_return2 (void)
1434 return regress_test_ghash_nested_everything_return();
1437 /************************************************************************/
1440 * regress_test_garray_container_return:
1442 * Returns: (transfer container) (type GLib.PtrArray) (element-type utf8):
1445 regress_test_garray_container_return (void)
1449 array = g_ptr_array_new_with_free_func (g_free);
1450 g_ptr_array_add (array, g_strdup ("regress"));
1456 * regress_test_garray_full_return:
1458 * Returns: (transfer full) (type GLib.PtrArray) (element-type utf8):
1461 regress_test_garray_full_return (void)
1465 array = g_ptr_array_new ();
1466 g_ptr_array_add (array, g_strdup ("regress"));
1471 /************************************************************************/
1478 * NUM_REGRESS_FOO: (skip)
1480 * num of elements in RegressFoo
1484 regress_test_enum_get_type (void)
1486 static GType etype = 0;
1487 if (G_UNLIKELY(etype == 0)) {
1488 static const GEnumValue values[] = {
1489 { REGRESS_TEST_VALUE1, "REGRESS_TEST_VALUE1", "value1" },
1490 { REGRESS_TEST_VALUE2, "REGRESS_TEST_VALUE2", "value2" },
1491 { REGRESS_TEST_VALUE3, "REGRESS_TEST_VALUE3", "value3" },
1492 { REGRESS_TEST_VALUE4, "REGRESS_TEST_VALUE4", "value4" },
1495 etype = g_enum_register_static (g_intern_static_string ("RegressTestEnum"), values);
1502 regress_test_enum_unsigned_get_type (void)
1504 static GType etype = 0;
1505 if (G_UNLIKELY(etype == 0)) {
1506 static const GEnumValue values[] = {
1507 { REGRESS_TEST_UNSIGNED_VALUE1, "REGRESS_TEST_UNSIGNED_VALUE1", "value1" },
1508 { REGRESS_TEST_UNSIGNED_VALUE2, "REGRESS_TEST_UNSIGNED_VALUE2", "value2" },
1511 etype = g_enum_register_static (g_intern_static_string ("RegressTestEnumUnsigned"), values);
1518 regress_test_flags_get_type (void)
1520 static GType etype = 0;
1521 if (G_UNLIKELY(etype == 0)) {
1522 static const GFlagsValue values[] = {
1523 { REGRESS_TEST_FLAG1, "TEST_FLAG1", "flag1" },
1524 { REGRESS_TEST_FLAG2, "TEST_FLAG2", "flag2" },
1525 { REGRESS_TEST_FLAG3, "TEST_FLAG3", "flag3" },
1528 etype = g_flags_register_static (g_intern_static_string ("RegressTestFlags"), values);
1535 regress_test_enum_param(RegressTestEnum e)
1540 ec = g_type_class_ref (regress_test_enum_get_type ());
1541 ev = g_enum_get_value (ec, e);
1542 g_type_class_unref (ec);
1544 return ev->value_nick;
1548 regress_test_unsigned_enum_param(RegressTestEnumUnsigned e)
1553 ec = g_type_class_ref (regress_test_enum_unsigned_get_type ());
1554 ev = g_enum_get_value (ec, e);
1555 g_type_class_unref (ec);
1557 return ev->value_nick;
1561 * regress_global_get_flags_out:
1562 * @v: (out): A flags value
1566 regress_global_get_flags_out (RegressTestFlags *v)
1568 *v = REGRESS_TEST_FLAG1 | REGRESS_TEST_FLAG3;
1574 * regress_test_struct_a_clone:
1576 * @a_out: (out caller-allocates): the cloned structure
1578 * Make a copy of a RegressTestStructA
1581 regress_test_struct_a_clone (RegressTestStructA *a,
1582 RegressTestStructA *a_out)
1588 * regress_test_struct_b_clone:
1590 * @b_out: (out): the cloned structure
1592 * Make a copy of a RegressTestStructB
1595 regress_test_struct_b_clone (RegressTestStructB *b,
1596 RegressTestStructB *b_out)
1601 /* plain-old-data boxed types */
1603 RegressTestSimpleBoxedA *
1604 regress_test_simple_boxed_a_copy (RegressTestSimpleBoxedA *a)
1606 RegressTestSimpleBoxedA *new_a = g_slice_new (RegressTestSimpleBoxedA);
1614 regress_test_simple_boxed_a_free (RegressTestSimpleBoxedA *a)
1616 g_slice_free (RegressTestSimpleBoxedA, a);
1620 regress_test_simple_boxed_a_get_gtype (void)
1622 static GType our_type = 0;
1625 our_type = g_boxed_type_register_static (g_intern_static_string ("RegressTestSimpleBoxedA"),
1626 (GBoxedCopyFunc)regress_test_simple_boxed_a_copy,
1627 (GBoxedFreeFunc)regress_test_simple_boxed_a_free);
1631 RegressTestSimpleBoxedB *
1632 regress_test_simple_boxed_b_copy (RegressTestSimpleBoxedB *b)
1634 RegressTestSimpleBoxedB *new_b = g_slice_new (RegressTestSimpleBoxedB);
1642 regress_test_simple_boxed_a_equals (RegressTestSimpleBoxedA *a,
1643 RegressTestSimpleBoxedA *other_a)
1645 return (a->some_int == other_a->some_int &&
1646 a->some_int8 == other_a->some_int8 &&
1647 a->some_double == other_a->some_double);
1650 const RegressTestSimpleBoxedA*
1651 regress_test_simple_boxed_a_const_return (void)
1653 static RegressTestSimpleBoxedA simple_a = {
1661 regress_test_simple_boxed_b_free (RegressTestSimpleBoxedB *a)
1663 g_slice_free (RegressTestSimpleBoxedB, a);
1667 regress_test_simple_boxed_b_get_type (void)
1669 static GType our_type = 0;
1672 our_type = g_boxed_type_register_static (g_intern_static_string ("RegressTestSimpleBoxedB"),
1673 (GBoxedCopyFunc)regress_test_simple_boxed_b_copy,
1674 (GBoxedFreeFunc)regress_test_simple_boxed_b_free);
1680 struct _RegressTestBoxedPrivate
1686 * regress_test_boxed_new:
1688 * Returns: (transfer full):
1691 regress_test_boxed_new (void)
1693 RegressTestBoxed *boxed = g_slice_new0(RegressTestBoxed);
1694 boxed->priv = g_slice_new0(RegressTestBoxedPrivate);
1695 boxed->priv->magic = 0xdeadbeef;
1701 * regress_test_boxed_new_alternative_constructor1:
1703 * Returns: (transfer full):
1706 regress_test_boxed_new_alternative_constructor1 (int i)
1708 RegressTestBoxed *boxed = g_slice_new0(RegressTestBoxed);
1709 boxed->priv = g_slice_new0(RegressTestBoxedPrivate);
1710 boxed->priv->magic = 0xdeadbeef;
1711 boxed->some_int8 = i;
1717 * regress_test_boxed_new_alternative_constructor2:
1719 * Returns: (transfer full):
1722 regress_test_boxed_new_alternative_constructor2 (int i, int j)
1724 RegressTestBoxed *boxed = g_slice_new0(RegressTestBoxed);
1725 boxed->priv = g_slice_new0(RegressTestBoxedPrivate);
1726 boxed->priv->magic = 0xdeadbeef;
1727 boxed->some_int8 = i + j;
1733 * regress_test_boxed_new_alternative_constructor3:
1735 * Returns: (transfer full):
1738 regress_test_boxed_new_alternative_constructor3 (char *s)
1740 RegressTestBoxed *boxed = g_slice_new0(RegressTestBoxed);
1741 boxed->priv = g_slice_new0(RegressTestBoxedPrivate);
1742 boxed->priv->magic = 0xdeadbeef;
1743 boxed->some_int8 = atoi(s);
1749 * regress_test_boxed_copy:
1751 * Returns: (transfer full):
1754 regress_test_boxed_copy (RegressTestBoxed *boxed)
1756 RegressTestBoxed *new_boxed = regress_test_boxed_new();
1757 RegressTestBoxedPrivate *save;
1759 save = new_boxed->priv;
1760 *new_boxed = *boxed;
1761 new_boxed->priv = save;
1767 regress_test_boxed_equals (RegressTestBoxed *boxed,
1768 RegressTestBoxed *other)
1770 return (other->some_int8 == boxed->some_int8 &&
1771 regress_test_simple_boxed_a_equals(&other->nested_a, &boxed->nested_a));
1775 regress_test_boxed_free (RegressTestBoxed *boxed)
1777 g_assert (boxed->priv->magic == 0xdeadbeef);
1779 g_slice_free (RegressTestBoxedPrivate, boxed->priv);
1780 g_slice_free (RegressTestBoxed, boxed);
1784 regress_test_boxed_get_type (void)
1786 static GType our_type = 0;
1789 our_type = g_boxed_type_register_static (g_intern_static_string ("RegressTestBoxed"),
1790 (GBoxedCopyFunc)regress_test_boxed_copy,
1791 (GBoxedFreeFunc)regress_test_boxed_free);
1796 regress_test_boxed_b_new (gint8 some_int8, glong some_long)
1798 RegressTestBoxedB *boxed;
1800 boxed = g_slice_new (RegressTestBoxedB);
1801 boxed->some_int8 = some_int8;
1802 boxed->some_long = some_long;
1808 regress_test_boxed_b_copy (RegressTestBoxedB *boxed)
1810 return regress_test_boxed_b_new (boxed->some_int8, boxed->some_long);
1814 regress_test_boxed_b_free (RegressTestBoxedB *boxed)
1816 g_slice_free (RegressTestBoxedB, boxed);
1819 G_DEFINE_BOXED_TYPE(RegressTestBoxedB,
1820 regress_test_boxed_b,
1821 regress_test_boxed_b_copy,
1822 regress_test_boxed_b_free);
1824 G_DEFINE_TYPE(RegressTestObj, regress_test_obj, G_TYPE_OBJECT);
1828 PROP_TEST_OBJ_BARE = 1,
1829 PROP_TEST_OBJ_BOXED,
1830 PROP_TEST_OBJ_HASH_TABLE,
1832 PROP_TEST_OBJ_HASH_TABLE_OLD,
1833 PROP_TEST_OBJ_LIST_OLD,
1835 PROP_TEST_OBJ_FLOAT,
1836 PROP_TEST_OBJ_DOUBLE,
1837 PROP_TEST_OBJ_STRING,
1842 regress_test_obj_set_property (GObject *object,
1844 const GValue *value,
1847 RegressTestObj *self = REGRESS_TEST_OBJECT (object);
1850 switch (property_id)
1852 case PROP_TEST_OBJ_BARE:
1853 regress_test_obj_set_bare (self, g_value_get_object (value));
1856 case PROP_TEST_OBJ_BOXED:
1858 regress_test_boxed_free (self->boxed);
1859 self->boxed = g_value_dup_boxed (value);
1862 case PROP_TEST_OBJ_HASH_TABLE:
1863 case PROP_TEST_OBJ_HASH_TABLE_OLD:
1864 if (self->hash_table)
1865 g_hash_table_unref (self->hash_table);
1866 self->hash_table = g_hash_table_ref (g_value_get_boxed (value));
1869 case PROP_TEST_OBJ_LIST:
1870 case PROP_TEST_OBJ_LIST_OLD:
1871 if (self->list != NULL)
1873 for (list = self->list; list != NULL; list = g_list_next (list))
1874 g_free (list->data);
1875 g_list_free (self->list);
1878 for (list = g_value_get_pointer (value); list != NULL; list = g_list_next (list))
1879 self->list = g_list_append (self->list, g_strdup (list->data));
1882 case PROP_TEST_OBJ_INT:
1883 self->some_int8 = g_value_get_int (value);
1886 case PROP_TEST_OBJ_FLOAT:
1887 self->some_float = g_value_get_float (value);
1890 case PROP_TEST_OBJ_DOUBLE:
1891 self->some_double = g_value_get_double (value);
1894 case PROP_TEST_OBJ_STRING:
1895 self->string = g_value_dup_string (value);
1898 case PROP_TEST_OBJ_GTYPE:
1899 self->gtype = g_value_get_gtype (value);
1903 /* We don't have any other property... */
1904 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1910 regress_test_obj_get_property (GObject *object,
1915 RegressTestObj *self = REGRESS_TEST_OBJECT (object);
1917 switch (property_id)
1919 case PROP_TEST_OBJ_BARE:
1920 g_value_set_object (value, self->bare);
1923 case PROP_TEST_OBJ_BOXED:
1924 g_value_set_boxed (value, self->boxed);
1927 case PROP_TEST_OBJ_HASH_TABLE:
1928 case PROP_TEST_OBJ_HASH_TABLE_OLD:
1929 if (self->hash_table != NULL)
1930 g_hash_table_ref (self->hash_table);
1931 g_value_set_boxed (value, self->hash_table);
1934 case PROP_TEST_OBJ_LIST:
1935 case PROP_TEST_OBJ_LIST_OLD:
1936 g_value_set_pointer (value, self->list);
1939 case PROP_TEST_OBJ_INT:
1940 g_value_set_int (value, self->some_int8);
1943 case PROP_TEST_OBJ_FLOAT:
1944 g_value_set_float (value, self->some_float);
1947 case PROP_TEST_OBJ_DOUBLE:
1948 g_value_set_double (value, self->some_double);
1951 case PROP_TEST_OBJ_STRING:
1952 g_value_set_string (value, self->string);
1955 case PROP_TEST_OBJ_GTYPE:
1956 g_value_set_gtype (value, self->gtype);
1960 /* We don't have any other property... */
1961 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1967 regress_test_obj_dispose (GObject *gobject)
1969 RegressTestObj *self = REGRESS_TEST_OBJECT (gobject);
1973 g_object_unref (self->bare);
1980 regress_test_boxed_free (self->boxed);
1984 /* Chain up to the parent class */
1985 G_OBJECT_CLASS (regress_test_obj_parent_class)->dispose (gobject);
1989 regress_test_obj_default_matrix (RegressTestObj *obj, const char *somestr)
1995 REGRESS_TEST_OBJ_SIGNAL_SIG_NEW_WITH_ARRAY_PROP,
1996 REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_HASH_PROP,
1997 REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_STRV,
1998 REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_OBJ,
1999 REGRESS_TEST_OBJ_SIGNAL_FIRST,
2000 REGRESS_TEST_OBJ_SIGNAL_CLEANUP,
2001 REGRESS_TEST_OBJ_SIGNAL_ALL,
2002 N_REGRESS_TEST_OBJ_SIGNALS
2005 static guint regress_test_obj_signals[N_REGRESS_TEST_OBJ_SIGNALS] = { 0 };
2008 regress_test_obj_class_init (RegressTestObjClass *klass)
2010 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
2012 GType param_types[1];
2014 klass->test_signal =
2015 g_signal_newv ("test",
2016 G_TYPE_FROM_CLASS (gobject_class),
2017 G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
2019 NULL /* accumulator */,
2020 NULL /* accumulator data */,
2021 g_cclosure_marshal_VOID__VOID,
2022 G_TYPE_NONE /* return_type */,
2024 NULL /* param_types */);
2026 param_types[0] = regress_test_simple_boxed_a_get_gtype() | G_SIGNAL_TYPE_STATIC_SCOPE;
2027 klass->test_signal_with_static_scope_arg =
2028 g_signal_newv ("test-with-static-scope-arg",
2029 G_TYPE_FROM_CLASS (gobject_class),
2030 G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
2032 NULL /* accumulator */,
2033 NULL /* accumulator data */,
2034 g_cclosure_marshal_VOID__BOXED,
2035 G_TYPE_NONE /* return_type */,
2040 * RegressTestObj::sig-with-array-prop:
2042 * @arr: (type GArray) (element-type uint): numbers
2044 * This test signal is like TelepathyGlib's
2045 * TpChannel:: group-members-changed-detailed:
2047 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_SIG_NEW_WITH_ARRAY_PROP] =
2048 g_signal_new ("sig-with-array-prop",
2049 G_TYPE_FROM_CLASS (gobject_class),
2054 g_cclosure_marshal_VOID__BOXED,
2060 * RegressTestObj::sig-with-hash-prop:
2062 * @hash: (element-type utf8 GObject.Value):
2064 * This test signal is like TelepathyGlib's
2065 * TpAccount::status-changed
2067 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_HASH_PROP] =
2068 g_signal_new ("sig-with-hash-prop",
2069 G_TYPE_FROM_CLASS (gobject_class),
2074 g_cclosure_marshal_VOID__BOXED,
2080 * RegressTestObj::sig-with-strv:
2084 * Test GStrv as a param.
2086 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_STRV] =
2087 g_signal_new ("sig-with-strv",
2088 G_TYPE_FROM_CLASS (gobject_class),
2093 g_cclosure_marshal_VOID__BOXED,
2099 * RegressTestObj::sig-with-obj:
2101 * @obj: (transfer none): A newly created RegressTestObj
2103 * Test transfer none GObject as a param (tests refcounting).
2104 * Use with regress_test_obj_emit_sig_with_obj
2106 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_SIG_WITH_OBJ] =
2107 g_signal_new ("sig-with-obj",
2108 G_TYPE_FROM_CLASS (gobject_class),
2113 g_cclosure_marshal_VOID__OBJECT,
2118 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_FIRST] =
2119 g_signal_new ("first",
2120 G_TYPE_FROM_CLASS (gobject_class),
2125 g_cclosure_marshal_VOID__VOID,
2129 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_CLEANUP] =
2130 g_signal_new ("cleanup",
2131 G_TYPE_FROM_CLASS (gobject_class),
2132 G_SIGNAL_RUN_CLEANUP,
2136 g_cclosure_marshal_VOID__VOID,
2140 regress_test_obj_signals[REGRESS_TEST_OBJ_SIGNAL_ALL] =
2141 g_signal_new ("all",
2142 G_TYPE_FROM_CLASS (gobject_class),
2143 G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED | G_SIGNAL_ACTION | G_SIGNAL_NO_HOOKS,
2147 g_cclosure_marshal_VOID__VOID,
2151 gobject_class->set_property = regress_test_obj_set_property;
2152 gobject_class->get_property = regress_test_obj_get_property;
2153 gobject_class->dispose = regress_test_obj_dispose;
2155 pspec = g_param_spec_object ("bare",
2157 "A contained object",
2160 g_object_class_install_property (gobject_class,
2164 pspec = g_param_spec_boxed ("boxed",
2166 "A contained boxed struct",
2167 REGRESS_TEST_TYPE_BOXED,
2169 g_object_class_install_property (gobject_class,
2170 PROP_TEST_OBJ_BOXED,
2174 * RegressTestObj:hash-table:
2176 * Type: GLib.HashTable(utf8,gint8)
2177 * Transfer: container
2179 pspec = g_param_spec_boxed ("hash-table",
2180 "GHashTable property",
2181 "A contained GHashTable",
2184 g_object_class_install_property (gobject_class,
2185 PROP_TEST_OBJ_HASH_TABLE,
2189 * RegressTestObj:list:
2191 * Type: GLib.List(utf8)
2194 pspec = g_param_spec_pointer ("list",
2196 "A contained GList",
2198 g_object_class_install_property (gobject_class,
2203 * RegressTestObj:hash-table-old:
2205 * Type: GLib.HashTable<utf8,gint8>
2206 * Transfer: container
2208 pspec = g_param_spec_boxed ("hash-table-old",
2209 "GHashTable property with <>",
2210 "A contained GHashTable with <>",
2213 g_object_class_install_property (gobject_class,
2214 PROP_TEST_OBJ_HASH_TABLE_OLD,
2218 * RegressTestObj:list-old:
2220 * Type: GLib.List<utf8>
2223 pspec = g_param_spec_pointer ("list-old",
2224 "GList property with ()",
2225 "A contained GList with <>",
2227 g_object_class_install_property (gobject_class,
2228 PROP_TEST_OBJ_LIST_OLD,
2236 pspec = g_param_spec_int ("int",
2243 g_object_class_install_property (gobject_class,
2250 pspec = g_param_spec_float ("float",
2252 "A contained float",
2257 g_object_class_install_property (gobject_class,
2258 PROP_TEST_OBJ_FLOAT,
2264 pspec = g_param_spec_double ("double",
2266 "A contained double",
2271 g_object_class_install_property (gobject_class,
2272 PROP_TEST_OBJ_DOUBLE,
2278 pspec = g_param_spec_string ("string",
2280 "A contained string",
2283 g_object_class_install_property (gobject_class,
2284 PROP_TEST_OBJ_STRING,
2291 pspec = g_param_spec_gtype ("gtype",
2296 g_object_class_install_property (gobject_class,
2297 PROP_TEST_OBJ_GTYPE,
2300 klass->matrix = regress_test_obj_default_matrix;
2304 regress_test_obj_init (RegressTestObj *obj)
2308 obj->hash_table = NULL;
2309 obj->gtype = G_TYPE_INVALID;
2313 * regress_test_obj_new: (constructor)
2314 * @obj: A #RegressTestObj
2317 regress_test_obj_new (RegressTestObj *obj)
2319 return g_object_new (REGRESS_TEST_TYPE_OBJ, NULL);
2323 * regress_constructor: (constructor)
2327 regress_constructor (void)
2329 return g_object_new (REGRESS_TEST_TYPE_OBJ, NULL);
2333 * regress_test_obj_new_from_file:
2336 regress_test_obj_new_from_file (const char *x, GError **error)
2338 return g_object_new (REGRESS_TEST_TYPE_OBJ, NULL);
2342 * regress_test_obj_set_bare:
2343 * @bare: (allow-none):
2346 regress_test_obj_set_bare (RegressTestObj *obj, GObject *bare)
2349 g_object_unref (obj->bare);
2352 g_object_ref (obj->bare);
2356 regress_test_obj_emit_sig_with_obj (RegressTestObj *obj)
2358 RegressTestObj *obj_param = regress_constructor ();
2359 g_object_set (obj_param, "int", 3, NULL);
2360 g_signal_emit_by_name (obj, "sig-with-obj", obj_param);
2361 g_object_unref (obj_param);
2365 regress_test_obj_instance_method (RegressTestObj *obj)
2371 regress_test_obj_static_method (int x)
2377 * regress_forced_method: (method)
2378 * @obj: A #RegressTestObj
2382 regress_forced_method (RegressTestObj *obj)
2387 * regress_test_obj_torture_signature_0:
2388 * @obj: A #RegressTestObj
2398 regress_test_obj_torture_signature_0 (RegressTestObj *obj,
2408 *q = g_utf8_strlen (foo, -1) + m;
2412 * regress_test_obj_torture_signature_1:
2413 * @obj: A #RegressTestObj
2422 * This function throws an error if m is odd.
2425 regress_test_obj_torture_signature_1 (RegressTestObj *obj,
2436 *q = g_utf8_strlen (foo, -1) + m;
2439 g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "m is odd");
2444 * regress_test_obj_skip_return_val:
2445 * @obj: a #RegressTestObj
2447 * @out_b: (out): A return value.
2448 * @c: Other parameter.
2449 * @inout_d: (inout): Will be incremented.
2450 * @out_sum: (out): Return value.
2453 * @error: Return location for error.
2455 * Check that the return value is skipped
2457 * Returns: (skip): %TRUE if the call succeeds, %FALSE if @error is set.
2460 regress_test_obj_skip_return_val (RegressTestObj *obj,
2472 if (inout_d != NULL)
2473 *inout_d = *inout_d + 1;
2474 if (out_sum != NULL)
2475 *out_sum = num1 + 10*num2;
2480 * regress_test_obj_skip_return_val_no_out:
2481 * @obj: a #RegressTestObj
2483 * @error: Return location for error.
2485 * Check that the return value is skipped. Succeed if a is nonzero, otherwise
2488 * Returns: (skip): %TRUE if the call succeeds, %FALSE if @error is set.
2491 regress_test_obj_skip_return_val_no_out (RegressTestObj *obj,
2496 g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "a is zero");
2504 * regress_test_obj_skip_param:
2505 * @obj: A #RegressTestObj.
2507 * @out_b: (out): Return value.
2508 * @c: (skip): Other parameter.
2509 * @inout_d: (inout): Will be incremented.
2510 * @out_sum: (out): Return value.
2513 * @error: Return location for error.
2515 * Check that a parameter is skipped
2517 * Returns: %TRUE if the call succeeds, %FALSE if @error is set.
2520 regress_test_obj_skip_param (RegressTestObj *obj,
2532 if (inout_d != NULL)
2533 *inout_d = *inout_d + 1;
2534 if (out_sum != NULL)
2535 *out_sum = num1 + 10*num2;
2540 * regress_test_obj_skip_out_param:
2541 * @obj: A #RegressTestObj.
2543 * @out_b: (out) (skip): Return value.
2544 * @c: Other parameter.
2545 * @inout_d: (inout): Will be incremented.
2546 * @out_sum: (out): Return value.
2549 * @error: Return location for error.
2551 * Check that the out value is skipped
2553 * Returns: %TRUE if the call succeeds, %FALSE if @error is set.
2556 regress_test_obj_skip_out_param (RegressTestObj *obj,
2568 if (inout_d != NULL)
2569 *inout_d = *inout_d + 1;
2570 if (out_sum != NULL)
2571 *out_sum = num1 + 10*num2;
2576 * regress_test_obj_skip_inout_param:
2577 * @obj: A #RegressTestObj.
2579 * @out_b: (out): Return value.
2580 * @c: Other parameter.
2581 * @inout_d: (inout) (skip): Will be incremented.
2582 * @out_sum: (out): Return value.
2585 * @error: Return location for error.
2587 * Check that the out value is skipped
2589 * Returns: %TRUE if the call succeeds, %FALSE if @error is set.
2592 regress_test_obj_skip_inout_param (RegressTestObj *obj,
2604 if (inout_d != NULL)
2605 *inout_d = *inout_d + 1;
2606 if (out_sum != NULL)
2607 *out_sum = num1 + 10*num2;
2612 * regress_test_obj_do_matrix:
2613 * @obj: A #RegressTestObj
2614 * @somestr: Meaningless string
2616 * This method is virtual. Notably its name differs from the virtual
2617 * slot name, which makes it useful for testing bindings handle this
2623 regress_test_obj_do_matrix (RegressTestObj *obj, const char *somestr)
2625 return REGRESS_TEST_OBJ_GET_CLASS (obj)->matrix (obj, somestr);
2629 * regress_func_obj_null_in:
2630 * @obj: (allow-none): A #RegressTestObj
2633 regress_func_obj_null_in (RegressTestObj *obj)
2638 * regress_test_obj_null_out:
2639 * @obj: (allow-none) (out): A #RegressTestObj
2642 regress_test_obj_null_out (RegressTestObj **obj)
2649 * regress_test_array_fixed_out_objects:
2650 * @objs: (out) (array fixed-size=2) (transfer full): An array of #RegressTestObj
2653 regress_test_array_fixed_out_objects (RegressTestObj ***objs)
2655 RegressTestObj **values = (RegressTestObj**)g_new(gpointer, 2);
2657 values[0] = regress_constructor();
2658 values[1] = regress_constructor();
2663 typedef struct _CallbackInfo CallbackInfo;
2665 struct _CallbackInfo
2667 RegressTestCallbackUserData callback;
2668 GDestroyNotify notify;
2673 G_DEFINE_TYPE(RegressTestSubObj, regress_test_sub_obj, REGRESS_TEST_TYPE_OBJ);
2676 regress_test_sub_obj_class_init (RegressTestSubObjClass *klass)
2681 regress_test_sub_obj_init (RegressTestSubObj *obj)
2686 regress_test_sub_obj_new ()
2688 return g_object_new (REGRESS_TEST_TYPE_SUB_OBJ, NULL);
2692 regress_test_sub_obj_instance_method (RegressTestSubObj *obj)
2698 regress_test_sub_obj_unset_bare (RegressTestSubObj *obj)
2700 regress_test_obj_set_bare(REGRESS_TEST_OBJECT(obj), NULL);
2703 /* RegressTestFundamental */
2706 * regress_test_fundamental_object_ref:
2708 * Returns: (transfer full): A new #RegressTestFundamentalObject
2710 RegressTestFundamentalObject *
2711 regress_test_fundamental_object_ref (RegressTestFundamentalObject * fundamental_object)
2713 g_return_val_if_fail (fundamental_object != NULL, NULL);
2714 g_atomic_int_inc (&fundamental_object->refcount);
2716 return fundamental_object;
2720 regress_test_fundamental_object_free (RegressTestFundamentalObject * fundamental_object)
2722 RegressTestFundamentalObjectClass *mo_class;
2723 regress_test_fundamental_object_ref (fundamental_object);
2725 mo_class = REGRESS_TEST_FUNDAMENTAL_OBJECT_GET_CLASS (fundamental_object);
2726 mo_class->finalize (fundamental_object);
2728 if (G_LIKELY (g_atomic_int_dec_and_test (&fundamental_object->refcount))) {
2729 g_type_free_instance ((GTypeInstance *) fundamental_object);
2734 regress_test_fundamental_object_unref (RegressTestFundamentalObject * fundamental_object)
2736 g_return_if_fail (fundamental_object != NULL);
2737 g_return_if_fail (fundamental_object->refcount > 0);
2739 if (G_UNLIKELY (g_atomic_int_dec_and_test (&fundamental_object->refcount))) {
2740 regress_test_fundamental_object_free (fundamental_object);
2745 regress_test_fundamental_object_replace (RegressTestFundamentalObject ** olddata, RegressTestFundamentalObject * newdata)
2747 RegressTestFundamentalObject *olddata_val;
2749 g_return_if_fail (olddata != NULL);
2751 olddata_val = g_atomic_pointer_get ((gpointer *) olddata);
2753 if (olddata_val == newdata)
2757 regress_test_fundamental_object_ref (newdata);
2759 while (!g_atomic_pointer_compare_and_exchange ((gpointer *) olddata,
2760 olddata_val, newdata)) {
2761 olddata_val = g_atomic_pointer_get ((gpointer *) olddata);
2765 regress_test_fundamental_object_unref (olddata_val);
2769 regress_test_value_fundamental_object_init (GValue * value)
2771 value->data[0].v_pointer = NULL;
2775 regress_test_value_fundamental_object_free (GValue * value)
2777 if (value->data[0].v_pointer) {
2778 regress_test_fundamental_object_unref (REGRESS_TEST_FUNDAMENTAL_OBJECT_CAST (value->data[0].v_pointer));
2783 regress_test_value_fundamental_object_copy (const GValue * src_value, GValue * dest_value)
2785 if (src_value->data[0].v_pointer) {
2786 dest_value->data[0].v_pointer =
2787 regress_test_fundamental_object_ref (REGRESS_TEST_FUNDAMENTAL_OBJECT_CAST (src_value->data[0].
2790 dest_value->data[0].v_pointer = NULL;
2795 regress_test_value_fundamental_object_peek_pointer (const GValue * value)
2797 return value->data[0].v_pointer;
2801 regress_test_value_fundamental_object_collect (GValue * value,
2802 guint n_collect_values,
2803 GTypeCValue * collect_values,
2804 guint collect_flags)
2806 if (collect_values[0].v_pointer) {
2807 value->data[0].v_pointer =
2808 regress_test_fundamental_object_ref (collect_values[0].v_pointer);
2810 value->data[0].v_pointer = NULL;
2817 regress_test_value_fundamental_object_lcopy (const GValue * value,
2818 guint n_collect_values,
2819 GTypeCValue * collect_values,
2820 guint collect_flags)
2822 gpointer *fundamental_object_p = collect_values[0].v_pointer;
2824 if (!fundamental_object_p) {
2825 return g_strdup_printf ("value location for '%s' passed as NULL",
2826 G_VALUE_TYPE_NAME (value));
2829 if (!value->data[0].v_pointer)
2830 *fundamental_object_p = NULL;
2831 else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
2832 *fundamental_object_p = value->data[0].v_pointer;
2834 *fundamental_object_p = regress_test_fundamental_object_ref (value->data[0].v_pointer);
2840 regress_test_fundamental_object_finalize (RegressTestFundamentalObject * obj)
2845 static RegressTestFundamentalObject *
2846 regress_test_fundamental_object_copy_default (const RegressTestFundamentalObject * obj)
2848 g_warning ("RegressTestFundamentalObject classes must implement RegressTestFundamentalObject::copy");
2853 regress_test_fundamental_object_class_init (gpointer g_class, gpointer class_data)
2855 RegressTestFundamentalObjectClass *mo_class = REGRESS_TEST_FUNDAMENTAL_OBJECT_CLASS (g_class);
2857 mo_class->copy = regress_test_fundamental_object_copy_default;
2858 mo_class->finalize = regress_test_fundamental_object_finalize;
2862 regress_test_fundamental_object_init (GTypeInstance * instance, gpointer klass)
2864 RegressTestFundamentalObject *fundamental_object = REGRESS_TEST_FUNDAMENTAL_OBJECT_CAST (instance);
2866 fundamental_object->refcount = 1;
2870 * RegressTestFundamentalObject:
2872 * Ref Func: regress_test_fundamental_object_ref
2873 * Unref Func: regress_test_fundamental_object_unref
2874 * Set Value Func: regress_test_value_set_fundamental_object
2875 * Get Value Func: regress_test_value_get_fundamental_object
2879 regress_test_fundamental_object_get_type (void)
2881 static GType _test_fundamental_object_type = 0;
2883 if (G_UNLIKELY (_test_fundamental_object_type == 0)) {
2884 static const GTypeValueTable value_table = {
2885 regress_test_value_fundamental_object_init,
2886 regress_test_value_fundamental_object_free,
2887 regress_test_value_fundamental_object_copy,
2888 regress_test_value_fundamental_object_peek_pointer,
2890 regress_test_value_fundamental_object_collect,
2892 regress_test_value_fundamental_object_lcopy
2894 static const GTypeInfo fundamental_object_info = {
2895 sizeof (RegressTestFundamentalObjectClass),
2897 regress_test_fundamental_object_class_init,
2900 sizeof (RegressTestFundamentalObject),
2902 (GInstanceInitFunc) regress_test_fundamental_object_init,
2905 static const GTypeFundamentalInfo fundamental_object_fundamental_info = {
2906 (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE |
2907 G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE)
2910 _test_fundamental_object_type = g_type_fundamental_next ();
2911 g_type_register_fundamental (_test_fundamental_object_type, "RegressTestFundamentalObject",
2912 &fundamental_object_info, &fundamental_object_fundamental_info, G_TYPE_FLAG_ABSTRACT);
2916 return _test_fundamental_object_type;
2920 * regress_test_value_set_fundamental_object: (skip)
2922 * @fundamental_object:
2925 regress_test_value_set_fundamental_object (GValue * value, RegressTestFundamentalObject * fundamental_object)
2927 gpointer *pointer_p;
2929 g_return_if_fail (REGRESS_TEST_VALUE_HOLDS_FUNDAMENTAL_OBJECT (value));
2930 g_return_if_fail (fundamental_object == NULL || REGRESS_TEST_IS_FUNDAMENTAL_OBJECT (fundamental_object));
2932 pointer_p = &value->data[0].v_pointer;
2934 regress_test_fundamental_object_replace ((RegressTestFundamentalObject **) pointer_p, fundamental_object);
2938 * regress_test_value_get_fundamental_object: (skip)
2941 RegressTestFundamentalObject *
2942 regress_test_value_get_fundamental_object (const GValue * value)
2944 g_return_val_if_fail (REGRESS_TEST_VALUE_HOLDS_FUNDAMENTAL_OBJECT (value), NULL);
2946 return value->data[0].v_pointer;
2949 static RegressTestFundamentalObjectClass *parent_class = NULL;
2951 G_DEFINE_TYPE (RegressTestFundamentalSubObject, regress_test_fundamental_sub_object, REGRESS_TEST_TYPE_FUNDAMENTAL_OBJECT);
2953 static RegressTestFundamentalSubObject *
2954 _regress_test_fundamental_sub_object_copy (RegressTestFundamentalSubObject * fundamental_sub_object)
2956 RegressTestFundamentalSubObject *copy;
2958 copy = regress_test_fundamental_sub_object_new(NULL);
2959 copy->data = g_strdup(fundamental_sub_object->data);
2964 regress_test_fundamental_sub_object_finalize (RegressTestFundamentalSubObject * fundamental_sub_object)
2966 g_return_if_fail (fundamental_sub_object != NULL);
2968 g_free(fundamental_sub_object->data);
2969 regress_test_fundamental_object_finalize (REGRESS_TEST_FUNDAMENTAL_OBJECT (fundamental_sub_object));
2973 regress_test_fundamental_sub_object_class_init (RegressTestFundamentalSubObjectClass * klass)
2975 parent_class = g_type_class_peek_parent (klass);
2977 klass->fundamental_object_class.copy = (RegressTestFundamentalObjectCopyFunction) _regress_test_fundamental_sub_object_copy;
2978 klass->fundamental_object_class.finalize =
2979 (RegressTestFundamentalObjectFinalizeFunction) regress_test_fundamental_sub_object_finalize;
2983 regress_test_fundamental_sub_object_init(RegressTestFundamentalSubObject *object)
2989 * regress_test_fundamental_sub_object_new:
2991 RegressTestFundamentalSubObject *
2992 regress_test_fundamental_sub_object_new (const char * data)
2994 RegressTestFundamentalSubObject *object;
2996 object = (RegressTestFundamentalSubObject *) g_type_create_instance (regress_test_fundamental_sub_object_get_type());
2997 object->data = g_strdup(data);
3003 * regress_test_callback:
3004 * @callback: (scope call) (allow-none):
3008 regress_test_callback (RegressTestCallback callback)
3010 if (callback != NULL)
3016 * regress_test_multi_callback:
3017 * @callback: (scope call) (allow-none):
3021 regress_test_multi_callback (RegressTestCallback callback)
3024 if (callback != NULL) {
3033 * regress_test_array_callback:
3034 * @callback: (scope call):
3037 int regress_test_array_callback (RegressTestCallbackArray callback)
3039 static const char *strings[] = { "one", "two", "three" };
3040 static int ints[] = { -1, 0, 1, 2 };
3043 sum += callback(ints, 4, strings, 3);
3044 sum += callback(ints, 4, strings, 3);
3050 * regress_test_simple_callback:
3051 * @callback: (scope call) (allow-none):
3055 regress_test_simple_callback (RegressTestSimpleCallback callback)
3057 if (callback != NULL)
3064 * regress_test_callback_user_data:
3065 * @callback: (scope call):
3067 * Call - callback parameter persists for the duration of the method
3068 * call and can be released on return.
3071 regress_test_callback_user_data (RegressTestCallbackUserData callback,
3074 return callback(user_data);
3077 static GSList *notified_callbacks = NULL;
3080 * regress_test_callback_destroy_notify:
3081 * @callback: (scope notified):
3083 * Notified - callback persists until a DestroyNotify delegate
3087 regress_test_callback_destroy_notify (RegressTestCallbackUserData callback,
3089 GDestroyNotify notify)
3094 retval = callback(user_data);
3096 info = g_slice_new(CallbackInfo);
3097 info->callback = callback;
3098 info->notify = notify;
3099 info->user_data = user_data;
3101 notified_callbacks = g_slist_prepend(notified_callbacks, info);
3107 * regress_test_callback_thaw_notifications:
3109 * Invokes all callbacks installed by #test_callback_destroy_notify(),
3110 * adding up their return values, and removes them, invoking the
3111 * corresponding destroy notfications.
3113 * Return value: Sum of the return values of the invoked callbacks.
3116 regress_test_callback_thaw_notifications (void)
3121 for (node = notified_callbacks; node != NULL; node = node->next)
3123 CallbackInfo *info = node->data;
3124 retval += info->callback (info->user_data);
3126 info->notify (info->user_data);
3127 g_slice_free (CallbackInfo, info);
3130 g_slist_free (notified_callbacks);
3131 notified_callbacks = NULL;
3136 static GSList *async_callbacks = NULL;
3139 * regress_test_callback_async:
3140 * @callback: (scope async):
3144 regress_test_callback_async (RegressTestCallbackUserData callback,
3149 info = g_slice_new(CallbackInfo);
3150 info->callback = callback;
3151 info->user_data = user_data;
3153 async_callbacks = g_slist_prepend(async_callbacks, info);
3157 * regress_test_callback_thaw_async:
3160 regress_test_callback_thaw_async (void)
3165 for (node = async_callbacks; node != NULL; node = node->next)
3167 CallbackInfo *info = node->data;
3168 retval = info->callback (info->user_data);
3169 g_slice_free (CallbackInfo, info);
3172 g_slist_free (async_callbacks);
3173 async_callbacks = NULL;
3178 regress_test_async_ready_callback (GAsyncReadyCallback callback)
3180 GSimpleAsyncResult *result = g_simple_async_result_new (NULL, callback, NULL,
3181 regress_test_async_ready_callback);
3182 g_simple_async_result_complete_in_idle (result);
3186 * regress_test_obj_instance_method_callback:
3187 * @callback: (scope call) (allow-none):
3191 regress_test_obj_instance_method_callback (RegressTestObj *obj, RegressTestCallback callback)
3193 if (callback != NULL)
3198 * regress_test_obj_static_method_callback:
3199 * @callback: (scope call) (allow-none):
3203 regress_test_obj_static_method_callback (RegressTestCallback callback)
3205 if (callback != NULL)
3210 * regress_test_obj_new_callback:
3211 * @callback: (scope notified):
3214 regress_test_obj_new_callback (RegressTestCallbackUserData callback, gpointer user_data,
3215 GDestroyNotify notify)
3219 callback(user_data);
3221 info = g_slice_new(CallbackInfo);
3222 info->callback = callback;
3223 info->notify = notify;
3224 info->user_data = user_data;
3226 notified_callbacks = g_slist_prepend(notified_callbacks, info);
3228 return g_object_new (REGRESS_TEST_TYPE_OBJ, NULL);
3232 * regress_test_hash_table_callback:
3233 * @data: (element-type utf8 gint): GHashTable that gets passed to callback
3234 * @callback: (scope call):
3237 regress_test_hash_table_callback (GHashTable *data, RegressTestCallbackHashtable callback)
3243 * regress_test_gerror_callback:
3244 * @callback: (scope call):
3247 regress_test_gerror_callback (RegressTestCallbackGError callback)
3251 error = g_error_new_literal (G_IO_ERROR,
3252 G_IO_ERROR_NOT_SUPPORTED,
3253 "regression test error");
3255 g_error_free (error);
3259 * regress_test_null_gerror_callback:
3260 * @callback: (scope call):
3263 regress_test_null_gerror_callback (RegressTestCallbackGError callback)
3269 * regress_test_owned_gerror_callback:
3270 * @callback: (scope call):
3273 regress_test_owned_gerror_callback (RegressTestCallbackOwnedGError callback)
3277 error = g_error_new_literal (G_IO_ERROR,
3278 G_IO_ERROR_PERMISSION_DENIED,
3279 "regression test owned error");
3286 regress_test_interface_class_init(void *g_iface)
3291 regress_test_interface_get_type(void)
3293 static GType type = 0;
3295 type = g_type_register_static_simple (G_TYPE_INTERFACE,
3296 "RegressTestInterface",
3297 sizeof (RegressTestInterfaceIface),
3298 (GClassInitFunc) regress_test_interface_class_init,
3305 /* gobject with non-standard prefix */
3306 G_DEFINE_TYPE(RegressTestWi8021x, regress_test_wi_802_1x, G_TYPE_OBJECT);
3310 PROP_TEST_WI_802_1X_TESTBOOL = 1
3314 regress_test_wi_802_1x_set_property (GObject *object,
3316 const GValue *value,
3319 RegressTestWi8021x *self = REGRESS_TEST_WI_802_1X (object);
3321 switch (property_id)
3323 case PROP_TEST_WI_802_1X_TESTBOOL:
3324 regress_test_wi_802_1x_set_testbool (self, g_value_get_boolean (value));
3328 /* We don't have any other property... */
3329 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
3335 regress_test_wi_802_1x_get_property (GObject *object,
3340 RegressTestWi8021x *self = REGRESS_TEST_WI_802_1X (object);
3342 switch (property_id)
3344 case PROP_TEST_WI_802_1X_TESTBOOL:
3345 g_value_set_boolean (value, regress_test_wi_802_1x_get_testbool (self));
3349 /* We don't have any other property... */
3350 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
3356 regress_test_wi_802_1x_dispose (GObject *gobject)
3358 /* Chain up to the parent class */
3359 G_OBJECT_CLASS (regress_test_wi_802_1x_parent_class)->dispose (gobject);
3363 regress_test_wi_802_1x_class_init (RegressTestWi8021xClass *klass)
3365 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
3368 gobject_class->set_property = regress_test_wi_802_1x_set_property;
3369 gobject_class->get_property = regress_test_wi_802_1x_get_property;
3370 gobject_class->dispose = regress_test_wi_802_1x_dispose;
3372 pspec = g_param_spec_boolean ("testbool",
3373 "Nick for testbool",
3374 "Blurb for testbool",
3377 g_object_class_install_property (gobject_class,
3378 PROP_TEST_WI_802_1X_TESTBOOL,
3383 regress_test_wi_802_1x_init (RegressTestWi8021x *obj)
3385 obj->testbool = TRUE;
3388 RegressTestWi8021x *
3389 regress_test_wi_802_1x_new (void)
3391 return g_object_new (REGRESS_TEST_TYPE_WI_802_1X, NULL);
3395 regress_test_wi_802_1x_set_testbool (RegressTestWi8021x *obj, gboolean val)
3397 obj->testbool = val;
3401 regress_test_wi_802_1x_get_testbool (RegressTestWi8021x *obj)
3403 return obj->testbool;
3407 regress_test_wi_802_1x_static_method (int x)
3412 /* floating gobject */
3413 G_DEFINE_TYPE(RegressTestFloating, regress_test_floating, G_TYPE_INITIALLY_UNOWNED);
3416 regress_test_floating_finalize(GObject *object)
3418 g_assert(!g_object_is_floating (object));
3420 G_OBJECT_CLASS(regress_test_floating_parent_class)->finalize(object);
3424 regress_test_floating_class_init (RegressTestFloatingClass *klass)
3426 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
3427 gobject_class->finalize = regress_test_floating_finalize;
3431 regress_test_floating_init (RegressTestFloating *obj)
3436 * regress_test_floating_new:
3438 * Returns:: A new floating #RegressTestFloating
3440 RegressTestFloating *
3441 regress_test_floating_new (void)
3443 return g_object_new (REGRESS_TEST_TYPE_FLOATING, NULL);
3448 * regress_test_torture_signature_0:
3458 regress_test_torture_signature_0 (int x,
3467 *q = g_utf8_strlen (foo, -1) + m;
3471 * regress_test_torture_signature_1:
3480 * This function throws an error if m is odd.
3483 regress_test_torture_signature_1 (int x,
3493 *q = g_utf8_strlen (foo, -1) + m;
3496 g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "m is odd");
3501 * regress_test_torture_signature_2:
3514 regress_test_torture_signature_2 (int x,
3515 RegressTestCallbackUserData callback,
3517 GDestroyNotify notify,
3526 *q = g_utf8_strlen (foo, -1) + m;
3531 * regress_test_date_in_gvalue:
3533 * Returns: (transfer full):
3536 regress_test_date_in_gvalue (void)
3538 GValue *value = g_new0 (GValue, 1);
3539 GDate *date = g_date_new_dmy (5, 12, 1984);
3541 g_value_init (value, G_TYPE_DATE);
3542 g_value_take_boxed (value, date);
3548 * regress_test_strv_in_gvalue:
3550 * Returns: (transfer full):
3553 regress_test_strv_in_gvalue (void)
3555 GValue *value = g_new0 (GValue, 1);
3556 const char *strv[] = { "one", "two", "three", NULL };
3558 g_value_init (value, G_TYPE_STRV);
3559 g_value_set_boxed (value, strv);
3565 * regress_test_multiline_doc_comments:
3567 * This is a function.
3569 * It has multiple lines in the documentation.
3573 * You will give me your credit card number.
3576 regress_test_multiline_doc_comments (void)
3581 * regress_test_nested_parameter:
3588 * <entry>Syntax</entry>
3589 * <entry>Explanation</entry>
3590 * <entry>Examples</entry>
3595 * <entry>rgb(@r, @g, @b)</entry>
3596 * <entry>An opaque color; @r, @g, @b can be either integers between
3597 * 0 and 255 or percentages</entry>
3598 * <entry><literallayout>rgb(128, 10, 54)
3599 * rgb(20%, 30%, 0%)</literallayout></entry>
3602 * <entry>rgba(@r, @g, @b, @a)</entry>
3603 * <entry>A translucent color; @r, @g, @b are as in the previous row,
3604 * @a is a floating point number between 0 and 1</entry>
3605 * <entry><literallayout>rgba(255, 255, 0, 0.5)</literallayout></entry>
3611 * What we're testing here is that the scanner ignores the @a nested inside XML.
3614 regress_test_nested_parameter (int a)
3619 * regress_introspectable_via_alias:
3623 regress_introspectable_via_alias (RegressPtrArrayAlias *data)
3628 * regress_not_introspectable_via_alias:
3632 regress_not_introspectable_via_alias (RegressVaListAlias ok)
3637 * regress_aliased_caller_alloc:
3640 void regress_aliased_caller_alloc (RegressAliasedTestBoxed *boxed)
3642 boxed->priv = g_slice_new0 (RegressTestBoxedPrivate);
3643 boxed->priv->magic = 0xdeadbeef;
3647 regress_test_struct_fixed_array_frob (RegressTestStructFixedArray *str)
3652 for (i = 0; i < G_N_ELEMENTS(str->array); i++)
3653 str->array[i] = 42 + i;
3657 * regress_has_parameter_named_attrs:
3659 * @attributes: (type guint32) (array fixed-size=32): list of attributes
3661 * This test case mirrors GnomeKeyringPasswordSchema from
3665 regress_has_parameter_named_attrs (int foo,
3666 gpointer attributes)