1 #include <glib-object.h>
4 test_registration_serial (void)
6 gint serial1, serial2, serial3;
8 serial1 = g_type_get_type_registration_serial ();
9 g_pointer_type_register_static ("my+pointer");
10 serial2 = g_type_get_type_registration_serial ();
11 g_assert (serial1 != serial2);
12 serial3 = g_type_get_type_registration_serial ();
13 g_assert (serial2 == serial3);
17 GTypeInterface g_iface;
20 GType bar_get_type (void);
22 G_DEFINE_INTERFACE (Bar, bar, G_TYPE_OBJECT)
25 bar_default_init (BarInterface *iface)
30 GTypeInterface g_iface;
33 GType foo_get_type (void);
35 G_DEFINE_INTERFACE_WITH_CODE (Foo, foo, G_TYPE_OBJECT,
36 g_type_interface_add_prerequisite (g_define_type_id, bar_get_type ()))
39 foo_default_init (FooInterface *iface)
44 GTypeInterface g_iface;
47 GType baa_get_type (void);
49 G_DEFINE_INTERFACE (Baa, baa, G_TYPE_INVALID)
52 baa_default_init (BaaInterface *iface)
57 GTypeInterface g_iface;
60 GType boo_get_type (void);
62 G_DEFINE_INTERFACE_WITH_CODE (Boo, boo, G_TYPE_INVALID,
63 g_type_interface_add_prerequisite (g_define_type_id, baa_get_type ()))
66 boo_default_init (BooInterface *iface)
71 GTypeInterface g_iface;
74 GType bibi_get_type (void);
76 G_DEFINE_INTERFACE (Bibi, bibi, G_TYPE_INITIALLY_UNOWNED)
79 bibi_default_init (BibiInterface *iface)
84 GTypeInterface g_iface;
87 GType bozo_get_type (void);
89 G_DEFINE_INTERFACE_WITH_CODE (Bozo, bozo, G_TYPE_INVALID,
90 g_type_interface_add_prerequisite (g_define_type_id, foo_get_type ());
91 g_type_interface_add_prerequisite (g_define_type_id, bibi_get_type ()))
94 bozo_default_init (BozoInterface *iface)
101 test_interface_prerequisite (void)
108 prereqs = g_type_interface_prerequisites (foo_get_type (), &n_prereqs);
109 g_assert_cmpint (n_prereqs, ==, 2);
110 g_assert (prereqs[0] == bar_get_type ());
111 g_assert (prereqs[1] == G_TYPE_OBJECT);
112 g_assert (g_type_interface_instantiatable_prerequisite (foo_get_type ()) == G_TYPE_OBJECT);
114 iface = g_type_default_interface_ref (foo_get_type ());
115 parent = g_type_interface_peek_parent (iface);
116 g_assert (parent == NULL);
117 g_type_default_interface_unref (iface);
121 g_assert_cmpint (g_type_interface_instantiatable_prerequisite (baa_get_type ()), ==, G_TYPE_INVALID);
122 g_assert_cmpint (g_type_interface_instantiatable_prerequisite (boo_get_type ()), ==, G_TYPE_INVALID);
124 g_assert_cmpint (g_type_interface_instantiatable_prerequisite (bozo_get_type ()), ==, G_TYPE_INITIALLY_UNOWNED);
128 GTypeInterface g_iface;
131 GType baz_get_type (void);
133 G_DEFINE_INTERFACE (Baz, baz, G_TYPE_OBJECT)
136 baz_default_init (BazInterface *iface)
145 GObjectClass parent_class;
148 GType bazo_get_type (void);
149 static void bazo_iface_init (BazInterface *i);
151 G_DEFINE_TYPE_WITH_CODE (Bazo, bazo, G_TYPE_INITIALLY_UNOWNED,
152 G_IMPLEMENT_INTERFACE (baz_get_type (),
161 bazo_class_init (BazoClass *c)
166 bazo_iface_init (BazInterface *i)
170 static gint check_called;
173 check_func (gpointer check_data,
176 g_assert (check_data == &check_called);
182 test_interface_check (void)
187 g_type_add_interface_check (&check_called, check_func);
188 o = g_object_ref_sink (g_object_new (bazo_get_type (), NULL));
190 g_assert_cmpint (check_called, ==, 1);
191 g_type_remove_interface_check (&check_called, check_func);
195 test_next_base (void)
199 type = g_type_next_base (bazo_get_type (), G_TYPE_OBJECT);
201 g_assert (type == G_TYPE_INITIALLY_UNOWNED);
204 /* Test that the macro an function versions of g_type_is_a
210 g_assert_true (g_type_is_a (G_TYPE_OBJECT, G_TYPE_OBJECT));
211 g_assert_true ((g_type_is_a) (G_TYPE_OBJECT, G_TYPE_OBJECT));
212 g_assert_true (g_type_is_a (bar_get_type (), G_TYPE_OBJECT));
213 g_assert_true ((g_type_is_a) (bar_get_type (), G_TYPE_OBJECT));
214 g_assert_false (g_type_is_a (bar_get_type (), bibi_get_type ()));
215 g_assert_false ((g_type_is_a) (bar_get_type (), bibi_get_type ()));
223 g_test_message ("Invalid types can’t be queried.");
224 g_type_query (G_TYPE_INVALID, &results);
225 g_assert_cmpuint (results.type, ==, 0);
227 g_test_message ("Unclassed types can’t be queried.");
228 g_type_query (G_TYPE_INT64, &results);
229 g_assert_cmpuint (results.type, ==, 0);
233 main (int argc, char *argv[])
235 g_test_init (&argc, &argv, NULL);
237 g_test_add_func ("/type/registration-serial", test_registration_serial);
238 g_test_add_func ("/type/interface-prerequisite", test_interface_prerequisite);
239 g_test_add_func ("/type/interface-check", test_interface_check);
240 g_test_add_func ("/type/next-base", test_next_base);
241 g_test_add_func ("/type/is-a", test_is_a);
242 g_test_add_func ("/type/query", test_query);
244 return g_test_run ();