Imported Upstream version 0.16.0
[platform/upstream/json-glib.git] / json-glib / tests / reader.c
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #include <glib.h>
5
6 #include <json-glib/json-glib.h>
7
8 static const gchar *test_base_array_data =
9 "[ 0, true, null, \"foo\", 3.14, [ false ], { \"bar\" : 42 } ]";
10
11 static const gchar *test_base_object_data =
12 "{ \"text\" : \"hello, world!\", \"foo\" : null, \"blah\" : 47, \"double\" : 42.47 }";
13
14 static const gchar *expected_member_name[] = {
15   "text",
16   "foo",
17   "blah",
18   "double",
19 };
20
21 static void
22 test_base_object (void)
23 {
24   JsonParser *parser = json_parser_new ();
25   JsonReader *reader = json_reader_new (NULL);
26   GError *error = NULL;
27   gchar **members;
28   gsize n_members, i;
29
30   json_parser_load_from_data (parser, test_base_object_data, -1, &error);
31   g_assert (error == NULL);
32
33   json_reader_set_root (reader, json_parser_get_root (parser));
34
35   g_assert (json_reader_is_object (reader));
36   g_assert_cmpint (json_reader_count_members (reader), ==, 4);
37
38   members = json_reader_list_members (reader);
39   g_assert (members != NULL);
40
41   n_members = g_strv_length (members);
42   g_assert_cmpint (n_members, ==, json_reader_count_members (reader));
43
44   for (i = 0; i < n_members; i++)
45     g_assert_cmpstr (members[i], ==, expected_member_name[i]);
46
47   g_strfreev (members);
48
49   g_assert (json_reader_read_member (reader, "text"));
50   g_assert (json_reader_is_value (reader));
51   g_assert_cmpstr (json_reader_get_string_value (reader), ==, "hello, world!");
52   json_reader_end_member (reader);
53
54   g_assert (json_reader_read_member (reader, "foo"));
55   g_assert (json_reader_get_null_value (reader));
56   json_reader_end_member (reader);
57
58   g_assert (!json_reader_read_member (reader, "bar"));
59   g_assert (json_reader_get_error (reader) != NULL);
60   g_assert_error ((GError *) json_reader_get_error (reader),
61                   JSON_READER_ERROR,
62                   JSON_READER_ERROR_INVALID_MEMBER);
63   json_reader_end_member (reader);
64   g_assert (json_reader_get_error (reader) == NULL);
65
66   g_assert (json_reader_read_element (reader, 2));
67   g_assert_cmpstr (json_reader_get_member_name (reader), ==, "blah");
68   g_assert (json_reader_is_value (reader));
69   g_assert_cmpint (json_reader_get_int_value (reader), ==, 47);
70   json_reader_end_element (reader);
71   g_assert (json_reader_get_error (reader) == NULL);
72
73   json_reader_read_member (reader, "double");
74   g_assert_cmpfloat (json_reader_get_double_value (reader), ==, 42.47);
75   json_reader_end_element (reader);
76
77   g_object_unref (reader);
78   g_object_unref (parser);
79 }
80
81 static void
82 test_base_array (void)
83 {
84   JsonParser *parser = json_parser_new ();
85   JsonReader *reader = json_reader_new (NULL);
86   GError *error = NULL;
87
88   json_parser_load_from_data (parser, test_base_array_data, -1, &error);
89   g_assert (error == NULL);
90
91   json_reader_set_root (reader, json_parser_get_root (parser));
92
93   g_assert (json_reader_is_array (reader));
94   g_assert_cmpint (json_reader_count_elements (reader), ==, 7);
95
96   json_reader_read_element (reader, 0);
97   g_assert (json_reader_is_value (reader));
98   g_assert_cmpint (json_reader_get_int_value (reader), ==, 0);
99   json_reader_end_element (reader);
100
101   json_reader_read_element (reader, 1);
102   g_assert (json_reader_is_value (reader));
103   g_assert (json_reader_get_boolean_value (reader));
104   json_reader_end_element (reader);
105
106   json_reader_read_element (reader, 3);
107   g_assert (json_reader_is_value (reader));
108   g_assert_cmpstr (json_reader_get_string_value (reader), ==, "foo");
109   json_reader_end_element (reader);
110
111   json_reader_read_element (reader, 5);
112   g_assert (!json_reader_is_value (reader));
113   g_assert (json_reader_is_array (reader));
114   json_reader_end_element (reader);
115
116   json_reader_read_element (reader, 6);
117   g_assert (json_reader_is_object (reader));
118
119   json_reader_read_member (reader, "bar");
120   g_assert (json_reader_is_value (reader));
121   g_assert_cmpint (json_reader_get_int_value (reader), ==, 42);
122   json_reader_end_member (reader);
123
124   json_reader_end_element (reader);
125
126   g_assert (!json_reader_read_element (reader, 7));
127   g_assert_error ((GError *) json_reader_get_error (reader),
128                   JSON_READER_ERROR,
129                   JSON_READER_ERROR_INVALID_INDEX);
130   json_reader_end_element (reader);
131   g_assert (json_reader_get_error (reader) == NULL);
132
133   g_object_unref (reader);
134 }
135
136 int
137 main (int   argc,
138       char *argv[])
139 {
140 #if !GLIB_CHECK_VERSION (2, 35, 1)
141   g_type_init ();
142 #endif
143   g_test_init (&argc, &argv, NULL);
144   g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=");
145
146   g_test_add_func ("/reader/base-array", test_base_array);
147   g_test_add_func ("/reader/base-object", test_base_object);
148
149   return g_test_run ();
150 }