From: Matthias Clasen Date: Wed, 29 May 2013 04:15:55 +0000 (-0400) Subject: Improve test coverage in gobject/ X-Git-Tag: 2.37.2~89 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a9abbb31924f8ae9f51c1064f88efedde7c34117;hp=3382ac99be3141e084fea888c428f5d5bf725ab7;p=platform%2Fupstream%2Fglib.git Improve test coverage in gobject/ Lines: 6631 8862 74.8 % Functions: 747 893 83.7 % --- 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 + +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 (); +}