summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2007-10-02 12:12:49 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2007-10-02 12:12:49 +0100
commitcea3f69f2cde1cb4e6ea9242f6014b31864ad80f (patch)
tree542f4f68ace3d14935ef560210be818630e45e36
parent3666613e47b66d67a28bc06c6dcf678fe97eae50 (diff)
downloadjson-glib-cea3f69f2cde1cb4e6ea9242f6014b31864ad80f.tar.gz
Add test case for GObject integration
-rw-r--r--.gitignore2
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/test-06.c154
3 files changed, 159 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 2eecd90..63396e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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;
+}