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 ();