5 #include <glib-object.h>
7 #include <json-glib/json-glib.h>
9 static const gchar *complex_object = "{\"depth1\":[1,{\"depth2\":[3,[null,false],\"after array\"],\"value2\":true}],\"object1\":{},\"value3\":null,\"value4\":42,\"\":54}";
11 static const gchar *empty_object = "{\"a\":{}}";
13 static const gchar *reset_object = "{\"test\":\"reset\"}";
14 static const gchar *reset_array = "[\"reset\"]";
17 test_builder_complex (void)
19 JsonBuilder *builder = json_builder_new ();
21 JsonGenerator *generator;
25 json_builder_begin_object (builder);
27 json_builder_set_member_name (builder, "depth1");
28 json_builder_begin_array (builder);
29 json_builder_add_int_value (builder, 1);
31 json_builder_begin_object (builder);
33 json_builder_set_member_name (builder, "depth2");
34 json_builder_begin_array (builder);
35 json_builder_add_int_value (builder, 3);
37 json_builder_begin_array (builder);
38 json_builder_add_null_value (builder);
39 json_builder_add_boolean_value (builder, FALSE);
40 json_builder_end_array (builder);
42 json_builder_add_string_value (builder, "after array");
43 json_builder_end_array (builder); /* depth2 */
45 json_builder_set_member_name (builder, "value2");
46 json_builder_add_boolean_value (builder, TRUE);
47 json_builder_end_object (builder);
49 json_builder_end_array (builder); /* depth1 */
51 json_builder_set_member_name (builder, "object1");
52 json_builder_begin_object (builder);
53 json_builder_end_object (builder);
55 json_builder_set_member_name (builder, "value3");
56 json_builder_add_null_value (builder);
58 json_builder_set_member_name (builder, "value4");
59 json_builder_add_int_value (builder, 42);
61 json_builder_set_member_name (builder, "");
62 json_builder_add_int_value (builder, 54);
64 json_builder_end_object (builder);
66 node = json_builder_get_root (builder);
67 g_object_unref (builder);
69 generator = json_generator_new ();
70 json_generator_set_root (generator, node);
71 data = json_generator_to_data (generator, &length);
73 if (g_test_verbose ())
74 g_print ("Builder complex: '%*s'\n", (int)length, data);
76 g_assert_cmpint (length, ==, strlen (complex_object));
77 g_assert_cmpstr (data, ==, complex_object);
80 json_node_free (node);
81 g_object_unref (generator);
85 test_builder_empty (void)
87 JsonBuilder *builder = json_builder_new ();
89 JsonGenerator *generator;
93 json_builder_begin_object (builder);
95 json_builder_set_member_name (builder, "a");
97 json_builder_begin_object (builder);
98 json_builder_end_object (builder);
100 json_builder_end_object (builder);
102 node = json_builder_get_root (builder);
103 g_object_unref (builder);
105 generator = json_generator_new ();
106 json_generator_set_root (generator, node);
107 data = json_generator_to_data (generator, &length);
109 if (g_test_verbose ())
110 g_print ("Builder empty: '%*s'\n", (int)length, data);
112 g_assert_cmpint (length, ==, strlen (empty_object));
113 g_assert_cmpstr (data, ==, empty_object);
116 json_node_free (node);
117 g_object_unref (generator);
121 test_builder_reset (void)
123 JsonBuilder *builder = json_builder_new ();
124 JsonGenerator *generator = json_generator_new ();
129 json_builder_begin_object (builder);
130 json_builder_set_member_name (builder, "test");
131 json_builder_add_string_value (builder, "reset");
132 json_builder_end_object (builder);
134 node = json_builder_get_root (builder);
135 json_generator_set_root (generator, node);
136 data = json_generator_to_data (generator, &length);
137 g_assert (strncmp (data, reset_object, length) == 0);
140 json_node_free (node);
142 json_builder_reset (builder);
144 json_builder_begin_array (builder);
145 json_builder_add_string_value (builder, "reset");
146 json_builder_end_array (builder);
148 node = json_builder_get_root (builder);
149 json_generator_set_root (generator, node);
150 data = json_generator_to_data (generator, &length);
151 g_assert (strncmp (data, reset_array, length) == 0);
154 json_node_free (node);
155 g_object_unref (builder);
156 g_object_unref (generator);
163 g_test_init (&argc, &argv, NULL);
165 g_test_add_func ("/builder/complex", test_builder_complex);
166 g_test_add_func ("/builder/empty", test_builder_empty);
167 g_test_add_func ("/builder/reset", test_builder_reset);
169 return g_test_run ();