Blame gobject/tests/type.c

Packit ae235b
#include <glib-object.h>
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_registration_serial (void)
Packit ae235b
{
Packit ae235b
  gint serial1, serial2, serial3;
Packit ae235b
Packit ae235b
  serial1 = g_type_get_type_registration_serial ();
Packit ae235b
  g_pointer_type_register_static ("my+pointer");
Packit ae235b
  serial2 = g_type_get_type_registration_serial ();
Packit ae235b
  g_assert (serial1 != serial2);
Packit ae235b
  serial3 = g_type_get_type_registration_serial ();
Packit ae235b
  g_assert (serial2 == serial3);
Packit ae235b
}
Packit ae235b
Packit ae235b
typedef struct {
Packit ae235b
  GTypeInterface g_iface;
Packit ae235b
} BarInterface;
Packit ae235b
Packit ae235b
GType bar_get_type (void);
Packit ae235b
Packit ae235b
G_DEFINE_INTERFACE (Bar, bar, G_TYPE_OBJECT)
Packit ae235b
Packit ae235b
static void
Packit ae235b
bar_default_init (BarInterface *iface)
Packit ae235b
{
Packit ae235b
}
Packit ae235b
Packit ae235b
typedef struct {
Packit ae235b
  GTypeInterface g_iface;
Packit ae235b
} FooInterface;
Packit ae235b
Packit ae235b
GType foo_get_type (void);
Packit ae235b
Packit ae235b
G_DEFINE_INTERFACE_WITH_CODE (Foo, foo, G_TYPE_OBJECT,
Packit ae235b
                              g_type_interface_add_prerequisite (g_define_type_id, bar_get_type ());)
Packit ae235b
Packit ae235b
static void
Packit ae235b
foo_default_init (FooInterface *iface)
Packit ae235b
{
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_interface_prerequisite (void)
Packit ae235b
{
Packit ae235b
  GType *prereqs;
Packit ae235b
  guint n_prereqs;
Packit ae235b
  gpointer iface;
Packit ae235b
  gpointer parent;
Packit ae235b
Packit ae235b
  prereqs = g_type_interface_prerequisites (foo_get_type (), &n_prereqs);
Packit ae235b
  g_assert_cmpint (n_prereqs, ==, 2);
Packit ae235b
  g_assert (prereqs[0] == bar_get_type ());
Packit ae235b
  g_assert (prereqs[1] == G_TYPE_OBJECT);
Packit ae235b
Packit ae235b
  iface = g_type_default_interface_ref (foo_get_type ());
Packit ae235b
  parent = g_type_interface_peek_parent (iface);
Packit ae235b
  g_assert (parent == NULL);
Packit ae235b
  g_type_default_interface_unref (iface);
Packit ae235b
Packit ae235b
  g_free (prereqs);
Packit ae235b
}
Packit ae235b
Packit ae235b
typedef struct {
Packit ae235b
  GTypeInterface g_iface;
Packit ae235b
} BazInterface;
Packit ae235b
Packit ae235b
GType baz_get_type (void);
Packit ae235b
Packit ae235b
G_DEFINE_INTERFACE (Baz, baz, G_TYPE_OBJECT)
Packit ae235b
Packit ae235b
static void
Packit ae235b
baz_default_init (BazInterface *iface)
Packit ae235b
{
Packit ae235b
}
Packit ae235b
Packit ae235b
typedef struct {
Packit ae235b
  GObject parent;
Packit ae235b
} Bazo;
Packit ae235b
Packit ae235b
typedef struct {
Packit ae235b
  GObjectClass parent_class;
Packit ae235b
} BazoClass;
Packit ae235b
Packit ae235b
GType bazo_get_type (void);
Packit ae235b
static void bazo_iface_init (BazInterface *i);
Packit ae235b
Packit ae235b
G_DEFINE_TYPE_WITH_CODE (Bazo, bazo, G_TYPE_INITIALLY_UNOWNED,
Packit ae235b
                         G_IMPLEMENT_INTERFACE (baz_get_type (),
Packit ae235b
                                                bazo_iface_init);)
Packit ae235b
Packit ae235b
static void
Packit ae235b
bazo_init (Bazo *b)
Packit ae235b
{
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
bazo_class_init (BazoClass *c)
Packit ae235b
{
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
bazo_iface_init (BazInterface *i)
Packit ae235b
{
Packit ae235b
}
Packit ae235b
Packit ae235b
static gint check_called;
Packit ae235b
Packit ae235b
static void
Packit ae235b
check_func (gpointer check_data,
Packit ae235b
            gpointer g_iface)
Packit ae235b
{
Packit ae235b
  g_assert (check_data == &check_called);
Packit ae235b
Packit ae235b
  check_called++;
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_interface_check (void)
Packit ae235b
{
Packit ae235b
  GObject *o;
Packit ae235b
Packit ae235b
  check_called = 0;
Packit ae235b
  g_type_add_interface_check (&check_called, check_func);
Packit ae235b
  o = g_object_new (bazo_get_type (), NULL);
Packit ae235b
  g_object_unref (o);
Packit ae235b
  g_assert_cmpint (check_called, ==, 1);
Packit ae235b
  g_type_remove_interface_check (&check_called, check_func);
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_next_base (void)
Packit ae235b
{
Packit ae235b
  GType type;
Packit ae235b
Packit ae235b
  type = g_type_next_base (bazo_get_type (), G_TYPE_OBJECT);
Packit ae235b
Packit ae235b
  g_assert (type == G_TYPE_INITIALLY_UNOWNED);
Packit ae235b
}
Packit ae235b
Packit ae235b
int
Packit ae235b
main (int argc, char *argv[])
Packit ae235b
{
Packit ae235b
  g_test_init (&argc, &argv, NULL);
Packit ae235b
Packit ae235b
  g_test_add_func ("/type/registration-serial", test_registration_serial);
Packit ae235b
  g_test_add_func ("/type/interface-prerequisite", test_interface_prerequisite);
Packit ae235b
  g_test_add_func ("/type/interface-check", test_interface_check);
Packit ae235b
  g_test_add_func ("/type/next-base", test_next_base);
Packit ae235b
Packit ae235b
  return g_test_run ();
Packit ae235b
}