[glib] Improve test coverage in gobject/



commit a9abbb31924f8ae9f51c1064f88efedde7c34117
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed May 29 00:15:55 2013 -0400

    Improve test coverage in gobject/
    
    Lines:          6631    8862    74.8 %
    Functions:      747     893     83.7 %

 gobject/tests/Makefile.am |    5 +-
 gobject/tests/boxed.c     |  116 ++++++++++++++++++++++++++++++++++
 gobject/tests/qdata.c     |   28 ++++++++
 gobject/tests/type.c      |  152 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 300 insertions(+), 1 deletions(-)
---
diff --git a/gobject/tests/Makefile.am b/gobject/tests/Makefile.am
index 7ac008a..390f41a 100644
--- a/gobject/tests/Makefile.am
+++ b/gobject/tests/Makefile.am
@@ -1,4 +1,5 @@
 include $(top_srcdir)/Makefile.decl
+NULL =
 
 AM_CPPFLAGS =                                  \
        -g                                      \
@@ -29,7 +30,9 @@ TEST_PROGS +=                 \
        properties      \
        reference       \
        ifaceproperties \
-       valuearray
+       valuearray      \
+       type            \
+       $(NULL)
 
 signals_SOURCES = signals.c marshalers.c
 
diff --git a/gobject/tests/boxed.c b/gobject/tests/boxed.c
index 7b764c2..a146c16 100644
--- a/gobject/tests/boxed.c
+++ b/gobject/tests/boxed.c
@@ -504,6 +504,117 @@ test_boxed_variantbuilder (void)
   g_value_unset (&value);
 }
 
+static void
+test_boxed_timezone (void)
+{
+  GTimeZone *z, *z2;
+  GValue value = G_VALUE_INIT;
+
+  g_value_init (&value, G_TYPE_TIME_ZONE);
+  g_assert (G_VALUE_HOLDS_BOXED (&value));
+
+  z = g_time_zone_new_utc ();
+  g_value_take_boxed (&value, z);
+
+  z2 = g_value_get_boxed (&value);
+  g_assert (z == z2);
+
+  z2 = g_value_dup_boxed (&value);
+  g_assert (z == z2);  /* timezone uses ref/unref for copy/free */
+  g_time_zone_unref (z2);
+
+  g_value_unset (&value);
+}
+
+static void
+test_boxed_pollfd (void)
+{
+  GPollFD *p, *p2;
+  GValue value = G_VALUE_INIT;
+
+  g_value_init (&value, G_TYPE_POLLFD);
+  g_assert (G_VALUE_HOLDS_BOXED (&value));
+
+  p = g_new (GPollFD, 1);
+  g_value_take_boxed (&value, p);
+
+  p2 = g_value_get_boxed (&value);
+  g_assert (p == p2);
+
+  p2 = g_value_dup_boxed (&value);
+  g_assert (p != p2);
+  g_free (p2);
+
+  g_value_unset (&value);
+}
+
+static void
+test_boxed_markup (void)
+{
+  GMarkupParseContext *c, *c2;
+  const GMarkupParser parser = { 0 };
+  GValue value = G_VALUE_INIT;
+
+  g_value_init (&value, G_TYPE_MARKUP_PARSE_CONTEXT);
+  g_assert (G_VALUE_HOLDS_BOXED (&value));
+
+  c = g_markup_parse_context_new (&parser, 0, NULL, NULL);
+  g_value_take_boxed (&value, c);
+
+  c2 = g_value_get_boxed (&value);
+  g_assert (c == c2);
+
+  c2 = g_value_dup_boxed (&value);
+  g_assert (c == c2);
+  g_markup_parse_context_unref (c2);
+
+  g_value_unset (&value);
+}
+
+static void
+test_boxed_thread (void)
+{
+  GThread *t, *t2;
+  GValue value = G_VALUE_INIT;
+
+  g_value_init (&value, G_TYPE_THREAD);
+  g_assert (G_VALUE_HOLDS_BOXED (&value));
+
+  t = g_thread_self ();
+  g_value_take_boxed (&value, t);
+
+  t2 = g_value_get_boxed (&value);
+  g_assert (t == t2);
+
+  t2 = g_value_dup_boxed (&value);
+  g_assert (t == t2);
+  g_thread_unref (t2);
+
+  g_value_unset (&value);
+}
+
+static void
+test_boxed_checksum (void)
+{
+  GChecksum *c, *c2;
+  GValue value = G_VALUE_INIT;
+
+  g_value_init (&value, G_TYPE_CHECKSUM);
+  g_assert (G_VALUE_HOLDS_BOXED (&value));
+
+  c = g_checksum_new (G_CHECKSUM_SHA512);
+  g_value_take_boxed (&value, c);
+
+  c2 = g_value_get_boxed (&value);
+  g_assert (c == c2);
+
+  c2 = g_value_dup_boxed (&value);
+  g_assert (c != c2);
+  g_checksum_free (c2);
+
+  g_value_unset (&value);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -528,6 +639,11 @@ main (int argc, char *argv[])
   g_test_add_func ("/boxed/maincontext", test_boxed_maincontext);
   g_test_add_func ("/boxed/source", test_boxed_source);
   g_test_add_func ("/boxed/variantbuilder", test_boxed_variantbuilder);
+  g_test_add_func ("/boxed/timezone", test_boxed_timezone);
+  g_test_add_func ("/boxed/pollfd", test_boxed_pollfd);
+  g_test_add_func ("/boxed/markup", test_boxed_markup);
+  g_test_add_func ("/boxed/thread", test_boxed_thread);
+  g_test_add_func ("/boxed/checksum", test_boxed_checksum);
 
   return g_test_run ();
 }
diff --git a/gobject/tests/qdata.c b/gobject/tests/qdata.c
index b126579..317f8c5 100644
--- a/gobject/tests/qdata.c
+++ b/gobject/tests/qdata.c
@@ -78,6 +78,33 @@ test_qdata_threaded (void)
   result = GPOINTER_TO_INT (g_object_get_data (object, "test"));
 
   g_assert_cmpint (sum, ==, result);
+
+  g_object_unref (object);
+}
+
+static void
+test_qdata_dup (void)
+{
+  gchar *s, *s2;
+  GQuark quark;
+  gboolean b;
+
+  quark = g_quark_from_static_string ("test");
+  object = g_object_new (G_TYPE_OBJECT, NULL);
+  s = g_strdup ("s");
+  g_object_set_qdata_full (object, quark, s, g_free);
+
+  s2 = g_object_dup_qdata (object, quark, (GDuplicateFunc)g_strdup, NULL);
+
+  g_assert_cmpstr (s, ==, s2);
+  g_assert (s != s2);
+
+  g_free (s2);
+
+  b = g_object_replace_qdata (object, quark, s, "s2", NULL, NULL);
+  g_assert (b);
+
+  g_object_unref (object);
 }
 
 int
@@ -88,6 +115,7 @@ main (int argc, char **argv)
   fail = !!g_getenv ("FAIL");
 
   g_test_add_func ("/qdata/threaded", test_qdata_threaded);
+  g_test_add_func ("/qdata/dup", test_qdata_dup);
 
   return g_test_run ();
 }
diff --git a/gobject/tests/type.c b/gobject/tests/type.c
new file mode 100644
index 0000000..1abe482
--- /dev/null
+++ b/gobject/tests/type.c
@@ -0,0 +1,152 @@
+#include <glib-object.h>
+
+static void
+test_registration_serial (void)
+{
+  gint serial1, serial2, serial3;
+
+  serial1 = g_type_get_type_registration_serial ();
+  g_pointer_type_register_static ("my+pointer");
+  serial2 = g_type_get_type_registration_serial ();
+  g_assert (serial1 != serial2);
+  serial3 = g_type_get_type_registration_serial ();
+  g_assert (serial2 == serial3);
+}
+
+typedef struct {
+  GTypeInterface g_iface;
+} BarInterface;
+
+GType bar_get_type (void);
+
+G_DEFINE_INTERFACE (Bar, bar, G_TYPE_OBJECT)
+
+static void
+bar_default_init (BarInterface *iface)
+{
+}
+
+typedef struct {
+  GTypeInterface g_iface;
+} FooInterface;
+
+GType foo_get_type (void);
+
+G_DEFINE_INTERFACE_WITH_CODE (Foo, foo, G_TYPE_OBJECT,
+                              g_type_interface_add_prerequisite (g_define_type_id, bar_get_type ());)
+
+static void
+foo_default_init (FooInterface *iface)
+{
+}
+
+static void
+test_interface_prerequisite (void)
+{
+  GType *prereqs;
+  guint n_prereqs;
+  gpointer iface;
+  gpointer parent;
+
+  prereqs = g_type_interface_prerequisites (foo_get_type (), &n_prereqs);
+  g_assert_cmpint (n_prereqs, ==, 2);
+  g_assert (prereqs[0] == bar_get_type ());
+  g_assert (prereqs[1] == G_TYPE_OBJECT);
+
+  iface = g_type_default_interface_ref (foo_get_type ());
+  parent = g_type_interface_peek_parent (iface);
+  g_assert (parent == NULL);
+  g_type_default_interface_unref (iface);
+
+  g_free (prereqs);
+}
+
+typedef struct {
+  GTypeInterface g_iface;
+} BazInterface;
+
+GType baz_get_type (void);
+
+G_DEFINE_INTERFACE (Baz, baz, G_TYPE_OBJECT)
+
+static void
+baz_default_init (BazInterface *iface)
+{
+}
+
+typedef struct {
+  GObject parent;
+} Bazo;
+
+typedef struct {
+  GObjectClass parent_class;
+} BazoClass;
+
+GType bazo_get_type (void);
+static void bazo_iface_init (BazInterface *i);
+
+G_DEFINE_TYPE_WITH_CODE (Bazo, bazo, G_TYPE_INITIALLY_UNOWNED,
+                         G_IMPLEMENT_INTERFACE (baz_get_type (),
+                                                bazo_iface_init);)
+
+static void
+bazo_init (Bazo *b)
+{
+}
+
+static void
+bazo_class_init (BazoClass *c)
+{
+}
+
+static void
+bazo_iface_init (BazInterface *i)
+{
+}
+
+static gint check_called;
+
+static void
+check_func (gpointer check_data,
+            gpointer g_iface)
+{
+  g_assert (check_data == &check_called);
+
+  check_called++;
+}
+
+static void
+test_interface_check (void)
+{
+  GObject *o;
+
+  check_called = 0;
+  g_type_add_interface_check (&check_called, check_func);
+  o = g_object_new (bazo_get_type (), NULL);
+  g_object_unref (o);
+  g_assert_cmpint (check_called, ==, 1);
+  g_type_remove_interface_check (&check_called, check_func);
+}
+
+static void
+test_next_base (void)
+{
+  GType type;
+
+  type = g_type_next_base (bazo_get_type (), G_TYPE_OBJECT);
+
+  g_assert (type == G_TYPE_INITIALLY_UNOWNED);
+}
+
+int
+main (int argc, char *argv[])
+{
+  g_test_init (&argc, &argv, NULL);
+
+  g_test_add_func ("/type/registration-serial", test_registration_serial);
+  g_test_add_func ("/type/interface-prerequisite", test_interface_prerequisite);
+  g_test_add_func ("/type/interface-check", test_interface_check);
+  g_test_add_func ("/type/next-base", test_next_base);
+
+  return g_test_run ();
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]