Imported Upstream version 1.2.4
[platform/upstream/json-glib.git] / json-glib / tests / builder.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #include <glib-object.h>
6
7 #include <json-glib/json-glib.h>
8
9 static const gchar *complex_object = "{\"depth1\":[1,{\"depth2\":[3,[null,false],\"after array\"],\"value2\":true}],\"object1\":{},\"value3\":null,\"value4\":42,\"\":54}";
10
11 static const gchar *empty_object = "{\"a\":{}}";
12
13 static const gchar *reset_object = "{\"test\":\"reset\"}";
14 static const gchar *reset_array = "[\"reset\"]";
15
16 static void
17 test_builder_complex (void)
18 {
19   JsonBuilder *builder = json_builder_new ();
20   JsonNode *node;
21   JsonGenerator *generator;
22   gsize length;
23   gchar *data;
24
25   json_builder_begin_object (builder);
26
27   json_builder_set_member_name (builder, "depth1");
28   json_builder_begin_array (builder);
29   json_builder_add_int_value (builder, 1);
30
31   json_builder_begin_object (builder);
32
33   json_builder_set_member_name (builder, "depth2");
34   json_builder_begin_array (builder);
35   json_builder_add_int_value (builder, 3);
36
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);
41
42   json_builder_add_string_value (builder, "after array");
43   json_builder_end_array (builder); /* depth2 */
44
45   json_builder_set_member_name (builder, "value2");
46   json_builder_add_boolean_value (builder, TRUE);
47   json_builder_end_object (builder);
48
49   json_builder_end_array (builder); /* depth1 */
50
51   json_builder_set_member_name (builder, "object1");
52   json_builder_begin_object (builder);
53   json_builder_end_object (builder);
54
55   json_builder_set_member_name (builder, "value3");
56   json_builder_add_null_value (builder);
57
58   json_builder_set_member_name (builder, "value4");
59   json_builder_add_int_value (builder, 42);
60
61   json_builder_set_member_name (builder, "");
62   json_builder_add_int_value (builder, 54);
63
64   json_builder_end_object (builder);
65
66   node = json_builder_get_root (builder);
67   g_object_unref (builder);
68
69   generator = json_generator_new ();
70   json_generator_set_root (generator, node);
71   data = json_generator_to_data (generator, &length);
72
73   if (g_test_verbose ())
74     g_print ("Builder complex: '%*s'\n", (int)length, data);
75
76   g_assert_cmpint (length, ==, strlen (complex_object));
77   g_assert_cmpstr (data, ==, complex_object);
78
79   g_free (data);
80   json_node_free (node);
81   g_object_unref (generator);
82 }
83
84 static void
85 test_builder_empty (void)
86 {
87   JsonBuilder *builder = json_builder_new ();
88   JsonNode *node;
89   JsonGenerator *generator;
90   gsize length;
91   gchar *data;
92
93   json_builder_begin_object (builder);
94
95   json_builder_set_member_name (builder, "a");
96
97   json_builder_begin_object (builder);
98   json_builder_end_object (builder);
99
100   json_builder_end_object (builder);
101
102   node = json_builder_get_root (builder);
103   g_object_unref (builder);
104
105   generator = json_generator_new ();
106   json_generator_set_root (generator, node);
107   data = json_generator_to_data (generator, &length);
108
109   if (g_test_verbose ())
110     g_print ("Builder empty: '%*s'\n", (int)length, data);
111
112   g_assert_cmpint (length, ==, strlen (empty_object));
113   g_assert_cmpstr (data, ==, empty_object);
114
115   g_free (data);
116   json_node_free (node);
117   g_object_unref (generator);
118 }
119
120 static void
121 test_builder_reset (void)
122 {
123   JsonBuilder *builder = json_builder_new ();
124   JsonGenerator *generator = json_generator_new ();
125   JsonNode *node;
126   gsize length;
127   gchar *data;
128
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);
133
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);
138
139   g_free (data);
140   json_node_free (node);
141
142   json_builder_reset (builder);
143
144   json_builder_begin_array (builder);
145   json_builder_add_string_value (builder, "reset");
146   json_builder_end_array (builder);
147
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);
152
153   g_free (data);
154   json_node_free (node);
155   g_object_unref (builder);
156   g_object_unref (generator);
157 }
158
159 int
160 main (int   argc,
161       char *argv[])
162 {
163   g_test_init (&argc, &argv, NULL);
164
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);
168
169   return g_test_run ();
170 }