Initial Import
[profile/ivi/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\" : \"bar\", \"blah\" : 47 }";
13
14 static const gchar *expected_member_name[] = {
15   "text",
16   "foo",
17   "blah"
18 };
19
20 static void
21 test_base_object (void)
22 {
23   JsonParser *parser = json_parser_new ();
24   JsonReader *reader = json_reader_new (NULL);
25   GError *error = NULL;
26   gchar **members;
27   gsize n_members, i;
28
29   json_parser_load_from_data (parser, test_base_object_data, -1, &error);
30   g_assert (error == NULL);
31
32   json_reader_set_root (reader, json_parser_get_root (parser));
33
34   g_assert (json_reader_is_object (reader));
35   g_assert_cmpint (json_reader_count_members (reader), ==, 3);
36
37   members = json_reader_list_members (reader);
38   g_assert (members != NULL);
39
40   n_members = g_strv_length (members);
41   g_assert_cmpint (n_members, ==, json_reader_count_members (reader));
42
43   for (i = 0; i < n_members; i++)
44     g_assert_cmpstr (members[i], ==, expected_member_name[i]);
45
46   g_strfreev (members);
47
48   g_assert (json_reader_read_member (reader, "foo"));
49   g_assert (json_reader_is_value (reader));
50   g_assert_cmpstr (json_reader_get_string_value (reader), ==, "bar");
51   json_reader_end_member (reader);
52
53   g_assert (!json_reader_read_member (reader, "bar"));
54   g_assert (json_reader_get_error (reader) != NULL);
55   g_assert_error ((GError *) json_reader_get_error (reader),
56                   JSON_READER_ERROR,
57                   JSON_READER_ERROR_INVALID_MEMBER);
58   json_reader_end_member (reader);
59   g_assert (json_reader_get_error (reader) == NULL);
60
61   g_assert (json_reader_read_element (reader, 2));
62   g_assert_cmpstr (json_reader_get_member_name (reader), ==, "blah");
63   g_assert (json_reader_is_value (reader));
64   g_assert_cmpint (json_reader_get_int_value (reader), ==, 47);
65   json_reader_end_element (reader);
66   g_assert (json_reader_get_error (reader) == NULL);
67
68   g_object_unref (reader);
69   g_object_unref (parser);
70 }
71
72 static void
73 test_base_array (void)
74 {
75   JsonParser *parser = json_parser_new ();
76   JsonReader *reader = json_reader_new (NULL);
77   GError *error = NULL;
78
79   json_parser_load_from_data (parser, test_base_array_data, -1, &error);
80   g_assert (error == NULL);
81
82   json_reader_set_root (reader, json_parser_get_root (parser));
83
84   g_assert (json_reader_is_array (reader));
85   g_assert_cmpint (json_reader_count_elements (reader), ==, 7);
86
87   json_reader_read_element (reader, 0);
88   g_assert (json_reader_is_value (reader));
89   g_assert_cmpint (json_reader_get_int_value (reader), ==, 0);
90   json_reader_end_element (reader);
91
92   json_reader_read_element (reader, 3);
93   g_assert (json_reader_is_value (reader));
94   g_assert_cmpstr (json_reader_get_string_value (reader), ==, "foo");
95   json_reader_end_element (reader);
96
97   json_reader_read_element (reader, 5);
98   g_assert (!json_reader_is_value (reader));
99   g_assert (json_reader_is_array (reader));
100   json_reader_end_element (reader);
101
102   json_reader_read_element (reader, 6);
103   g_assert (json_reader_is_object (reader));
104
105   json_reader_read_member (reader, "bar");
106   g_assert (json_reader_is_value (reader));
107   g_assert_cmpint (json_reader_get_int_value (reader), ==, 42);
108   json_reader_end_member (reader);
109
110   json_reader_end_element (reader);
111
112   g_assert (!json_reader_read_element (reader, 7));
113   g_assert_error ((GError *) json_reader_get_error (reader),
114                   JSON_READER_ERROR,
115                   JSON_READER_ERROR_INVALID_INDEX);
116   json_reader_end_element (reader);
117   g_assert (json_reader_get_error (reader) == NULL);
118
119   g_object_unref (reader);
120 }
121
122 int
123 main (int   argc,
124       char *argv[])
125 {
126   g_type_init ();
127   g_test_init (&argc, &argv, NULL);
128   g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=");
129
130   g_test_add_func ("/reader/base-array", test_base_array);
131   g_test_add_func ("/reader/base-object", test_base_object);
132
133   return g_test_run ();
134 }