Initial Import
[profile/ivi/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],\"after array\"],\"value2\":true}],\"object1\":{}}";
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_end_array (builder);
40
41   json_builder_add_string_value (builder, "after array");
42   json_builder_end_array (builder); /* depth2 */
43
44   json_builder_set_member_name (builder, "value2");
45   json_builder_add_boolean_value (builder, TRUE);
46   json_builder_end_object (builder);
47
48   json_builder_end_array (builder); /* depth1 */
49
50   json_builder_set_member_name (builder, "object1");
51   json_builder_begin_object (builder);
52   json_builder_end_object (builder);
53
54   json_builder_end_object (builder);
55
56   node = json_builder_get_root (builder);
57   g_object_unref (builder);
58
59   generator = json_generator_new ();
60   json_generator_set_root (generator, node);
61   data = json_generator_to_data (generator, &length);
62
63   if (g_test_verbose ())
64     g_print ("Builder complex: '%*s'\n", (int)length, data);
65
66   g_assert_cmpint (length, ==, strlen (complex_object));
67   g_assert_cmpstr (data, ==, complex_object);
68
69   g_free (data);
70   json_node_free (node);
71   g_object_unref (generator);
72 }
73
74 static void
75 test_builder_empty (void)
76 {
77   JsonBuilder *builder = json_builder_new ();
78   JsonNode *node;
79   JsonGenerator *generator;
80   gsize length;
81   gchar *data;
82
83   json_builder_begin_object (builder);
84
85   json_builder_set_member_name (builder, "a");
86
87   json_builder_begin_object (builder);
88   json_builder_end_object (builder);
89
90   json_builder_end_object (builder);
91
92   node = json_builder_get_root (builder);
93   g_object_unref (builder);
94
95   generator = json_generator_new ();
96   json_generator_set_root (generator, node);
97   data = json_generator_to_data (generator, &length);
98
99   if (g_test_verbose ())
100     g_print ("Builder empty: '%*s'\n", (int)length, data);
101
102   g_assert_cmpint (length, ==, strlen (empty_object));
103   g_assert_cmpstr (data, ==, empty_object);
104
105   g_free (data);
106   json_node_free (node);
107   g_object_unref (generator);
108 }
109
110 static void
111 test_builder_reset (void)
112 {
113   JsonBuilder *builder = json_builder_new ();
114   JsonGenerator *generator = json_generator_new ();
115   JsonNode *node;
116   gsize length;
117   gchar *data;
118
119   json_builder_begin_object (builder);
120   json_builder_set_member_name (builder, "test");
121   json_builder_add_string_value (builder, "reset");
122   json_builder_end_object (builder);
123
124   node = json_builder_get_root (builder);
125   json_generator_set_root (generator, node);
126   data = json_generator_to_data (generator, &length);
127   g_assert (strncmp (data, reset_object, length) == 0);
128
129   g_free (data);
130   json_node_free (node);
131
132   json_builder_reset (builder);
133
134   json_builder_begin_array (builder);
135   json_builder_add_string_value (builder, "reset");
136   json_builder_end_array (builder);
137
138   node = json_builder_get_root (builder);
139   json_generator_set_root (generator, node);
140   data = json_generator_to_data (generator, &length);
141   g_assert (strncmp (data, reset_array, length) == 0);
142
143   g_free (data);
144   json_node_free (node);
145   g_object_unref (builder);
146   g_object_unref (generator);
147 }
148
149 int
150 main (int   argc,
151       char *argv[])
152 {
153   g_type_init ();
154   g_test_init (&argc, &argv, NULL);
155
156   g_test_add_func ("/builder/complex", test_builder_complex);
157   g_test_add_func ("/builder/complex", test_builder_empty);
158   g_test_add_func ("/builder/reset", test_builder_reset);
159
160   return g_test_run ();
161 }