diff options
Diffstat (limited to 'tests/repository/giteststructinfo.c')
-rw-r--r-- | tests/repository/giteststructinfo.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/repository/giteststructinfo.c b/tests/repository/giteststructinfo.c new file mode 100644 index 00000000..ed1563b2 --- /dev/null +++ b/tests/repository/giteststructinfo.c @@ -0,0 +1,58 @@ + +#include "girepository.h" + + +static void +test_field_iterators (void) +{ + GIRepository *repo; + GITypelib *ret; + GIStructInfo *class_info; + GIFieldInfo *field_info; + GError *error = NULL; + gint i; + + repo = g_irepository_get_default (); + + ret = g_irepository_require (repo, "GIMarshallingTests", NULL, 0, &error); + g_assert_nonnull (ret); + g_assert_no_error (error); + + class_info = g_irepository_find_by_name (repo, "GIMarshallingTests", "ObjectClass"); + g_assert_nonnull (class_info); + g_assert (g_base_info_get_type (class_info) == GI_INFO_TYPE_STRUCT); + + for (i = 0; i < g_struct_info_get_n_fields (class_info); i++) + { + const char *field_name; + GIFieldInfo *found; + + field_info = g_struct_info_get_field (class_info, i); + g_assert_nonnull (field_info); + + field_name = g_base_info_get_name (field_info); + g_assert_nonnull (field_name); + + found = g_struct_info_find_field (class_info, field_name); + g_assert_nonnull (found); + g_assert_cmpstr (g_base_info_get_name (found), ==, field_name); + + g_base_info_unref (found); + g_base_info_unref (field_info); + } + + field_info = g_struct_info_find_field (class_info, "not_a_real_field_name"); + g_assert_null (field_info); + + g_base_info_unref (class_info); +} + +int +main(int argc, char **argv) +{ + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/girepository/structinfo/field-iterators", test_field_iterators); + + return g_test_run (); +} |