8 #include <json-glib/json-glib.h>
11 test_invalid_bareword (gconstpointer user_data)
13 const char *json = user_data;
18 parser = json_parser_new ();
19 g_assert (JSON_IS_PARSER (parser));
21 if (g_test_verbose ())
22 g_print ("invalid data: '%s'...", json);
24 res = json_parser_load_from_data (parser, json, -1, &error);
27 g_assert_error (error, JSON_PARSER_ERROR, JSON_PARSER_ERROR_INVALID_BAREWORD);
29 if (g_test_verbose ())
30 g_print ("expected error: %s\n", error->message);
32 g_clear_error (&error);
34 g_object_unref (parser);
38 test_invalid_assignment (gconstpointer user_data)
40 const char *json = user_data;
45 parser = json_parser_new ();
46 g_assert (JSON_IS_PARSER (parser));
48 if (g_test_verbose ())
49 g_print ("invalid data: '%s'...", json);
51 res = json_parser_load_from_data (parser, json, -1, &error);
54 g_assert (error != NULL);
56 if (g_test_verbose ())
57 g_print ("expected error: %s\n", error->message);
59 g_clear_error (&error);
61 g_object_unref (parser);
65 test_invalid_value (gconstpointer user_data)
67 const char *json = user_data;
72 parser = json_parser_new ();
73 g_assert (JSON_IS_PARSER (parser));
75 if (g_test_verbose ())
76 g_print ("invalid data: '%s'...", json);
78 res = json_parser_load_from_data (parser, json, -1, &error);
81 g_assert (error != NULL);
83 if (g_test_verbose ())
84 g_print ("expected error: %s\n", error->message);
86 g_clear_error (&error);
88 g_object_unref (parser);
92 test_invalid_array (gconstpointer user_data)
94 const char *json = user_data;
99 parser = json_parser_new ();
100 g_assert (JSON_IS_PARSER (parser));
102 if (g_test_verbose ())
103 g_print ("invalid data: '%s'...", json);
105 res = json_parser_load_from_data (parser, json, -1, &error);
108 g_assert (error != NULL);
110 if (g_test_verbose ())
111 g_print ("expected error: %s\n", error->message);
113 g_clear_error (&error);
115 g_object_unref (parser);
119 test_invalid_object (gconstpointer user_data)
121 const char *json = user_data;
122 GError *error = NULL;
126 parser = json_parser_new ();
127 g_assert (JSON_IS_PARSER (parser));
129 if (g_test_verbose ())
130 g_print ("invalid data: '%s'...", json);
132 res = json_parser_load_from_data (parser, json, -1, &error);
135 g_assert (error != NULL);
137 if (g_test_verbose ())
138 g_print ("expected error: %s\n", error->message);
140 g_clear_error (&error);
142 g_object_unref (parser);
146 test_missing_comma (gconstpointer user_data)
148 const char *json = user_data;
149 GError *error = NULL;
153 parser = json_parser_new ();
154 g_assert (JSON_IS_PARSER (parser));
156 if (g_test_verbose ())
157 g_print ("invalid data: '%s'...", json);
159 res = json_parser_load_from_data (parser, json, -1, &error);
162 g_assert_error (error, JSON_PARSER_ERROR, JSON_PARSER_ERROR_MISSING_COMMA);
164 if (g_test_verbose ())
165 g_print ("expected error: %s\n", error->message);
167 g_clear_error (&error);
169 g_object_unref (parser);
173 test_trailing_comma (gconstpointer user_data)
175 const char *json = user_data;
176 GError *error = NULL;
180 parser = json_parser_new ();
181 g_assert (JSON_IS_PARSER (parser));
183 if (g_test_verbose ())
184 g_print ("invalid data: '%s'...", json);
186 res = json_parser_load_from_data (parser, json, -1, &error);
189 g_assert_error (error, JSON_PARSER_ERROR, JSON_PARSER_ERROR_TRAILING_COMMA);
191 if (g_test_verbose ())
192 g_print ("expected error: %s\n", error->message);
194 g_clear_error (&error);
196 g_object_unref (parser);
206 { "bareword-1", "rainbows", test_invalid_bareword },
207 { "bareword-2", "[ unicorns ]", test_invalid_bareword },
208 { "bareword-3", "{ \"foo\" : ponies }", test_invalid_bareword },
209 { "bareword-4", "[ 3, 2, 1, lift_off ]", test_invalid_bareword },
210 { "bareword-5", "{ foo : 42 }", test_invalid_bareword },
213 { "values-1", "[ -false ]", test_invalid_value },
216 { "assignment-1", "var foo", test_invalid_assignment },
217 { "assignment-2", "var foo = no", test_invalid_assignment },
218 { "assignment-3", "var = true", test_invalid_assignment },
219 { "assignment-4", "var blah = 42:", test_invalid_assignment },
220 { "assignment-5", "let foo = true;", test_invalid_assignment },
223 { "array-1", "[ true, false", test_invalid_array },
224 { "array-2", "[ true }", test_invalid_array },
225 { "array-3", "[ \"foo\" : 42 ]", test_invalid_array },
228 { "object-1", "{ foo : 42 }", test_invalid_object },
229 { "object-2", "{ 42 : \"foo\" }", test_invalid_object },
230 { "object-3", "{ \"foo\", 42 }", test_invalid_object },
231 { "object-4", "{ \"foo\" : 42 ]", test_invalid_object },
232 { "object-5", "{ \"blah\" }", test_invalid_object },
233 { "object-6", "{ \"a\" : 0 \"b\" : 1 }", test_invalid_object },
234 { "object-7", "{ null: false }", test_invalid_object },
237 { "missing-comma-1", "[ true false ]", test_missing_comma },
238 { "missing-comma-2", "{ \"foo\" : 42 \"bar\": null }", test_missing_comma },
240 /* trailing commas */
241 { "trailing-comma-1", "[ true, ]", test_trailing_comma },
242 { "trailing-comma-2", "{ \"foo\" : 42, }", test_trailing_comma },
245 static guint n_test_invalid = G_N_ELEMENTS (test_invalid);
253 g_test_init (&argc, &argv, NULL);
255 for (i = 0; i < n_test_invalid; i++)
257 char *test_path = g_strconcat ("/invalid/json/", test_invalid[i].path, NULL);
259 g_test_add_data_func_full (test_path,
260 (gpointer) test_invalid[i].json,
261 test_invalid[i].func,
267 return g_test_run ();