6 load_data (const gchar *data)
11 keyfile = g_key_file_new ();
12 g_key_file_load_from_data (keyfile, data, -1, 0, &error);
15 g_print ("Could not load data: %s\n", error->message);
23 check_error (GError **error,
29 g_print ("Missing an error\n");
33 if ((*error)->domain != domain)
35 g_print ("Wrong error domain: got %s, expected %s\n",
36 g_quark_to_string ((*error)->domain),
37 g_quark_to_string (domain));
41 if ((*error)->code != code)
43 g_print ("Wrong error code: got %d, expected %d\n",
44 (*error)->code, code);
48 g_error_free (*error);
53 check_no_error (GError **error)
57 g_print ("Unexpected error: (%s, %d) %s\n",
58 g_quark_to_string ((*error)->domain),
59 (*error)->code, (*error)->message);
65 check_string_value (GKeyFile *keyfile,
68 const gchar *expected)
73 value = g_key_file_get_string (keyfile, group, key, &error);
74 check_no_error (&error);
75 g_assert (value != NULL);
77 if (strcmp (value, expected) != 0)
79 g_print ("Group %s key %s: "
80 "expected string value '%s', actual value '%s'\n",
81 group, key, expected, value);
89 check_boolean_value (GKeyFile *keyfile,
97 value = g_key_file_get_boolean (keyfile, group, key, &error);
98 check_no_error (&error);
100 if (value != expected)
102 g_print ("Group %s key %s: "
103 "expected boolean value '%s', actual value '%s'\n",
105 expected ? "true" : "false",
106 value ? "true" : "false");
112 check_name (const gchar *what,
114 const gchar *expected,
117 if (strcmp (expected, value) != 0)
119 g_print ("Wrong %s returned: got %s at %d, expected %s\n",
120 what, value, position, expected);
126 check_length (const gchar *what,
131 if (n_items != length || length != expected)
133 g_print ("Wrong number of %s returned: got %d items, length %d, expected %d\n",
134 what, n_items, length, expected);
140 /* check that both \n and \r\n are accepted as line ends,
141 * and that stray \r are passed through
144 test_line_ends (void)
156 keyfile = load_data (data);
158 check_string_value (keyfile, "group1", "key1", "value1");
159 check_string_value (keyfile, "group1", "key2", "value2");
160 check_string_value (keyfile, "group2", "key3", "value3\r");
161 check_string_value (keyfile, "group2", "key4", "value4");
163 g_key_file_free (keyfile);
166 /* check handling of whitespace
169 test_whitespace (void)
182 keyfile = load_data (data);
184 check_string_value (keyfile, "group1", "key1", "value1");
185 check_string_value (keyfile, "group1", "key2", "value2");
186 check_string_value (keyfile, " group2 ", "key3", "value3 ");
187 check_string_value (keyfile, " group2 ", "key4", "value \t4");
188 check_string_value (keyfile, " group2 ", "key5", "value5");
190 g_key_file_free (keyfile);
193 /* check key and group listing */
201 GError *error = NULL;
211 keyfile = load_data (data);
213 names = g_key_file_get_groups (keyfile, &len);
216 g_print ("Error listing groups\n");
220 check_length ("groups", g_strv_length (names), len, 2);
221 check_name ("group name", names[0], "group1", 0);
222 check_name ("group name", names[1], "group2", 1);
226 names = g_key_file_get_keys (keyfile, "group1", &len, &error);
227 check_no_error (&error);
229 check_length ("keys", g_strv_length (names), len, 2);
230 check_name ("key", names[0], "key1", 0);
231 check_name ("key", names[1], "key2", 1);
235 names = g_key_file_get_keys (keyfile, "no-such-group", &len, &error);
236 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
240 if (!g_key_file_has_group (keyfile, "group1") ||
241 !g_key_file_has_group (keyfile, "group2") ||
242 g_key_file_has_group (keyfile, "group10") ||
243 g_key_file_has_group (keyfile, "group2 "))
245 g_print ("Group finding trouble\n");
249 start = g_key_file_get_start_group (keyfile);
250 if (!start || strcmp (start, "group1") != 0)
252 g_print ("Start group finding trouble\n");
257 if (!g_key_file_has_key (keyfile, "group1", "key1", &error) ||
258 !g_key_file_has_key (keyfile, "group2", "key3", &error) ||
259 g_key_file_has_key (keyfile, "group2", "no-such-key", &error))
261 g_print ("Key finding trouble\n");
264 check_no_error (&error);
266 g_key_file_has_key (keyfile, "no-such-group", "key", &error);
267 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
269 g_key_file_free (keyfile);
272 /* check parsing of string values */
277 GError *error = NULL;
282 "key1=\\s\\n\\t\\r\\\\\n"
285 "key4=\xe2\x89\xa0\xe2\x89\xa0\n"
287 "key1=\\a\\b\\0800xff\n"
290 keyfile = load_data (data);
292 check_string_value (keyfile, "valid", "key1", " \n\t\r\\");
293 check_string_value (keyfile, "valid", "key2", "\"quoted\"");
294 check_string_value (keyfile, "valid", "key3", "'quoted'");
295 check_string_value (keyfile, "valid", "key4", "\xe2\x89\xa0\xe2\x89\xa0");
297 value = g_key_file_get_string (keyfile, "invalid", "key1", &error);
298 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
301 value = g_key_file_get_string (keyfile, "invalid", "key2", &error);
302 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
305 g_key_file_free (keyfile);
308 /* check parsing of boolean values */
313 GError *error = NULL;
327 keyfile = load_data (data);
328 check_boolean_value (keyfile, "valid", "key1", TRUE);
329 check_boolean_value (keyfile, "valid", "key2", FALSE);
330 check_boolean_value (keyfile, "valid", "key3", TRUE);
331 check_boolean_value (keyfile, "valid", "key4", FALSE);
333 g_key_file_get_boolean (keyfile, "invalid", "key1", &error);
334 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
336 g_key_file_get_boolean (keyfile, "invalid", "key2", &error);
337 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
339 g_key_file_get_boolean (keyfile, "invalid", "key3", &error);
340 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
342 g_key_file_get_boolean (keyfile, "invalid", "key4", &error);
343 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
347 main (int argc, char *argv[])