diff options
| author | Emmanuele Bassi <ebassi@openedhand.com> | 2007-10-02 12:12:49 +0100 |
|---|---|---|
| committer | Emmanuele Bassi <ebassi@openedhand.com> | 2007-10-02 12:12:49 +0100 |
| commit | cea3f69f2cde1cb4e6ea9242f6014b31864ad80f (patch) | |
| tree | 542f4f68ace3d14935ef560210be818630e45e36 | |
| parent | 3666613e47b66d67a28bc06c6dcf678fe97eae50 (diff) | |
| download | json-glib-cea3f69f2cde1cb4e6ea9242f6014b31864ad80f.tar.gz | |
Add test case for GObject integration
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | tests/Makefile.am | 4 | ||||
| -rw-r--r-- | tests/test-06.c | 154 |
3 files changed, 159 insertions, 1 deletions
@@ -46,6 +46,8 @@ tests/test-04 tests/test-04.o tests/test-05 tests/test-05.o +tests/test-06 +tests/test-06.o .*.swp doc/reference/.libs doc/reference/html-build.stamp diff --git a/tests/Makefile.am b/tests/Makefile.am index f403f00..bb7a323 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -3,7 +3,8 @@ noinst_PROGRAMS = \ test-02 \ test-03 \ test-04 \ - test-05 + test-05 \ + test-06 INCLUDES = -I$(top_srcdir) LDADD = $(top_builddir)/json-glib/libjson-glib-1.0.la @@ -16,3 +17,4 @@ test_02_SOURCES = test-02.c test_03_SOURCES = test-03.c test_04_SOURCES = test-04.c test_05_SOURCES = test-05.c +test_06_SOURCES = test-06.c diff --git a/tests/test-06.c b/tests/test-06.c new file mode 100644 index 0000000..e33f614 --- /dev/null +++ b/tests/test-06.c @@ -0,0 +1,154 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <glib-object.h> + +#include <json-glib/json-glib.h> +#include <json-glib/json-gobject.h> + +#define TEST_TYPE_OBJECT (test_object_get_type ()) +#define TEST_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_OBJECT, TestObject)) +#define TEST_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_OBJECT)) +#define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass)) +#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT)) +#define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass)) + +typedef struct _TestObject TestObject; +typedef struct _TestObjectClass TestObjectClass; + +struct _TestObject +{ + GObject parent_instance; + + gint foo; + gboolean bar; + gchar *baz; +}; + +struct _TestObjectClass +{ + GObjectClass parent_class; +}; + +GType test_object_get_type (void); + +/*** implementation ***/ + +enum +{ + PROP_0, + + PROP_FOO, + PROP_BAR, + PROP_BAZ +}; + +G_DEFINE_TYPE (TestObject, test_object, G_TYPE_OBJECT); + +static void +test_object_finalize (GObject *gobject) +{ + g_free (TEST_OBJECT (gobject)->baz); + + G_OBJECT_CLASS (test_object_parent_class)->finalize (gobject); +} + +static void +test_object_set_property (GObject *gobject, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) + { + case PROP_FOO: + TEST_OBJECT (gobject)->foo = g_value_get_int (value); + break; + case PROP_BAR: + TEST_OBJECT (gobject)->bar = g_value_get_boolean (value); + break; + case PROP_BAZ: + g_free (TEST_OBJECT (gobject)->baz); + TEST_OBJECT (gobject)->baz = g_value_dup_string (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); + } +} + +static void +test_object_get_property (GObject *gobject, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) + { + case PROP_FOO: + g_value_set_int (value, TEST_OBJECT (gobject)->foo); + break; + case PROP_BAR: + g_value_set_boolean (value, TEST_OBJECT (gobject)->bar); + break; + case PROP_BAZ: + g_value_set_string (value, TEST_OBJECT (gobject)->baz); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); + } +} + +static void +test_object_class_init (TestObjectClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->set_property = test_object_set_property; + gobject_class->get_property = test_object_get_property; + gobject_class->finalize = test_object_finalize; + + g_object_class_install_property (gobject_class, + PROP_FOO, + g_param_spec_int ("foo", "Foo", "Foo", + 0, G_MAXINT, 42, + G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_BAR, + g_param_spec_boolean ("bar", "Bar", "Bar", + FALSE, + G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_BAZ, + g_param_spec_string ("baz", "Baz", "Baz", + NULL, + G_PARAM_READWRITE)); +} + +static void +test_object_init (TestObject *object) +{ + object->foo = 42; + object->bar = TRUE; + object->baz = g_strdup ("Test"); +} + +int +main (int argc, char *argvp[]) +{ + TestObject *object; + gchar *data; + gsize len; + + g_type_init (); + + object = g_object_new (TEST_TYPE_OBJECT, NULL); + data = json_serialize_gobject (G_OBJECT (object), &len); + + g_print ("*** TestObject (len:%d) ***\n%s\n", len, data); + + g_free (data); + g_object_unref (object); + + return EXIT_SUCCESS; +} |
