11 #include <json-glib/json-glib.h>
15 static const gchar *empty_array = "[]";
16 static const gchar *empty_object = "{}";
18 static const gchar *simple_array = "[true,false,null,42,\"foo\"]";
19 static const gchar *nested_array = "[true,[false,null],42]";
21 static const gchar *simple_object = "{\"Bool1\":true,\"Bool2\":false,\"Null\":null,\"Int\":42,\"String\":\"foo\"}";
22 /* taken from the RFC 4627, Examples section */
23 static const gchar *nested_object =
28 "\"Title\":\"View from 15th Floor\","
30 "\"Url\":\"http://www.example.com/image/481989943\","
34 "\"IDs\":[116,943,234,38793]"
42 } decimal_separator[] = {
50 test_empty_array (void)
52 JsonGenerator *gen = json_generator_new ();
57 root = json_node_new (JSON_NODE_ARRAY);
58 json_node_take_array (root, json_array_new ());
60 json_generator_set_root (gen, root);
61 g_object_set (gen, "pretty", FALSE, NULL);
63 data = json_generator_to_data (gen, &len);
65 g_assert_cmpint (len, ==, strlen (empty_array));
66 g_assert_cmpstr (data, ==, empty_array);
69 json_node_free (root);
74 test_empty_object (void)
76 JsonGenerator *gen = json_generator_new ();
81 root = json_node_new (JSON_NODE_OBJECT);
82 json_node_take_object (root, json_object_new ());
84 json_generator_set_root (gen, root);
85 g_object_set (gen, "pretty", FALSE, NULL);
87 data = json_generator_to_data (gen, &len);
89 g_assert_cmpint (len, ==, strlen (empty_object));
90 g_assert_cmpstr (data, ==, empty_object);
93 json_node_free (root);
98 test_simple_array (void)
100 JsonGenerator *generator = json_generator_new ();
106 root = json_node_new (JSON_NODE_ARRAY);
107 array = json_array_sized_new (5);
109 json_array_add_boolean_element (array, TRUE);
110 json_array_add_boolean_element (array, FALSE);
111 json_array_add_null_element (array);
112 json_array_add_int_element (array, 42);
113 json_array_add_string_element (array, "foo");
115 json_node_take_array (root, array);
116 json_generator_set_root (generator, root);
118 g_object_set (generator, "pretty", FALSE, NULL);
119 data = json_generator_to_data (generator, &len);
121 if (g_test_verbose ())
122 g_print ("checking simple array `%s' (expected: %s)\n",
126 g_assert_cmpint (len, ==, strlen (simple_array));
127 g_assert_cmpstr (data, ==, simple_array);
130 json_node_free (root);
131 g_object_unref (generator);
135 test_nested_array (void)
137 JsonGenerator *generator = json_generator_new ();
139 JsonArray *array, *nested;
143 root = json_node_new (JSON_NODE_ARRAY);
144 array = json_array_sized_new (3);
146 json_array_add_boolean_element (array, TRUE);
149 nested = json_array_sized_new (2);
151 json_array_add_boolean_element (nested, FALSE);
152 json_array_add_null_element (nested);
154 json_array_add_array_element (array, nested);
157 json_array_add_int_element (array, 42);
159 json_node_take_array (root, array);
160 json_generator_set_root (generator, root);
162 g_object_set (generator, "pretty", FALSE, NULL);
163 data = json_generator_to_data (generator, &len);
165 g_assert_cmpint (len, ==, strlen (nested_array));
166 g_assert_cmpstr (data, ==, nested_array);
169 json_node_free (root);
170 g_object_unref (generator);
174 test_simple_object (void)
176 JsonGenerator *generator = json_generator_new ();
182 root = json_node_new (JSON_NODE_OBJECT);
183 object = json_object_new ();
185 json_object_set_boolean_member (object, "Bool1", TRUE);
186 json_object_set_boolean_member (object, "Bool2", FALSE);
187 json_object_set_null_member (object, "Null");
188 json_object_set_int_member (object, "Int", 42);
189 json_object_set_string_member (object, "String", "foo");
191 json_node_take_object (root, object);
192 json_generator_set_root (generator, root);
194 g_object_set (generator, "pretty", FALSE, NULL);
195 data = json_generator_to_data (generator, &len);
197 if (g_test_verbose ())
198 g_print ("checking simple object `%s' (expected: %s)\n",
202 g_assert_cmpint (len, ==, strlen (simple_object));
203 g_assert_cmpstr (data, ==, simple_object);
206 json_node_free (root);
207 g_object_unref (generator);
211 test_nested_object (void)
213 JsonGenerator *generator = json_generator_new ();
215 JsonObject *object, *nested;
220 root = json_node_new (JSON_NODE_OBJECT);
221 object = json_object_new ();
223 json_object_set_int_member (object, "Width", 800);
224 json_object_set_int_member (object, "Height", 600);
225 json_object_set_string_member (object, "Title", "View from 15th Floor");
228 nested = json_object_new ();
230 json_object_set_string_member (nested, "Url", "http://www.example.com/image/481989943");
231 json_object_set_int_member (nested, "Height", 125);
232 json_object_set_string_member (nested, "Width", "100");
234 json_object_set_object_member (object, "Thumbnail", nested);
238 array = json_array_new ();
240 json_array_add_int_element (array, 116);
241 json_array_add_int_element (array, 943);
242 json_array_add_int_element (array, 234);
243 json_array_add_int_element (array, 38793);
245 json_object_set_array_member (object, "IDs", array);
248 nested = json_object_new ();
249 json_object_set_object_member (nested, "Image", object);
251 json_node_take_object (root, nested);
252 json_generator_set_root (generator, root);
254 g_object_set (generator, "pretty", FALSE, NULL);
255 data = json_generator_to_data (generator, &len);
257 if (g_test_verbose ())
258 g_print ("checking nested object `%s' (expected: %s)\n",
262 g_assert_cmpint (len, ==, strlen (nested_object));
263 g_assert_cmpstr (data, ==, nested_object);
266 json_node_free (root);
267 g_object_unref (generator);
271 test_decimal_separator (void)
273 JsonNode *node = json_node_new (JSON_NODE_VALUE);
274 JsonGenerator *generator = json_generator_new ();
278 json_node_set_double (node, 3.14);
280 json_generator_set_root (generator, node);
282 old_locale = setlocale (LC_NUMERIC, NULL);
284 for (i = 0; i < G_N_ELEMENTS (decimal_separator); i++)
286 gchar *str, *expected;
288 setlocale (LC_NUMERIC, decimal_separator[i].lang);
290 str = json_generator_to_data (generator, NULL);
292 if (g_test_verbose ())
293 g_print ("%s: value: %.2f - string: '%s'\n",
295 json_node_get_double (node),
298 g_assert (str != NULL);
299 expected = strstr (str, decimal_separator[i].sep);
300 if (decimal_separator[i].matches)
301 g_assert (expected != NULL);
303 g_assert (expected == NULL);
308 setlocale (LC_NUMERIC, old_locale);
310 g_object_unref (generator);
311 json_node_free (node);
319 g_test_init (&argc, &argv, NULL);
321 g_test_add_func ("/generator/empty-array", test_empty_array);
322 g_test_add_func ("/generator/empty-object", test_empty_object);
323 g_test_add_func ("/generator/simple-array", test_simple_array);
324 g_test_add_func ("/generator/nested-array", test_nested_array);
325 g_test_add_func ("/generator/simple-object", test_simple_object);
326 g_test_add_func ("/generator/nested-object", test_nested_object);
327 g_test_add_func ("/generator/decimal-separator", test_decimal_separator);
329 return g_test_run ();