summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2007-10-02 10:03:00 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2007-10-02 10:03:00 +0100
commit8398253c76cf5dda23891b49b1aaa49e57d95a8d (patch)
tree90d71ed3db9dce454a0f98144ba868f4e635bb2c
parent2b25dbfa802f9af6e76fbe72140b687535cae8e5 (diff)
downloadjson-glib-generator.tar.gz
Complete the tests suite with the object deserializationgenerator
Add a test unit for JSON object generation using JsonGenerator. The empty, simple (1-depth) and complex (nested object and array) cases are exercised. The complex object generation is taken from the RFC 4627, Examples section.
-rw-r--r--.gitignore2
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/test-05.c217
3 files changed, 222 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 1402f1f..a8931b3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,6 +43,8 @@ tests/test-03
tests/test-03.o
tests/test-04
tests/test-04.o
+tests/test-05
+tests/test-05.o
.*.swp
doc/reference/.libs
doc/reference/html-build.stamp
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f087f73..f403f00 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -2,7 +2,8 @@ noinst_PROGRAMS = \
test-01 \
test-02 \
test-03 \
- test-04
+ test-04 \
+ test-05
INCLUDES = -I$(top_srcdir)
LDADD = $(top_builddir)/json-glib/libjson-glib-1.0.la
@@ -14,3 +15,4 @@ test_01_SOURCES = test-01.c
test_02_SOURCES = test-02.c
test_03_SOURCES = test-03.c
test_04_SOURCES = test-04.c
+test_05_SOURCES = test-05.c
diff --git a/tests/test-05.c b/tests/test-05.c
new file mode 100644
index 0000000..b3da801
--- /dev/null
+++ b/tests/test-05.c
@@ -0,0 +1,217 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <json-glib/json-glib.h>
+
+static void
+test_empty (JsonGenerator *generator)
+{
+ JsonNode *root;
+ gchar *data;
+ gsize len;
+
+ root = json_node_new (JSON_NODE_OBJECT);
+ json_node_take_object (root, json_object_new ());
+
+ json_generator_set_root (generator, root);
+
+ g_object_set (generator, "pretty", FALSE, NULL);
+ data = json_generator_to_data (generator, &len);
+ g_print ("*** Empty object (len:%d): `%s'\n", len, data);
+
+ g_free (data);
+}
+
+static void
+test_simple (JsonGenerator *generator)
+{
+ JsonNode *root, *val;
+ JsonObject *object;
+ GValue value = { 0, };
+ gchar *data;
+ gsize len;
+
+ root = json_node_new (JSON_NODE_OBJECT);
+ object = json_object_new ();
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, TRUE);
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Bool1", val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, FALSE);
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Bool2", val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_NULL);
+ json_object_add_member (object, "Null", val);
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 42);
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Int", val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, "foo");
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "String", val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_FLOAT);
+ g_value_set_float (&value, 3.14);
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Float", val);
+ g_value_unset (&value);
+
+ json_node_take_object (root, object);
+ json_generator_set_root (generator, root);
+
+ g_object_set (generator, "pretty", FALSE, NULL);
+ data = json_generator_to_data (generator, &len);
+ g_print ("*** Simple object (len:%d): `%s'\n", len, data);
+ g_free (data);
+
+ g_object_set (generator, "pretty", TRUE, NULL);
+ data = json_generator_to_data (generator, &len);
+ g_print ("*** Simple object (pretty, len:%d):\n%s\n", len, data);
+ g_free (data);
+}
+
+static void
+test_nested (JsonGenerator *generator)
+{
+ JsonNode *root, *val, *nested_val;
+ JsonObject *object, *nested;
+ JsonArray *array;
+ GValue value = { 0, };
+ gchar *data;
+ gsize len;
+
+ root = json_node_new (JSON_NODE_OBJECT);
+ object = json_object_new ();
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, "View from 15th Floor");
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Title", val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 800);
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Width", val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 600);
+ json_node_set_value (val, &value);
+ json_object_add_member (object, "Height", val);
+ g_value_unset (&value);
+
+ {
+ val = json_node_new (JSON_NODE_ARRAY);
+ array = json_array_new ();
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 116);
+ json_node_set_value (nested_val, &value);
+ json_array_add_element (array, nested_val);
+ g_value_unset (&value);
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 943);
+ json_node_set_value (nested_val, &value);
+ json_array_add_element (array, nested_val);
+ g_value_unset (&value);
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 234);
+ json_node_set_value (nested_val, &value);
+ json_array_add_element (array, nested_val);
+ g_value_unset (&value);
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 38793);
+ json_node_set_value (nested_val, &value);
+ json_array_add_element (array, nested_val);
+ g_value_unset (&value);
+
+ json_node_take_array (val, array);
+ json_object_add_member (object, "IDs", val);
+ }
+
+ {
+ val = json_node_new (JSON_NODE_OBJECT);
+ nested = json_object_new ();
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, "http://www.example.com/image/481989943");
+ json_node_set_value (nested_val, &value);
+ json_object_add_member (nested, "Url", nested_val);
+ g_value_unset (&value);
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 125);
+ json_node_set_value (nested_val, &value);
+ json_object_add_member (nested, "Width", nested_val);
+ g_value_unset (&value);
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 100);
+ json_node_set_value (nested_val, &value);
+ json_object_add_member (nested, "Height", nested_val);
+ g_value_unset (&value);
+
+ json_node_take_object (val, nested);
+ json_object_add_member (object, "Thumbnail", val);
+ }
+
+ json_node_take_object (root, object);
+ json_generator_set_root (generator, root);
+
+ g_object_set (generator, "pretty", FALSE, NULL);
+ data = json_generator_to_data (generator, &len);
+ g_print ("*** Nested object (len:%d): `%s'\n", len, data);
+ g_free (data);
+
+ g_object_set (generator, "pretty", TRUE, NULL);
+ data = json_generator_to_data (generator, &len);
+ g_print ("*** Nested object (pretty, len:%d):\n%s\n", len, data);
+ g_free (data);
+}
+
+int
+main (int argc, char *argv[])
+{
+ JsonGenerator *generator;
+
+ g_type_init ();
+
+ generator = json_generator_new ();
+
+ test_empty (generator);
+ test_simple (generator);
+ test_nested (generator);
+
+ g_object_unref (generator);
+
+ return EXIT_SUCCESS;
+}