Test the newly added G_DEFINE macros for enumeration types

This commit is contained in:
Emmanuele Bassi 2022-06-29 14:05:22 +01:00
parent 9a4a10fbc8
commit 2a9ef1e0b4

View File

@ -158,13 +158,86 @@ test_flags_basic (void)
g_type_class_unref (class); g_type_class_unref (class);
} }
typedef enum {
TEST_ENUM_FIRST_VALUE,
TEST_ENUM_SECOND_VALUE,
TEST_ENUM_THIRD_VALUE
} TestEnum;
GType test_enum_get_type (void);
G_DEFINE_ENUM_TYPE (TestEnum, test_enum,
G_DEFINE_ENUM_VALUE (TEST_ENUM_FIRST_VALUE, "first-value")
G_DEFINE_ENUM_VALUE (TEST_ENUM_SECOND_VALUE, "second-value")
G_DEFINE_ENUM_VALUE (TEST_ENUM_THIRD_VALUE, "third-value"))
static void
test_enum_define_type (void)
{
GEnumClass *class = g_type_class_ref (test_enum_get_type ());
GEnumValue *val;
g_assert_cmpint (class->minimum, ==, 0);
g_assert_cmpint (class->maximum, ==, 2);
g_assert_cmpint (class->n_values, ==, 3);
val = g_enum_get_value (class, 2);
g_assert (val != NULL);
g_assert_cmpstr (val->value_nick, ==, "third-value");
val = g_enum_get_value (class, 15);
g_assert (val == NULL);
g_type_class_unref (class);
}
typedef enum {
TEST_FLAGS_DEFAULT = 0,
TEST_FLAGS_FIRST = 1 << 0,
TEST_FLAGS_SECOND = 1 << 1,
TEST_FLAGS_THIRD = 1 << 2
} TestFlags;
GType test_flags_get_type (void);
G_DEFINE_FLAGS_TYPE (TestFlags, test_flags,
G_DEFINE_ENUM_VALUE (TEST_FLAGS_DEFAULT, "default")
G_DEFINE_ENUM_VALUE (TEST_FLAGS_FIRST, "first")
G_DEFINE_ENUM_VALUE (TEST_FLAGS_SECOND, "second")
G_DEFINE_ENUM_VALUE (TEST_FLAGS_THIRD, "third"))
static void
test_flags_define_type (void)
{
GFlagsClass *class = g_type_class_ref (test_flags_get_type ());
GFlagsValue *val;
char *to_string;
g_assert_cmpint (class->mask, ==, 1 | 2 | 4);
g_assert_cmpint (class->n_values, ==, 4);
val = g_flags_get_first_value (class, 2|4);
g_assert (val != NULL);
g_assert_cmpstr (val->value_nick, ==, "second");
val = g_flags_get_first_value (class, 8);
g_assert (val == NULL);
to_string = g_flags_to_string (test_flags_get_type (), 0);
g_assert_cmpstr (to_string, ==, "TEST_FLAGS_DEFAULT");
g_free (to_string);
g_type_class_unref (class);
}
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
g_test_init (&argc, &argv, NULL); g_test_init (&argc, &argv, NULL);
g_test_add_func ("/enum/basic", test_enum_basic); g_test_add_func ("/enum/basic", test_enum_basic);
g_test_add_func ("/enum/define-type", test_enum_define_type);
g_test_add_func ("/flags/basic", test_flags_basic); g_test_add_func ("/flags/basic", test_flags_basic);
g_test_add_func ("/flags/define-type", test_flags_define_type);
return g_test_run (); return g_test_run ();
} }