summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@openedhand.com>2008-04-03 16:32:53 +0100
committerEmmanuele Bassi <ebassi@openedhand.com>2008-04-03 16:32:53 +0100
commit4e826d9f209a8f68023bae54c91b2bbbb202a54a (patch)
treecf321bdd6a642cc9c542a95fc9cfc5cee4cb16c9
parent98b6e5e2f151c4ee800754675bf01e585fee850b (diff)
parent2a579b51f38df1c009201703279a3e6cb4f57eea (diff)
downloadjson-glib-4e826d9f209a8f68023bae54c91b2bbbb202a54a.tar.gz
Merge branch 'test-framework'
-rw-r--r--.gitignore35
-rw-r--r--Makefile.am6
-rw-r--r--Makefile.decl61
-rw-r--r--configure.ac3
-rw-r--r--contrib/Makefile.am4
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/reference/Makefile.am1
-rw-r--r--json-glib/Makefile.am9
-rw-r--r--json-glib/tests/Makefile.am24
-rw-r--r--json-glib/tests/array-test.c62
-rw-r--r--json-glib/tests/node-test.c71
-rw-r--r--json-glib/tests/object-test.c62
-rw-r--r--tests/Makefile.am61
-rw-r--r--tests/test-01.c31
-rw-r--r--tests/test-02.c225
-rw-r--r--tests/test-03.c214
-rw-r--r--tests/test-04.c238
-rw-r--r--tests/test-05.c227
-rw-r--r--tests/test-generator.c399
-rw-r--r--tests/test-parser.c456
-rw-r--r--tests/test-serialize-complex.c (renamed from tests/test-07.c)29
-rw-r--r--tests/test-serialize-full.c (renamed from tests/test-08.c)56
-rw-r--r--tests/test-serialize-simple.c (renamed from tests/test-06.c)29
23 files changed, 1284 insertions, 1021 deletions
diff --git a/.gitignore b/.gitignore
index eff5047..141fd79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,28 +30,31 @@ json-glib/json-parser.lo
json-glib/json-version.h
json-glib/libjson-glib-1.0.la
json-glib/stamp-json-marshal.h
+json-glib/tests/.deps
+json-glib/tests/.libs
+json-glib/tests/array-test
+json-glib/tests/array-test.o
+json-glib/tests/object-test
+json-glib/tests/object-test.o
+json-glib/tests/node-test
+json-glib/tests/node-test.o
libtool
ltmain.sh
missing
stamp-h1
+test-report.xml
tests/.deps
tests/.libs
-tests/test-01
-tests/test-01.o
-tests/test-02
-tests/test-02.o
-tests/test-03
-tests/test-03.o
-tests/test-04
-tests/test-04.o
-tests/test-05
-tests/test-05.o
-tests/test-06
-tests/test-06.o
-tests/test-07
-tests/test-07.o
-tests/test-08
-tests/test-08.o
+tests/test-parser
+tests/test-parser.o
+tests/test-generator
+tests/test-generator.o
+tests/test-serialize-simple
+tests/test-serialize-simple.o
+tests/test-serialize-complex
+tests/test-serialize-complex.o
+tests/test-serialize-full
+tests/test-serialize-full.o
.*.swp
doc/reference/.libs
doc/reference/html-build.stamp
diff --git a/Makefile.am b/Makefile.am
index bea79c6..c71d12f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,5 @@
+include $(top_srcdir)/Makefile.decl
+
SUBDIRS = json-glib doc tests
if HAVE_VALA
@@ -14,9 +16,9 @@ json-glib-1.0.pc: json-glib.pc
pkgconfig_DATA = $(pcfiles)
pkgconfigdir = $(libdir)/pkgconfig
-EXTRA_DIST = json-glib.pc.in
+EXTRA_DIST += json-glib.pc.in
-CLEANFILES = $(pcfiles)
+CLEANFILES = $(pcfiles) test-report.xml
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-maintainer-flags
diff --git a/Makefile.decl b/Makefile.decl
new file mode 100644
index 0000000..a01d1b0
--- /dev/null
+++ b/Makefile.decl
@@ -0,0 +1,61 @@
+# JSON-GLib - JSON reader and writer library
+
+GTESTER = gtester
+GTESTER_REPORT = gtester-report
+
+# initialize variables for unconditional += appending
+EXTRA_DIST =
+TEST_PROGS =
+
+### testing rules
+
+# test: run all tests in cwd and subdirs
+test: ${TEST_PROGS}
+ @test -z "${TEST_PROGS}" || ${GTESTER} --verbose ${TEST_PROGS}
+ @ for subdir in $(SUBDIRS) . ; do \
+ test "$$subdir" = "." -o "$$subdir" = "po" || \
+ ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
+ done
+# test-report: run tests in subdirs and generate report
+# perf-report: run tests in subdirs with -m perf and generate report
+# full-report: like test-report: with -m perf and -m slow
+test-report perf-report full-report: ${TEST_PROGS}
+ @test -z "${TEST_PROGS}" || { \
+ case $@ in \
+ test-report) test_options="-k";; \
+ perf-report) test_options="-k -m=perf";; \
+ full-report) test_options="-k -m=perf -m=slow";; \
+ esac ; \
+ if test -z "$$GTESTER_LOGDIR" ; then \
+ ${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
+ elif test -n "${TEST_PROGS}" ; then \
+ ${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
+ fi ; \
+ }
+ @ ignore_logdir=true ; \
+ if test -z "$$GTESTER_LOGDIR" ; then \
+ GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
+ ignore_logdir=false ; \
+ fi ; \
+ for subdir in $(SUBDIRS) . ; do \
+ test "$$subdir" = "." -o "$$subdir" = "po" || \
+ ( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
+ done ; \
+ $$ignore_logdir || { \
+ echo '<?xml version="1.0"?>' > $@.xml ; \
+ echo '<report-collection>' >> $@.xml ; \
+ echo '<info>' >> $@.xml ; \
+ echo ' <package>$(PACKAGE)</package>' >> $@.xml ; \
+ echo ' <version>$(VERSION)</version>' >> $@.xml ; \
+ echo '</info>' >> $@.xml ; \
+ for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
+ sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
+ done ; \
+ echo >> $@.xml ; \
+ echo '</report-collection>' >> $@.xml ; \
+ rm -rf "$$GTESTER_LOGDIR"/ ; \
+ ${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
+ }
+.PHONY: test test-report perf-report full-report
+# run make test as part of make check
+check-local: test
diff --git a/configure.ac b/configure.ac
index a5eb9f5..5a9960a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,7 +15,7 @@ m4_define([lt_revision], [json_interface_age])
m4_define([lt_age],
[m4_eval(json_binary_age - json_interface_age)])
-m4_define([glib_req_version], [2.12])
+m4_define([glib_req_version], [2.15])
AC_PREREQ(2.59)
AC_INIT([json-glib], [json_version], [], [json-glib])
@@ -113,6 +113,7 @@ AC_CONFIG_FILES([
Makefile
json-glib/Makefile
json-glib/json-version.h
+ json-glib/tests/Makefile
tests/Makefile
doc/Makefile
doc/reference/Makefile
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index 33325ba..8b1c468 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -1,4 +1,6 @@
+include $(top_srcdir)/Makefile.decl
+
vapidir = @VAPI_DIR@
vapi_DATA = json-glib-1.0.vapi
-EXTRA_DIST = json-test.vala
+EXTRA_DIST += json-test.vala
diff --git a/doc/Makefile.am b/doc/Makefile.am
index f3ddc22..3fe3167 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1 +1,3 @@
+include $(top_srcdir)/Makefile.decl
+
SUBDIRS = reference
diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
index 46afe38..9d22407 100644
--- a/doc/reference/Makefile.am
+++ b/doc/reference/Makefile.am
@@ -1,4 +1,5 @@
## Process this file with automake to produce Makefile.in
+include $(top_srcdir)/Makefile.decl
# We require automake 1.6 at least.
AUTOMAKE_OPTIONS = 1.6
diff --git a/json-glib/Makefile.am b/json-glib/Makefile.am
index 3c2f403..0d3055a 100644
--- a/json-glib/Makefile.am
+++ b/json-glib/Makefile.am
@@ -1,3 +1,9 @@
+include $(top_srcdir)/Makefile.decl
+
+SUBDIRS = . tests
+
+DIST_SUBDIRS = tests
+
NULL =
INCLUDES = \
@@ -75,5 +81,6 @@ CLEANFILES = $(STAMP_FILES) $(BUILT_SOURCES)
DISTCLEANFILES = json-version.h
-EXTRA_DIST = json-version.h.in json-glib.h json-marshal.list
+EXTRA_DIST += json-version.h.in json-glib.h json-marshal.list
+TESTS_ENVIRONMENT = srcdir="$(srcdir)" json_all_c_sources="$(source_c)"
diff --git a/json-glib/tests/Makefile.am b/json-glib/tests/Makefile.am
new file mode 100644
index 0000000..31e46d4
--- /dev/null
+++ b/json-glib/tests/Makefile.am
@@ -0,0 +1,24 @@
+include $(top_srcdir)/Makefile.decl
+
+INCLUDES = \
+ -g \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/json-glib \
+ $(JSON_DEBUG_CFLAGS) \
+ $(JSON_CFLAGS)
+
+noinst_PROGRAMS = $(TEST_PROGS)
+progs_ldadd = $(top_builddir)/json-glib/libjson-glib-1.0.la
+
+TEST_PROGS += array-test
+array_test_SOURCES = array-test.c
+array_test_LDADD = $(progs_ldadd)
+
+TEST_PROGS += object-test
+object_test_SOURCES = object-test.c
+object_test_LDADD = $(progs_ldadd)
+
+TEST_PROGS += node-test
+node_test_SOURCES = node-test.c
+node_test_LDADD = $(progs_ldadd)
+
diff --git a/json-glib/tests/array-test.c b/json-glib/tests/array-test.c
new file mode 100644
index 0000000..f091ecd
--- /dev/null
+++ b/json-glib/tests/array-test.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <json-glib/json-types.h>
+
+static void
+test_empty_array (void)
+{
+ JsonArray *array = json_array_new ();
+
+ g_assert_cmpint (json_array_get_length (array), ==, 0);
+ g_assert (json_array_get_elements (array) == NULL);
+
+ json_array_unref (array);
+}
+
+static void
+test_add_element (void)
+{
+ JsonArray *array = json_array_new ();
+ JsonNode *node = json_node_new (JSON_NODE_NULL);
+
+ g_assert_cmpint (json_array_get_length (array), ==, 0);
+
+ json_array_add_element (array, node);
+ g_assert_cmpint (json_array_get_length (array), ==, 1);
+
+ node = json_array_get_element (array, 0);
+ g_assert_cmpint (JSON_NODE_TYPE (node), ==, JSON_NODE_NULL);
+
+ json_array_unref (array);
+}
+
+static void
+test_remove_element (void)
+{
+ JsonArray *array = json_array_new ();
+ JsonNode *node = json_node_new (JSON_NODE_NULL);
+
+ json_array_add_element (array, node);
+
+ json_array_remove_element (array, 0);
+ g_assert_cmpint (json_array_get_length (array), ==, 0);
+
+ json_array_unref (array);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/array/empty-array", test_empty_array);
+ g_test_add_func ("/array/add-element", test_add_element);
+ g_test_add_func ("/array/remove-element", test_remove_element);
+
+ return g_test_run ();
+}
diff --git a/json-glib/tests/node-test.c b/json-glib/tests/node-test.c
new file mode 100644
index 0000000..70025cd
--- /dev/null
+++ b/json-glib/tests/node-test.c
@@ -0,0 +1,71 @@
+#include <glib/gtestutils.h>
+#include <json-glib/json-types.h>
+#include <string.h>
+
+static void
+test_copy (void)
+{
+ JsonNode *node = json_node_new (JSON_NODE_NULL);
+ JsonNode *copy = json_node_copy (node);
+
+ g_assert_cmpint (node->type, ==, copy->type);
+ g_assert_cmpint (json_node_get_value_type (node), ==, json_node_get_value_type (copy));
+ g_assert_cmpstr (json_node_type_name (node), ==, json_node_type_name (copy));
+
+ json_node_free (copy);
+ json_node_free (node);
+}
+
+static void
+test_null (void)
+{
+ JsonNode *node = json_node_new (JSON_NODE_NULL);
+
+ g_assert_cmpint (node->type, ==, JSON_NODE_NULL);
+ g_assert_cmpint (json_node_get_value_type (node), ==, G_TYPE_INVALID);
+ g_assert_cmpstr (json_node_type_name (node), ==, "NULL");
+
+ json_node_free (node);
+}
+
+static void
+test_value (void)
+{
+ JsonNode *node = json_node_new (JSON_NODE_VALUE);
+ GValue value = { 0, };
+ GValue check = { 0, };
+
+ g_assert_cmpint (JSON_NODE_TYPE (node), ==, JSON_NODE_VALUE);
+
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, 42);
+
+ g_assert_cmpint (G_VALUE_TYPE (&value), ==, G_TYPE_INT);
+ g_assert_cmpint (g_value_get_int (&value), ==, 42);
+
+ json_node_set_value (node, &value);
+ json_node_get_value (node, &check);
+
+ g_assert_cmpint (G_VALUE_TYPE (&value), ==, G_VALUE_TYPE (&check));
+ g_assert_cmpint (g_value_get_int (&value), ==, g_value_get_int (&check));
+ g_assert_cmpint (G_VALUE_TYPE (&check), ==, G_TYPE_INT);
+ g_assert_cmpint (g_value_get_int (&check), ==, 42);
+
+ g_value_unset (&value);
+ g_value_unset (&check);
+ json_node_free (node);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/nodes/null-node", test_null);
+ g_test_add_func ("/nodes/copy-node", test_copy);
+ g_test_add_func ("/nodes/value", test_value);
+
+ return g_test_run ();
+}
diff --git a/json-glib/tests/object-test.c b/json-glib/tests/object-test.c
new file mode 100644
index 0000000..34d6539
--- /dev/null
+++ b/json-glib/tests/object-test.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <json-glib/json-types.h>
+
+static void
+test_empty_object (void)
+{
+ JsonObject *object = json_object_new ();
+
+ g_assert_cmpint (json_object_get_size (object), ==, 0);
+ g_assert (json_object_get_members (object) == NULL);
+
+ json_object_unref (object);
+}
+
+static void
+test_add_member (void)
+{
+ JsonObject *object = json_object_new ();
+ JsonNode *node = json_node_new (JSON_NODE_NULL);
+
+ g_assert_cmpint (json_object_get_size (object), ==, 0);
+
+ json_object_add_member (object, "Null", node);
+ g_assert_cmpint (json_object_get_size (object), ==, 1);
+
+ node = json_object_get_member (object, "Null");
+ g_assert_cmpint (JSON_NODE_TYPE (node), ==, JSON_NODE_NULL);
+
+ json_object_unref (object);
+}
+
+static void
+test_remove_member (void)
+{
+ JsonObject *object = json_object_new ();
+ JsonNode *node = json_node_new (JSON_NODE_NULL);
+
+ json_object_add_member (object, "Null", node);
+
+ json_object_remove_member (object, "Null");
+ g_assert_cmpint (json_object_get_size (object), ==, 0);
+
+ json_object_unref (object);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/object/empty-object", test_empty_object);
+ g_test_add_func ("/object/add-member", test_add_member);
+ g_test_add_func ("/object/remove-member", test_remove_member);
+
+ return g_test_run ();
+}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2310eaa..2ffac99 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,24 +1,37 @@
-noinst_PROGRAMS = \
- test-01 \
- test-02 \
- test-03 \
- test-04 \
- test-05 \
- test-06 \
- test-07 \
- test-08
-
-INCLUDES = -I$(top_srcdir)
-LDADD = $(top_builddir)/json-glib/libjson-glib-1.0.la
-
-AM_CFLAGS = $(JSON_CFLAGS)
-AM_LDFLAGS = $(JSON_LIBS)
-
-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
-test_06_SOURCES = test-06.c
-test_07_SOURCES = test-07.c
-test_08_SOURCES = test-08.c
+include $(top_srcdir)/Makefile.decl
+
+NULL =
+
+noinst_PROGRAMS = $(TEST_PROGS)
+
+INCLUDES = -I$(top_srcdir) $(JSON_CFLAGS)
+progs_ldadd = $(top_builddir)/json-glib/libjson-glib-1.0.la $(JSON_LIBS)
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/json-glib \
+ $(JSON_DEBUG_CFLAGS)
+
+AM_CFLAGS = -g
+
+TESTS_ENVIRONMENT = srcdir=$(srcdir)
+
+TEST_PROGS += test-parser
+test_parser_SOURCES = test-parser.c
+test_parser_LDADD = $(progs_ldadd)
+
+TEST_PROGS += test-generator
+test_generator_SOURCES = test-generator.c
+test_generator_LDADD = $(progs_ldadd)
+
+TEST_PROGS += test-serialize-simple
+test_serialize_simple_SOURCES = test-serialize-simple.c
+test_serialize_simple_LDADD = $(progs_ldadd)
+
+TEST_PROGS += test-serialize-complex
+test_serialize_complex_SOURCES = test-serialize-complex.c
+test_serialize_complex_LDADD = $(progs_ldadd)
+
+TEST_PROGS += test-serialize-full
+test_serialize_full_SOURCES = test-serialize-full.c
+test_serialize_full_LDADD = $(progs_ldadd)
diff --git a/tests/test-01.c b/tests/test-01.c
deleted file mode 100644
index 543803e..0000000
--- a/tests/test-01.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <json-glib/json-glib.h>
-
-static const gchar *test_empty = "";
-
-int
-main (int argc, char *argv[])
-{
- JsonParser *parser;
- GError *error = NULL;
-
- g_type_init ();
-
- parser = json_parser_new ();
- if (!json_parser_load_from_data (parser, test_empty, -1, &error))
- {
- g_print ("Error: %s\n", error->message);
- g_error_free (error);
- g_object_unref (parser);
-
- return EXIT_FAILURE;
- }
-
- g_assert (NULL == json_parser_get_root (parser));
-
- g_object_unref (parser);
-
- return EXIT_SUCCESS;
-}
diff --git a/tests/test-02.c b/tests/test-02.c
deleted file mode 100644
index 46938ef..0000000
--- a/tests/test-02.c
+++ /dev/null
@@ -1,225 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <json-glib/json-glib.h>
-
-static const gchar *test_arrays[] = {
- "[ ]",
- "[ true ]",
- "[ true, false, null ]",
- "[ 1, 2, 3.14, \"test\" ]",
- "[ 42, [ ], null ]",
- "[ [ ], [ true, [ true ] ] ]",
- "[ [ false, true, 42 ], [ true, false, 3.14 ], \"test\" ]",
- "[ true, { } ]",
- "[ false, { \"test\" : 42 } ]",
- "var test = [ false, false, true ]",
- "var test = [ true, 42 ];",
-};
-
-static guint n_test_arrays = G_N_ELEMENTS (test_arrays);
-
-static void print_array (gint indent, JsonArray *array);
-static void print_value (gint indent, JsonNode *node);
-static void print_object (gint indent, JsonObject *object);
-
-static void
-print_value (gint indent,
- JsonNode *node)
-{
- gint j;
- gchar indent_str[80];
- GValue value = { 0, };
-
- for (j = 0; j < indent; j++)
- indent_str[j] = ' ';
-
- indent_str[j] = '\0';
-
- json_node_get_value (node, &value);
-
- switch (G_VALUE_TYPE (&value))
- {
- case G_TYPE_INT:
- g_print ("%sFound integer: `%d'\n",
- indent_str,
- g_value_get_int (&value));
- break;
-
- case G_TYPE_STRING:
- g_print ("%sFound string: `%s'\n",
- indent_str,
- g_value_get_string (&value));
- break;
-
- case G_TYPE_DOUBLE:
- g_print ("%sFound float: `%f'\n",
- indent_str,
- g_value_get_double (&value));
- break;
-
- case G_TYPE_BOOLEAN:
- g_print ("%sFound boolean: `%s'\n",
- indent_str,
- g_value_get_boolean (&value) ? "true" : "false");
- break;
-
- default:
- g_print ("%sUnknown value\n", indent_str);
- break;
- }
-
- g_value_unset (&value);
-}
-
-static void
-print_array (gint indent,
- JsonArray *array)
-{
- gint array_len = json_array_get_length (array);
- gint j;
- gchar indent_str[80];
-
- for (j = 0; j < indent; j++)
- indent_str[j] = ' ';
-
- indent_str[j] = '\0';
-
- if (array_len == 0)
- {
- g_print ("%sFound empty array\n", indent_str);
- return;
- }
-
- for (j = 0; j < array_len; j++)
- {
- JsonNode *node = json_array_get_element (array, j);
-
- switch (JSON_NODE_TYPE (node))
- {
- case JSON_NODE_ARRAY:
- g_print ("%sFound array (index: %d, len: %d)\n",
- indent_str,
- j,
- json_array_get_length (json_node_get_array (node)));
- print_array (indent + 1, json_node_get_array (node));
- break;
- case JSON_NODE_OBJECT:
- g_print ("%sFound object (index: %d, size: %d)\n",
- indent_str,
- j,
- json_object_get_size (json_node_get_object (node)));
- print_object (indent + 1, json_node_get_object (node));
- break;
- case JSON_NODE_VALUE:
- g_print ("%sFound value (index: %d)\n", indent_str, j);
- print_value (indent + 1, node);
- break;
- case JSON_NODE_NULL:
- g_print ("%sFound null (index: %d)\n", indent_str, j);
- break;
- }
- }
-}
-
-static void
-print_object (gint indent,
- JsonObject *object)
-{
- gint object_size = json_object_get_size (object);
- gint j;
- gchar indent_str[80];
- GList *members, *l;
-
- for (j = 0; j < indent; j++)
- indent_str[j] = ' ';
-
- indent_str[j] = '\0';
-
- if (object_size == 0)
- {
- g_print ("%sFound empty object\n", indent_str);
- return;
- }
-
- members = json_object_get_members (object);
- for (l = members; l; l = l->next)
- {
- const gchar *name = l->data;
- JsonNode *node = json_object_get_member (object, name);
-
- switch (JSON_NODE_TYPE (node))
- {
- case JSON_NODE_ARRAY:
- g_print ("%sFound array (member: `%s', len: %d)\n",
- indent_str,
- name,
- json_array_get_length (json_node_get_array (node)));
- print_array (indent + 1, json_node_get_array (node));
- break;
- case JSON_NODE_OBJECT:
- g_print ("%sFound object (member: `%s', size: %d)\n",
- indent_str,
- name,
- json_object_get_size (json_node_get_object (node)));
- print_object (indent + 1, json_node_get_object (node));
- break;
- case JSON_NODE_VALUE:
- g_print ("%sFound value (member: `%s')\n", indent_str, name);
- print_value (indent + 1, node);
- break;
- case JSON_NODE_NULL:
- g_print ("%sFound null (member: `%s')\n", indent_str, name);
- break;
- }
- }
-
- g_list_free (members);
-}
-
-int
-main (int argc, char *argv[])
-{
- JsonParser *parser;
- gint i;
-
- g_type_init ();
-
- parser = json_parser_new ();
-
- for (i = 0; i < n_test_arrays; i++)
- {
- GError *error = NULL;
- JsonNode *node;
- JsonArray *array;
- gchar *var_name;
-
- if (!json_parser_load_from_data (parser, test_arrays[i], -1, &error))
- {
- g_print ("* Error, test %d:\n"
- "* \t%s:\n"
- "* Message: %s\n",
- i, test_arrays[i], error->message);
- g_error_free (error);
- g_object_unref (parser);
- return EXIT_FAILURE;
- }
-
- node = json_parser_get_root (parser);
- g_assert (node != NULL);
- g_assert (JSON_NODE_TYPE (node) == JSON_NODE_ARRAY);
-
- array = json_node_get_array (node);
- g_assert (array != NULL);
-
- g_print ("*** Test %d: '%s' ***\n", i, test_arrays[i]);
- if (json_parser_has_assignment (parser, &var_name))
- g_print ("*** Test %d: assigns '%s'\n", i, var_name);
-
- print_array (1, array);
- }
-
- g_object_unref (parser);
-
- return EXIT_SUCCESS;
-}
diff --git a/tests/test-03.c b/tests/test-03.c
deleted file mode 100644
index 6dfe4f8..0000000
--- a/tests/test-03.c
+++ /dev/null
@@ -1,214 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <json-glib/json-glib.h>
-
-static const gchar *test_objects[] = {
- "{ }",
- "{ \"test\" : 42 }",
- "{ \"foo\" : \"bar\", \"baz\" : null }",
- "{ \"array\" : [ false, \"foo\" ], \"object\" : { \"foo\" : true } }"
-};
-
-static guint n_test_objects = G_N_ELEMENTS (test_objects);
-
-static void print_array (gint indent, JsonArray *array);
-static void print_value (gint indent, JsonNode *node);
-static void print_object (gint indent, JsonObject *object);
-
-static void
-print_value (gint indent,
- JsonNode *node)
-{
- gint j;
- gchar indent_str[80];
- GValue value = { 0, };
-
- for (j = 0; j < indent; j++)
- indent_str[j] = ' ';
-
- indent_str[j] = '\0';
-
- json_node_get_value (node, &value);
-
- switch (G_VALUE_TYPE (&value))
- {
- case G_TYPE_INT:
- g_print ("%sFound integer: `%d'\n",
- indent_str,
- g_value_get_int (&value));
- break;
-
- case G_TYPE_STRING:
- g_print ("%sFound string: `%s'\n",
- indent_str,
- g_value_get_string (&value));
- break;
-
- case G_TYPE_DOUBLE:
- g_print ("%sFound float: `%f'\n",
- indent_str,
- g_value_get_double (&value));
- break;
-
- case G_TYPE_BOOLEAN:
- g_print ("%sFound boolean: `%s'\n",
- indent_str,
- g_value_get_boolean (&value) ? "true" : "false");
- break;
-
- default:
- g_print ("%sUnknown value\n", indent_str);
- break;
- }
-
- g_value_unset (&value);
-}
-
-static void
-print_array (gint indent,
- JsonArray *array)
-{
- gint array_len = json_array_get_length (array);
- gint j;
- gchar indent_str[80];
-
- for (j = 0; j < indent; j++)
- indent_str[j] = ' ';
-
- indent_str[j] = '\0';
-
- if (array_len == 0)
- {
- g_print ("%sFound empty array\n", indent_str);
- return;
- }
-
- for (j = 0; j < array_len; j++)
- {
- JsonNode *node = json_array_get_element (array, j);
-
- switch (JSON_NODE_TYPE (node))
- {
- case JSON_NODE_ARRAY:
- g_print ("%sFound array (index: %d, len: %d)\n",
- indent_str,
- j,
- json_array_get_length (json_node_get_array (node)));
- print_array (indent + 1, json_node_get_array (node));
- break;
- case JSON_NODE_OBJECT:
- g_print ("%sFound object (index: %d, size: %d)\n",
- indent_str,
- j,
- json_object_get_size (json_node_get_object (node)));
- print_object (indent + 1, json_node_get_object (node));
- break;
- case JSON_NODE_VALUE:
- g_print ("%sFound value (index: %d)\n", indent_str, j);
- print_value (indent + 1, node);
- break;
- case JSON_NODE_NULL:
- g_print ("%sFound null (index: %d)\n", indent_str, j);
- break;
- }
- }
-}
-
-static void
-print_object (gint indent,
- JsonObject *object)
-{
- gint object_size = json_object_get_size (object);
- gint j;
- gchar indent_str[80];
- GList *members, *l;
-
- for (j = 0; j < indent; j++)
- indent_str[j] = ' ';
-
- indent_str[j] = '\0';
-
- if (object_size == 0)
- {
- g_print ("%sFound empty object\n", indent_str);
- return;
- }
-
- members = json_object_get_members (object);
- for (l = members; l; l = l->next)
- {
- const gchar *name = l->data;
- JsonNode *node = json_object_get_member (object, name);
-
- switch (JSON_NODE_TYPE (node))
- {
- case JSON_NODE_ARRAY:
- g_print ("%sFound array (member: `%s', len: %d)\n",
- indent_str,
- name,
- json_array_get_length (json_node_get_array (node)));
- print_array (indent + 1, json_node_get_array (node));
- break;
- case JSON_NODE_OBJECT:
- g_print ("%sFound object (member: `%s', size: %d)\n",
- indent_str,
- name,
- json_object_get_size (json_node_get_object (node)));
- print_object (indent + 1, json_node_get_object (node));
- break;
- case JSON_NODE_VALUE:
- g_print ("%sFound value (member: `%s')\n", indent_str, name);
- print_value (indent + 1, node);
- break;
- case JSON_NODE_NULL:
- g_print ("%sFound null (member: `%s')\n", indent_str, name);
- break;
- }
- }
-
- g_list_free (members);
-}
-
-int
-main (int argc, char *argv[])
-{
- JsonParser *parser;
- gint i;
-
- g_type_init ();
-
- parser = json_parser_new ();
-
- for (i = 0; i < n_test_objects; i++)
- {
- GError *error = NULL;
- JsonNode *node;
- JsonObject *object;
-
- if (!json_parser_load_from_data (parser, test_objects[i], -1, &error))
- {
- g_print ("* Error, test %d:\n"
- "* \t%s:\n"
- "* Message: %s\n",
- i, test_objects[i], error->message);
- g_error_free (error);
- g_object_unref (parser);
- return EXIT_FAILURE;
- }
-
- node = json_parser_get_root (parser);
- g_assert (node != NULL);
- g_assert (JSON_NODE_TYPE (node) == JSON_NODE_OBJECT);
-
- object = json_node_get_object (node);
- g_assert (object != NULL);
-
- g_print ("*** Test %d: '%s' ***\n", i, test_objects[i]);
- print_object (1, object);
- }
-
- g_object_unref (parser);
-
- return EXIT_SUCCESS;
-}
diff --git a/tests/test-04.c b/tests/test-04.c
deleted file mode 100644
index b3b73b6..0000000
--- a/tests/test-04.c
+++ /dev/null
@@ -1,238 +0,0 @@
-#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_ARRAY);
- json_node_take_array (root, json_array_new ());
-
- json_generator_set_root (generator, root);
-
- g_object_set (generator, "pretty", FALSE, NULL);
- data = json_generator_to_data (generator, &len);
- g_print ("*** Empty array (len:%d): `%s'\n", len, data);
-
- g_free (data);
-
- json_node_free (root);
-}
-
-static void
-test_simple (JsonGenerator *generator)
-{
- JsonNode *root, *val;
- JsonArray *array;
- GValue value = { 0, };
- gchar *data;
- gsize len;
-
- root = json_node_new (JSON_NODE_ARRAY);
- array = json_array_sized_new (6);
-
- 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_array_add_element (array, 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_array_add_element (array, val);
- g_value_unset (&value);
-
- val = json_node_new (JSON_NODE_NULL);
- json_array_add_element (array, 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_array_add_element (array, 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_array_add_element (array, 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_array_add_element (array, val);
- g_value_unset (&value);
-
- json_node_take_array (root, array);
- json_generator_set_root (generator, root);
-
- g_object_set (generator, "pretty", FALSE, NULL);
- data = json_generator_to_data (generator, &len);
- g_print ("*** Simple array (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 array (pretty, len:%d):\n%s\n", len, data);
- g_free (data);
-
- json_node_free (root);
-}
-
-static void
-test_nested (JsonGenerator *generator)
-{
- JsonNode *root, *val, *nested_val;
- JsonArray *array, *nested;
- GValue value = { 0, };
- gchar *data;
- gsize len;
-
- root = json_node_new (JSON_NODE_ARRAY);
- array = json_array_sized_new (3);
-
- 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_array_add_element (array, val);
- g_value_unset (&value);
-
- {
- val = json_node_new (JSON_NODE_ARRAY);
- nested = json_array_new ();
-
- nested_val = json_node_new (JSON_NODE_VALUE);
- g_value_init (&value, G_TYPE_BOOLEAN);
- g_value_set_boolean (&value, FALSE);
- json_node_set_value (nested_val, &value);
- json_array_add_element (nested, nested_val);
- g_value_unset (&value);
-
- nested_val = json_node_new (JSON_NODE_NULL);
- json_array_add_element (nested, nested_val);
-
- json_node_take_array (val, nested);
- json_array_add_element (array, 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_array_add_element (array, val);
- g_value_unset (&value);
-
- json_node_take_array (root, array);
- json_generator_set_root (generator, root);
-
- g_object_set (generator, "pretty", FALSE, NULL);
- data = json_generator_to_data (generator, &len);
- g_print ("*** Nested array (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 array (pretty, len:%d):\n%s\n", len, data);
- g_free (data);
-
- json_node_free (root);
-}
-
-static void
-test_object (JsonGenerator *generator)
-{
- JsonNode *root, *val, *nested_val;
- JsonArray *array;
- JsonObject *nested;
- GValue value = { 0, };
- gchar *data;
- gsize len;
-
- root = json_node_new (JSON_NODE_ARRAY);
- array = json_array_sized_new (3);
-
- 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_array_add_element (array, val);
- g_value_unset (&value);
-
- {
- 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_BOOLEAN);
- g_value_set_boolean (&value, FALSE);
- json_node_set_value (nested_val, &value);
- json_object_add_member (nested, "foo", nested_val);
- g_value_unset (&value);
-
- nested_val = json_node_new (JSON_NODE_NULL);
- json_object_add_member (nested, "bar", nested_val);
-
- json_node_take_object (val, nested);
- json_array_add_element (array, 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_INT);
- g_value_set_int (&value, 42);
- json_node_set_value (nested_val, &value);
- json_object_add_member (nested, "baz", nested_val);
- g_value_unset (&value);
-
- json_node_take_object (val, nested);
- json_array_add_element (array, val);
- }
-
- json_node_take_array (root, array);
- 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);
-
- json_node_free (root);
-}
-
-int
-main (int argc, char *argv[])
-{
- JsonGenerator *generator;
-
- g_type_init ();
-
- generator = json_generator_new ();
-
- test_empty (generator);
- test_simple (generator);
- test_nested (generator);
- test_object (generator);
-
- g_object_unref (generator);
-
- return EXIT_SUCCESS;
-}
diff --git a/tests/test-05.c b/tests/test-05.c
deleted file mode 100644
index abdb3cd..0000000
--- a/tests/test-05.c
+++ /dev/null
@@ -1,227 +0,0 @@
-#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);
-
- json_node_free (root);
-}
-
-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);
-
- json_node_free (root);
-}
-
-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,
- "indent", 1,
- "indent-char", '\t',
- NULL);
- data = json_generator_to_data (generator, &len);
- g_print ("*** Nested object (pretty, len:%d):\n%s\n", len, data);
- g_free (data);
-
- json_node_free (root);
-}
-
-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;
-}
diff --git a/tests/test-generator.c b/tests/test-generator.c
new file mode 100644
index 0000000..f3edda7
--- /dev/null
+++ b/tests/test-generator.c
@@ -0,0 +1,399 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <glib.h>
+
+#include <json-glib/json-glib.h>
+
+static const gchar *empty_array = "[ ]";
+static const gchar *empty_object = "{ }";
+
+static const gchar *simple_array = "[ true, false, null, 42, \"foo\" ]";
+static const gchar *nested_array = "[ true, [ false, null ], 42 ]";
+
+static const gchar *simple_object = "{ \"Bool1\" : true, \"Bool2\" : false, \"Null\" : null, \"Int\" : 42, \"String\" : \"foo\" }";
+
+static void
+test_empty_array (void)
+{
+ JsonGenerator *gen = json_generator_new ();
+ JsonNode *root;
+ gchar *data;
+ gsize len;
+
+ root = json_node_new (JSON_NODE_ARRAY);
+ json_node_take_array (root, json_array_new ());
+
+ json_generator_set_root (gen, root);
+ g_object_set (gen, "pretty", FALSE, NULL);
+
+ data = json_generator_to_data (gen, &len);
+
+ g_assert_cmpint (len, ==, strlen (empty_array));
+ g_assert_cmpstr (data, ==, empty_array);
+
+ g_free (data);
+ json_node_free (root);
+ g_object_unref (gen);
+}
+
+static void
+test_empty_object (void)
+{
+ JsonGenerator *gen = json_generator_new ();
+ 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 (gen, root);
+ g_object_set (gen, "pretty", FALSE, NULL);
+
+ data = json_generator_to_data (gen, &len);
+
+ g_assert_cmpint (len, ==, strlen (empty_object));
+ g_assert_cmpstr (data, ==, empty_object);
+
+ g_free (data);
+ json_node_free (root);
+ g_object_unref (gen);
+}
+
+static void
+test_simple_array (void)
+{
+ JsonGenerator *generator = json_generator_new ();
+ JsonNode *root, *val;
+ JsonArray *array;
+ GValue value = { 0, };
+ gchar *data;
+ gsize len;
+
+ root = json_node_new (JSON_NODE_ARRAY);
+ array = json_array_sized_new (6);
+
+ 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_array_add_element (array, 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_array_add_element (array, val);
+ g_value_unset (&value);
+
+ val = json_node_new (JSON_NODE_NULL);
+ json_array_add_element (array, 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_array_add_element (array, 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_array_add_element (array, val);
+ g_value_unset (&value);
+
+ json_node_take_array (root, array);
+ json_generator_set_root (generator, root);
+
+ g_object_set (generator, "pretty", FALSE, NULL);
+ data = json_generator_to_data (generator, &len);
+
+ if (g_test_verbose ())
+ g_print ("checking simple array `%s' (expected: %s)\n",
+ data,
+ simple_array);
+
+ g_assert_cmpint (len, ==, strlen (simple_array));
+ g_assert_cmpstr (data, ==, simple_array);
+
+ g_free (data);
+ json_node_free (root);
+ g_object_unref (generator);
+}
+
+static void
+test_nested_array (void)
+{
+ JsonGenerator *generator = json_generator_new ();
+ JsonNode *root, *val, *nested_val;
+ JsonArray *array, *nested;
+ GValue value = { 0, };
+ gchar *data;
+ gsize len;
+
+ root = json_node_new (JSON_NODE_ARRAY);
+ array = json_array_sized_new (3);
+
+ 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_array_add_element (array, val);
+ g_value_unset (&value);
+
+ {
+ val = json_node_new (JSON_NODE_ARRAY);
+ nested = json_array_new ();
+
+ nested_val = json_node_new (JSON_NODE_VALUE);
+ g_value_init (&value, G_TYPE_BOOLEAN);
+ g_value_set_boolean (&value, FALSE);
+ json_node_set_value (nested_val, &value);
+ json_array_add_element (nested, nested_val);
+ g_value_unset (&value);
+
+ nested_val = json_node_new (JSON_NODE_NULL);
+ json_array_add_element (nested, nested_val);
+
+ json_node_take_array (val, nested);
+ json_array_add_element (array, 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_array_add_element (array, val);
+ g_value_unset (&value);
+
+ json_node_take_array (root, array);
+ json_generator_set_root (generator, root);
+
+ g_object_set (generator, "pretty", FALSE, NULL);
+ data = json_generator_to_data (generator, &len);
+
+ g_assert_cmpint (len, ==, strlen (nested_array));
+ g_assert_cmpstr (data, ==, nested_array);
+
+ g_free (data);
+ json_node_free (root);
+ g_object_unref (generator);
+}
+
+static void
+test_simple_object (void)
+{
+ JsonGenerator *generator = json_generator_new ();
+ 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);
+
+ 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);
+
+ if (g_test_verbose ())
+ g_print ("checking simple array `%s' (expected: %s)\n",
+ data,
+ simple_object);
+
+ g_assert_cmpint (len, ==, strlen (simple_object));
+
+ /* we cannot compare the strings literal because JsonObject does not
+ * guarantee any ordering
+ */
+
+ g_free (data);
+ json_node_free (root);
+ g_object_unref (generator);
+}
+
+#if 0
+/* this is just overkill, but I'll add it commented out, so it
+ * can be enabled if I feel like running this just to compare
+ * the length of the strings
+ */
+static void
+test_nested_object (void)
+{
+ JsonGenerator *generator = json_generator_new ();
+ 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);
+
+ if (g_test_verbose ())
+ g_print ("checking nested object `%s' (expected: %s)\n",
+ data,
+ nested_object);
+
+ g_assert_cmpint (len, ==, strlen (nested_object));
+
+ /* we cannot compare the strings literal because JsonObject does not
+ * guarantee any ordering
+ */
+
+ g_free (data);
+ json_node_free (root);
+ g_object_unref (generator);
+}
+#endif
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/json-generator/empty-array", test_empty_array);
+ g_test_add_func ("/json-generator/empty-object", test_empty_object);
+ g_test_add_func ("/json-generator/simple-array", test_simple_array);
+ g_test_add_func ("/json-generator/nested-array", test_nested_array);
+ g_test_add_func ("/json-generator/simple-object", test_simple_object);
+
+ return g_test_run ();
+}
diff --git a/tests/test-parser.c b/tests/test-parser.c
new file mode 100644
index 0000000..f503338
--- /dev/null
+++ b/tests/test-parser.c
@@ -0,0 +1,456 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <glib.h>
+
+#include <json-glib/json-glib.h>
+
+static const gchar *test_empty_string = "";
+static const gchar *test_empty_array_string = "[ ]";
+static const gchar *test_empty_object_string = "{ }";
+
+static const struct {
+ const gchar *str;
+ gint len;
+ gint element;
+ JsonNodeType type;
+ GType gtype;
+} test_simple_arrays[] = {
+ { "[ true ]", 1, 0, JSON_NODE_VALUE, G_TYPE_BOOLEAN },
+ { "[ true, false, null ]", 3, 2, JSON_NODE_NULL, G_TYPE_INVALID },
+ { "[ 1, 2, 3.14, \"test\" ]", 4, 3, JSON_NODE_VALUE, G_TYPE_STRING }
+};
+
+static const gchar *test_nested_arrays[] = {
+ "[ 42, [ ], null ]",
+ "[ [ ], [ true, [ true ] ] ]",
+ "[ [ false, true, 42 ], [ true, false, 3.14 ], \"test\" ]",
+ "[ true, { } ]",
+ "[ false, { \"test\" : 42 } ]",
+ "[ { \"channel\" : \"/meta/connect\" } ]"
+};
+
+static const struct {
+ const gchar *str;
+ gint size;
+ const gchar *member;
+ JsonNodeType type;
+ GType gtype;
+} test_simple_objects[] = {
+ { "{ \"test\" : 42 }", 1, "test", JSON_NODE_VALUE, G_TYPE_INT },
+ { "{ \"foo\" : \"bar\", \"baz\" : null }", 2, "baz", JSON_NODE_NULL, G_TYPE_INVALID },
+ { "{ \"channel\" : \"/meta/connect\" }", 1, "channel", JSON_NODE_VALUE, G_TYPE_STRING }
+};
+
+static const gchar *test_nested_objects[] = {
+ "{ \"array\" : [ false, \"foo\" ], \"object\" : { \"foo\" : true } }"
+};
+
+static const gchar *test_assignments[] = {
+ "var test = [ false, false, true ]",
+ "var test = [ true, 42 ];",
+ "var test = { \"foo\" : false }"
+};
+
+static guint n_test_simple_arrays = G_N_ELEMENTS (test_simple_arrays);
+static guint n_test_nested_arrays = G_N_ELEMENTS (test_nested_arrays);
+static guint n_test_simple_objects = G_N_ELEMENTS (test_simple_objects);
+static guint n_test_nested_objects = G_N_ELEMENTS (test_nested_objects);
+static guint n_test_assignments = G_N_ELEMENTS (test_assignments);
+
+static void
+test_empty (void)
+{
+ JsonParser *parser;
+ GError *error = NULL;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with empty string...\n");
+
+ if (!json_parser_load_from_data (parser, test_empty_string, -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ if (g_test_verbose ())
+ g_print ("checking json_parser_get_root...\n");
+
+ g_assert (NULL == json_parser_get_root (parser));
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_empty_array (void)
+{
+ JsonParser *parser;
+ GError *error = NULL;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with empty array...\n");
+
+ if (!json_parser_load_from_data (parser, test_empty_array_string, -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ JsonNode *root;
+ JsonArray *array;
+
+ g_assert (NULL != json_parser_get_root (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking root node is an array...\n");
+ root = json_parser_get_root (parser);
+ g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY);
+
+ array = json_node_get_array (root);
+ g_assert (array != NULL);
+
+ if (g_test_verbose ())
+ g_print ("checking array is empty...\n");
+ g_assert_cmpint (json_array_get_length (array), ==, 0);
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_simple_array (void)
+{
+ gint i;
+ JsonParser *parser;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with simple arrays...\n");
+
+ for (i = 0; i < n_test_simple_arrays; i++)
+ {
+ GError *error = NULL;
+
+ if (!json_parser_load_from_data (parser, test_simple_arrays[i].str, -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ JsonNode *root, *node;
+ JsonArray *array;
+
+ g_assert (NULL != json_parser_get_root (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking root node is an array...\n");
+ root = json_parser_get_root (parser);
+ g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY);
+
+ array = json_node_get_array (root);
+ g_assert (array != NULL);
+
+ if (g_test_verbose ())
+ g_print ("checking array is of the desired length (%d)...\n",
+ test_simple_arrays[i].len);
+ g_assert_cmpint (json_array_get_length (array), ==, test_simple_arrays[i].len);
+
+ if (g_test_verbose ())
+ g_print ("checking element %d is of the desired type %s...\n",
+ test_simple_arrays[i].element,
+ g_type_name (test_simple_arrays[i].gtype));
+ node = json_array_get_element (array, test_simple_arrays[i].element);
+ g_assert (node != NULL);
+ g_assert_cmpint (JSON_NODE_TYPE (node), ==, test_simple_arrays[i].type);
+ g_assert_cmpint (json_node_get_value_type (node), ==, test_simple_arrays[i].gtype);
+ }
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_nested_array (void)
+{
+ gint i;
+ JsonParser *parser;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with nested arrays...\n");
+
+ for (i = 0; i < n_test_nested_arrays; i++)
+ {
+ GError *error = NULL;
+
+ if (!json_parser_load_from_data (parser, test_nested_arrays[i], -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ JsonNode *root;
+ JsonArray *array;
+
+ g_assert (NULL != json_parser_get_root (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking root node is an array...\n");
+ root = json_parser_get_root (parser);
+ g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_ARRAY);
+
+ array = json_node_get_array (root);
+ g_assert (array != NULL);
+
+ if (g_test_verbose ())
+ g_print ("checking array is not empty...\n");
+ g_assert_cmpint (json_array_get_length (array), >, 0);
+ }
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_empty_object (void)
+{
+ JsonParser *parser;
+ GError *error = NULL;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with empty object...\n");
+
+ if (!json_parser_load_from_data (parser, test_empty_object_string, -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ JsonNode *root;
+ JsonObject *object;
+
+ g_assert (NULL != json_parser_get_root (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking root node is an object...\n");
+ root = json_parser_get_root (parser);
+ g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT);
+
+ object = json_node_get_object (root);
+ g_assert (object != NULL);
+
+ if (g_test_verbose ())
+ g_print ("checking object is empty...\n");
+ g_assert_cmpint (json_object_get_size (object), ==, 0);
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_simple_object (void)
+{
+ gint i;
+ JsonParser *parser;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with simple objects...\n");
+
+ for (i = 0; i < n_test_simple_objects; i++)
+ {
+ GError *error = NULL;
+
+ if (!json_parser_load_from_data (parser, test_simple_objects[i].str, -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ JsonNode *root, *node;
+ JsonObject *object;
+
+ g_assert (NULL != json_parser_get_root (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking root node is an object...\n");
+ root = json_parser_get_root (parser);
+ g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT);
+
+ object = json_node_get_object (root);
+ g_assert (object != NULL);
+
+ if (g_test_verbose ())
+ g_print ("checking object is of the desired size (%d)...\n",
+ test_simple_objects[i].size);
+ g_assert_cmpint (json_object_get_size (object), ==, test_simple_objects[i].size);
+
+ if (g_test_verbose ())
+ g_print ("checking member '%s' is of the desired type %s...\n",
+ test_simple_objects[i].member,
+ g_type_name (test_simple_objects[i].gtype));
+ node = json_object_get_member (object, test_simple_objects[i].member);
+ g_assert (node != NULL);
+ g_assert_cmpint (JSON_NODE_TYPE (node), ==, test_simple_objects[i].type);
+ g_assert_cmpint (json_node_get_value_type (node), ==, test_simple_objects[i].gtype);
+ }
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_nested_object (void)
+{
+ gint i;
+ JsonParser *parser;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with nested objects...\n");
+
+ for (i = 0; i < n_test_nested_objects; i++)
+ {
+ GError *error = NULL;
+
+ if (!json_parser_load_from_data (parser, test_nested_objects[i], -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ JsonNode *root;
+ JsonObject *object;
+
+ g_assert (NULL != json_parser_get_root (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking root node is an object...\n");
+ root = json_parser_get_root (parser);
+ g_assert_cmpint (JSON_NODE_TYPE (root), ==, JSON_NODE_OBJECT);
+
+ object = json_node_get_object (root);
+ g_assert (object != NULL);
+
+ if (g_test_verbose ())
+ g_print ("checking object is not empty...\n");
+ g_assert_cmpint (json_object_get_size (object), >, 0);
+ }
+ }
+
+ g_object_unref (parser);
+}
+
+static void
+test_assignment (void)
+{
+ gint i;
+ JsonParser *parser;
+
+ parser = json_parser_new ();
+ g_assert (JSON_IS_PARSER (parser));
+
+ if (g_test_verbose ())
+ g_print ("checking json_parser_load_from_data with assignments...\n");
+
+ for (i = 0; i < n_test_assignments; i++)
+ {
+ GError *error = NULL;
+
+ if (!json_parser_load_from_data (parser, test_assignments[i], -1, &error))
+ {
+ if (g_test_verbose ())
+ g_print ("Error: %s\n", error->message);
+
+ g_error_free (error);
+ g_object_unref (parser);
+ exit (1);
+ }
+ else
+ {
+ gchar *var;
+
+ if (g_test_verbose ())
+ g_print ("checking assignment...\n");
+ g_assert (json_parser_has_assignment (parser, &var) == TRUE);
+ g_assert (var != NULL);
+
+ g_assert (NULL != json_parser_get_root (parser));
+ }
+ }
+
+ g_object_unref (parser);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/json-parser/empty-string", test_empty);
+ g_test_add_func ("/json-parser/empty-array", test_empty_array);
+ g_test_add_func ("/json-parser/simple-array", test_simple_array);
+ g_test_add_func ("/json-parser/nested-array", test_nested_array);
+ g_test_add_func ("/json-parser/empty-object", test_empty_object);
+ g_test_add_func ("/json-parser/simple-object", test_simple_object);
+ g_test_add_func ("/json-parser/nested-object", test_nested_object);
+ g_test_add_func ("/json-parser/assignment", test_assignment);
+
+ return g_test_run ();
+}
diff --git a/tests/test-07.c b/tests/test-serialize-complex.c
index 81840b4..452cd24 100644
--- a/tests/test-07.c
+++ b/tests/test-serialize-complex.c
@@ -231,22 +231,31 @@ test_object_init (TestObject *object)
object->blah.bar = object->bar;
}
-int
-main (int argc, char *argvp[])
+static void
+test_serialize (void)
{
- TestObject *object;
+ TestObject *obj = g_object_new (TEST_TYPE_OBJECT, NULL);
gchar *data;
gsize len;
- g_type_init ();
+ data = json_serialize_gobject (G_OBJECT (obj), &len);
- object = g_object_new (TEST_TYPE_OBJECT, NULL);
- data = json_serialize_gobject (G_OBJECT (object), &len);
+ g_assert_cmpint (len, >, 0);
+ if (g_test_verbose ())
+ g_print ("TestObject:\n%s\n", data);
- g_print ("*** TestObject (len:%d) ***\n%s\n", len, data);
-
g_free (data);
- g_object_unref (object);
+ g_object_unref (obj);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/serialize/gobject-boxed", test_serialize);
- return EXIT_SUCCESS;
+ return g_test_run ();
}
diff --git a/tests/test-08.c b/tests/test-serialize-full.c
index 92acbb0..eea785f 100644
--- a/tests/test-08.c
+++ b/tests/test-serialize-full.c
@@ -300,38 +300,52 @@ test_object_init (TestObject *object)
object->meh = TEST_ENUM_BAR;
}
-static const gchar var_test[] =
-"{"
-" \"foo\" : 42,"
-" \"bar\" : false,"
-" \"baz\" : \"Test\","
-" \"meh\" : \"baz\""
+static const gchar *var_test =
+"{\n"
+" \"foo\" : 42,\n"
+" \"bar\" : false,\n"
+" \"baz\" : \"hello\",\n"
+" \"meh\" : \"baz\"\n"
"}";
-int
-main (int argc, char *argvp[])
+static void
+test_deserialize (void)
{
GObject *object;
GError *error;
- g_type_init ();
-
error = NULL;
object = json_construct_gobject (TEST_TYPE_OBJECT, var_test, -1, &error);
if (error)
g_error ("*** Unable to parse buffer: %s\n", error->message);
- g_print ("*** TestObject ***\n"
- " foo: %s\n"
- " bar: %s\n"
- " baz: %s\n"
- " meh: %s\n",
- TEST_OBJECT (object)->foo == 42 ? "<true>" : "<false>",
- TEST_OBJECT (object)->bar == FALSE ? "<true>" : "<false>",
- TEST_OBJECT (object)->baz != NULL ? "<true>" : "<false>",
- TEST_OBJECT (object)->meh == TEST_ENUM_BAZ ? "<true>" : "<false>");
-
+ if (g_test_verbose ())
+ g_print ("*** TestObject ***\n"
+ " foo: %s\n"
+ " bar: %s\n"
+ " baz: %s\n"
+ " meh: %s\n",
+ TEST_OBJECT (object)->foo == 42 ? "<true>" : "<false>",
+ TEST_OBJECT (object)->bar == FALSE ? "<true>" : "<false>",
+ TEST_OBJECT (object)->baz != NULL ? "<true>" : "<false>",
+ TEST_OBJECT (object)->meh == TEST_ENUM_BAZ ? "<true>" : "<false>");
+
+ g_assert_cmpint (TEST_OBJECT (object)->foo, ==, 42);
+ g_assert_cmpint (TEST_OBJECT (object)->bar, ==, FALSE);
+ g_assert_cmpstr (TEST_OBJECT (object)->baz, ==, "hello");
+ g_assert_cmpint (TEST_OBJECT (object)->meh, ==, TEST_ENUM_BAZ);
+
g_object_unref (object);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/deserialize/json-to-gobject", test_deserialize);
- return EXIT_SUCCESS;
+ return g_test_run ();
}
diff --git a/tests/test-06.c b/tests/test-serialize-simple.c
index e33f614..3be00b5 100644
--- a/tests/test-06.c
+++ b/tests/test-serialize-simple.c
@@ -133,22 +133,31 @@ test_object_init (TestObject *object)
object->baz = g_strdup ("Test");
}
-int
-main (int argc, char *argvp[])
+static void
+test_serialize (void)
{
- TestObject *object;
+ TestObject *obj = g_object_new (TEST_TYPE_OBJECT, NULL);
gchar *data;
gsize len;
- g_type_init ();
+ data = json_serialize_gobject (G_OBJECT (obj), &len);
- object = g_object_new (TEST_TYPE_OBJECT, NULL);
- data = json_serialize_gobject (G_OBJECT (object), &len);
+ g_assert_cmpint (len, >, 0);
+ if (g_test_verbose ())
+ g_print ("TestObject:\n%s\n", data);
- g_print ("*** TestObject (len:%d) ***\n%s\n", len, data);
-
g_free (data);
- g_object_unref (object);
+ g_object_unref (obj);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_type_init ();
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/serialize/gobject", test_serialize);
- return EXIT_SUCCESS;
+ return g_test_run ();
}