[glib] Improve test coverage in gobject/
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Improve test coverage in gobject/
- Date: Wed, 29 May 2013 12:38:09 +0000 (UTC)
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]