First public contribution.
1 /* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. */
9 #include "mrt2_glib2_test.h"
14 load_data (const gchar *data,
20 keyfile = g_key_file_new ();
21 g_key_file_load_from_data (keyfile, data, -1, flags, &error);
24 g_print ("Could not load data: %s\n", error->message);
26 g_assert(FALSE && "keyfile-test failed");
29 testResultXml("keyfile-test");
39 check_error (GError **error,
45 g_print ("Missing an error\n");
47 g_assert(FALSE && "keyfile-test failed");
50 testResultXml("keyfile-test");
56 if ((*error)->domain != domain)
58 g_print ("Wrong error domain: got %s, expected %s\n",
59 g_quark_to_string ((*error)->domain),
60 g_quark_to_string (domain));
62 g_assert(FALSE && "keyfile-test failed");
65 testResultXml("keyfile-test");
71 if ((*error)->code != code)
73 g_print ("Wrong error code: got %d, expected %d\n",
74 (*error)->code, code);
76 g_assert(FALSE && "keyfile-test failed");
79 testResultXml("keyfile-test");
85 g_error_free (*error);
90 check_no_error (GError **error)
94 g_print ("Unexpected error: (%s, %d) %s\n",
95 g_quark_to_string ((*error)->domain),
96 (*error)->code, (*error)->message);
98 g_assert(FALSE && "keyfile-test failed");
101 testResultXml("keyfile-test");
102 #endif /* EMULATOR */
109 check_string_value (GKeyFile *keyfile,
112 const gchar *expected)
114 GError *error = NULL;
117 value = g_key_file_get_string (keyfile, group, key, &error);
118 check_no_error (&error);
119 g_assert (value != NULL);
121 if (strcmp (value, expected) != 0)
123 g_print ("Group %s key %s: "
124 "expected string value '%s', actual value '%s'\n",
125 group, key, expected, value);
127 g_assert(FALSE && "keyfile-test failed");
130 testResultXml("keyfile-test");
131 #endif /* EMULATOR */
140 check_locale_string_value (GKeyFile *keyfile,
144 const gchar *expected)
146 GError *error = NULL;
149 value = g_key_file_get_locale_string (keyfile, group, key, locale, &error);
150 check_no_error (&error);
151 g_assert (value != NULL);
153 if (strcmp (value, expected) != 0)
155 g_print ("Group %s key %s locale %s: "
156 "expected string value '%s', actual value '%s'\n",
157 group, key, locale, expected, value);
160 g_assert(FALSE && "keyfile-test failed");
163 testResultXml("keyfile-test");
164 #endif /* EMULATOR */
173 check_string_list_value (GKeyFile *keyfile,
182 GError *error = NULL;
184 value = g_key_file_get_string_list (keyfile, group, key, &len, &error);
185 check_no_error (&error);
186 g_assert (value != NULL);
188 va_start (args, key);
190 v = va_arg (args, gchar*);
193 if (value[i] == NULL)
195 g_print ("Group %s key %s: list too short (%d)\n",
198 g_assert(FALSE && "keyfile-test failed");
201 testResultXml("keyfile-test");
202 #endif /* EMULATOR */
206 if (strcmp (v, value[i]) != 0)
208 g_print ("Group %s key %s: mismatch at %d, expected %s, got %s\n",
209 group, key, i, v, value[i]);
212 g_assert(FALSE && "keyfile-test failed");
215 testResultXml("keyfile-test");
216 #endif /* EMULATOR */
222 v = va_arg (args, gchar*);
231 check_integer_list_value (GKeyFile *keyfile,
240 GError *error = NULL;
242 value = g_key_file_get_integer_list (keyfile, group, key, &len, &error);
243 check_no_error (&error);
244 g_assert (value != NULL);
246 va_start (args, key);
248 v = va_arg (args, gint);
253 g_print ("Group %s key %s: list too short (%d)\n",
256 g_assert(FALSE && "keyfile-test failed");
259 testResultXml("keyfile-test");
260 #endif /* EMULATOR */
266 g_print ("Group %s key %s: mismatch at %d, expected %d, got %d\n",
267 group, key, i, v, value[i]);
269 g_assert(FALSE && "keyfile-test failed");
272 testResultXml("keyfile-test");
273 #endif /* EMULATOR */
279 v = va_arg (args, gint);
288 check_boolean_list_value (GKeyFile *keyfile,
297 GError *error = NULL;
299 value = g_key_file_get_boolean_list (keyfile, group, key, &len, &error);
300 check_no_error (&error);
301 g_assert (value != NULL);
303 va_start (args, key);
305 v = va_arg (args, gboolean);
310 g_print ("Group %s key %s: list too short (%d)\n",
313 g_assert(FALSE && "keyfile-test failed");
316 testResultXml("keyfile-test");
317 #endif /* EMULATOR */
323 g_print ("Group %s key %s: mismatch at %d, expected %d, got %d\n",
324 group, key, i, v, value[i]);
326 g_assert(FALSE && "keyfile-test failed");
329 testResultXml("keyfile-test");
330 #endif /* EMULATOR */
336 v = va_arg (args, gboolean);
345 check_boolean_value (GKeyFile *keyfile,
350 GError *error = NULL;
353 value = g_key_file_get_boolean (keyfile, group, key, &error);
354 check_no_error (&error);
356 if (value != expected)
358 g_print ("Group %s key %s: "
359 "expected boolean value '%s', actual value '%s'\n",
361 expected ? "true" : "false",
362 value ? "true" : "false");
364 g_assert(FALSE && "keyfile-test failed");
367 testResultXml("keyfile-test");
368 #endif /* EMULATOR */
375 check_integer_value (GKeyFile *keyfile,
380 GError *error = NULL;
383 value = g_key_file_get_integer (keyfile, group, key, &error);
384 check_no_error (&error);
386 if (value != expected)
388 g_print ("Group %s key %s: "
389 "expected integer value %d, actual value %d\n",
390 group, key, expected, value);
392 g_assert(FALSE && "keyfile-test failed");
395 testResultXml("keyfile-test");
396 #endif /* EMULATOR */
403 check_name (const gchar *what,
405 const gchar *expected,
408 if (!value || strcmp (expected, value) != 0)
410 g_print ("Wrong %s returned: got '%s' at %d, expected '%s'\n",
411 what, value, position, expected);
413 g_assert(FALSE && "keyfile-test failed");
416 testResultXml("keyfile-test");
417 #endif /* EMULATOR */
424 check_length (const gchar *what,
429 if (n_items != length || length != expected)
431 g_print ("Wrong number of %s returned: got %d items, length %d, expected %d\n",
432 what, n_items, length, expected);
434 g_assert(FALSE && "keyfile-test failed");
437 testResultXml("keyfile-test");
438 #endif /* EMULATOR */
445 /* check that both \n and \r\n are accepted as line ends,
446 * and that stray \r are passed through
449 test_line_ends (void)
461 keyfile = load_data (data, 0);
463 check_string_value (keyfile, "group1", "key1", "value1");
464 check_string_value (keyfile, "group1", "key2", "value2");
465 check_string_value (keyfile, "group2", "key3", "value3\r");
466 check_string_value (keyfile, "group2", "key4", "value4");
468 g_key_file_free (keyfile);
471 /* check handling of whitespace
474 test_whitespace (void)
487 keyfile = load_data (data, 0);
489 check_string_value (keyfile, "group1", "key1", "value1");
490 check_string_value (keyfile, "group1", "key2", "value2");
491 check_string_value (keyfile, " group2 ", "key3", "value3 ");
492 check_string_value (keyfile, " group2 ", "key4", "value \t4");
493 check_string_value (keyfile, " group2 ", "key5", "value5");
495 g_key_file_free (keyfile);
498 /* check handling of comments
506 GError *error = NULL;
511 "# top comment, continued\n"
515 "# key comment, continued\n"
517 "# line end check\r\n"
521 "# group comment, continued\n"
524 const gchar *top_comment= " top comment\n top comment, continued\n";
525 const gchar *group_comment= " group comment\n group comment, continued\n";
526 const gchar *key_comment= " key comment\n key comment, continued\n";
528 keyfile = load_data (data, 0);
530 check_string_value (keyfile, "group1", "key1", "value1");
531 check_string_value (keyfile, "group1", "key2", "value2");
532 check_string_value (keyfile, "group1", "key3", "value3");
533 check_string_value (keyfile, "group1", "key4", "value4");
535 names = g_key_file_get_keys (keyfile, "group1", &len, &error);
536 check_no_error (&error);
538 check_length ("keys", g_strv_length (names), len, 4);
539 check_name ("key", names[0], "key1", 0);
540 check_name ("key", names[1], "key2", 1);
541 check_name ("key", names[2], "key3", 2);
542 check_name ("key", names[3], "key4", 3);
546 g_key_file_free (keyfile);
548 keyfile = load_data (data, G_KEY_FILE_KEEP_COMMENTS);
550 names = g_key_file_get_keys (keyfile, "group1", &len, &error);
551 check_no_error (&error);
553 check_length ("keys", g_strv_length (names), len, 4);
554 check_name ("key", names[0], "key1", 0);
555 check_name ("key", names[1], "key2", 1);
556 check_name ("key", names[2], "key3", 2);
557 check_name ("key", names[3], "key4", 3);
561 comment = g_key_file_get_comment (keyfile, NULL, NULL, &error);
562 check_no_error (&error);
563 check_name ("top comment", comment, top_comment, 0);
566 comment = g_key_file_get_comment (keyfile, "group1", "key2", &error);
567 check_no_error (&error);
568 check_name ("key comment", comment, key_comment, 0);
571 comment = g_key_file_get_comment (keyfile, "group2", NULL, &error);
572 check_no_error (&error);
573 check_name ("group comment", comment, group_comment, 0);
576 g_key_file_free (keyfile);
580 /* check key and group listing */
588 GError *error = NULL;
598 keyfile = load_data (data, 0);
600 names = g_key_file_get_groups (keyfile, &len);
603 g_print ("Error listing groups\n");
605 g_assert(FALSE && "keyfile-test failed");
608 testResultXml("keyfile-test");
609 #endif /* EMULATOR */
614 check_length ("groups", g_strv_length (names), len, 2);
615 check_name ("group name", names[0], "group1", 0);
616 check_name ("group name", names[1], "group2", 1);
620 names = g_key_file_get_keys (keyfile, "group1", &len, &error);
621 check_no_error (&error);
623 check_length ("keys", g_strv_length (names), len, 2);
624 check_name ("key", names[0], "key1", 0);
625 check_name ("key", names[1], "key2", 1);
629 names = g_key_file_get_keys (keyfile, "no-such-group", &len, &error);
630 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
634 if (!g_key_file_has_group (keyfile, "group1") ||
635 !g_key_file_has_group (keyfile, "group2") ||
636 g_key_file_has_group (keyfile, "group10") ||
637 g_key_file_has_group (keyfile, "group2 "))
639 g_print ("Group finding trouble\n");
642 g_assert(FALSE && "keyfile-test failed");
645 testResultXml("keyfile-test");
646 #endif /* EMULATOR */
651 start = g_key_file_get_start_group (keyfile);
652 if (!start || strcmp (start, "group1") != 0)
654 g_print ("Start group finding trouble\n");
657 g_assert(FALSE && "keyfile-test failed");
660 testResultXml("keyfile-test");
661 #endif /* EMULATOR */
667 if (!g_key_file_has_key (keyfile, "group1", "key1", &error) ||
668 !g_key_file_has_key (keyfile, "group2", "key3", &error) ||
669 g_key_file_has_key (keyfile, "group2", "no-such-key", &error))
671 g_print ("Key finding trouble\n");
674 g_assert(FALSE && "keyfile-test failed");
677 testResultXml("keyfile-test");
678 #endif /* EMULATOR */
683 check_no_error (&error);
685 g_key_file_has_key (keyfile, "no-such-group", "key", &error);
686 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
688 g_key_file_free (keyfile);
691 /* check parsing of string values */
696 GError *error = NULL;
701 "key1=\\s\\n\\t\\r\\\\\n"
704 "key4=\xe2\x89\xa0\xe2\x89\xa0\n"
706 "key1=\\a\\b\\0800xff\n"
709 keyfile = load_data (data, 0);
711 check_string_value (keyfile, "valid", "key1", " \n\t\r\\");
712 check_string_value (keyfile, "valid", "key2", "\"quoted\"");
713 check_string_value (keyfile, "valid", "key3", "'quoted'");
714 check_string_value (keyfile, "valid", "key4", "\xe2\x89\xa0\xe2\x89\xa0");
716 value = g_key_file_get_string (keyfile, "invalid", "key1", &error);
717 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
720 value = g_key_file_get_string (keyfile, "invalid", "key2", &error);
721 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
724 g_key_file_free (keyfile);
727 /* check parsing of boolean values */
732 GError *error = NULL;
746 keyfile = load_data (data, 0);
748 check_boolean_value (keyfile, "valid", "key1", TRUE);
749 check_boolean_value (keyfile, "valid", "key2", FALSE);
750 check_boolean_value (keyfile, "valid", "key3", TRUE);
751 check_boolean_value (keyfile, "valid", "key4", FALSE);
753 g_key_file_get_boolean (keyfile, "invalid", "key1", &error);
754 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
756 g_key_file_get_boolean (keyfile, "invalid", "key2", &error);
757 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
759 g_key_file_get_boolean (keyfile, "invalid", "key3", &error);
760 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
762 g_key_file_get_boolean (keyfile, "invalid", "key4", &error);
763 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
765 g_key_file_free (keyfile);
768 /* check parsing of integer values */
773 GError *error = NULL;
789 keyfile = load_data (data, 0);
791 check_integer_value (keyfile, "valid", "key1", 0);
792 check_integer_value (keyfile, "valid", "key2", 1);
793 check_integer_value (keyfile, "valid", "key3", -1);
794 check_integer_value (keyfile, "valid", "key4", 2324431);
795 check_integer_value (keyfile, "valid", "key5", -2324431);
796 check_integer_value (keyfile, "valid", "key6", 111);
798 g_key_file_get_integer (keyfile, "invalid", "key1", &error);
799 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
801 g_key_file_get_integer (keyfile, "invalid", "key2", &error);
802 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
804 g_key_file_get_integer (keyfile, "invalid", "key3", &error);
805 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
807 g_key_file_get_integer (keyfile, "invalid", "key4", &error);
808 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE);
810 g_key_file_free (keyfile);
813 /* check handling of translated strings */
815 test_locale_string (void)
818 GError *error = NULL;
825 "key1[de_DE]=v1-de_DE\n"
826 "key1[de_DE.UTF8]=v1-de_DE.UTF8\n"
829 "key1[sr@Latn]=v1-sr\n";
831 keyfile = load_data (data, G_KEY_FILE_KEEP_TRANSLATIONS);
833 check_locale_string_value (keyfile, "valid", "key1", "it", "v1");
834 check_locale_string_value (keyfile, "valid", "key1", "de", "v1-de");
835 check_locale_string_value (keyfile, "valid", "key1", "de_DE", "v1-de_DE");
836 check_locale_string_value (keyfile, "valid", "key1", "de_DE.UTF8", "v1-de_DE.UTF8");
837 check_locale_string_value (keyfile, "valid", "key1", "fr", "v1-fr");
838 check_locale_string_value (keyfile, "valid", "key1", "fr_FR", "v1-fr");
839 check_locale_string_value (keyfile, "valid", "key1", "en", "v1-en");
840 check_locale_string_value (keyfile, "valid", "key1", "sr@Latn", "v1-sr");
842 g_key_file_free (keyfile);
844 /* now test that translations are thrown away */
846 g_setenv ("LANGUAGE", "de", TRUE);
847 setlocale (LC_ALL, "");
849 keyfile = load_data (data, 0);
851 check_locale_string_value (keyfile, "valid", "key1", "it", "v1");
852 check_locale_string_value (keyfile, "valid", "key1", "de", "v1-de");
853 check_locale_string_value (keyfile, "valid", "key1", "de_DE", "v1-de");
854 check_locale_string_value (keyfile, "valid", "key1", "de_DE.UTF8", "v1-de");
855 check_locale_string_value (keyfile, "valid", "key1", "fr", "v1");
856 check_locale_string_value (keyfile, "valid", "key1", "fr_FR", "v1");
857 check_locale_string_value (keyfile, "valid", "key1", "en", "v1");
859 g_key_file_free (keyfile);
875 "key7= 1 ; 0 ; -1 \n"
878 keyfile = load_data (data, 0);
880 check_string_list_value (keyfile, "valid", "key1", "v1", "v2", NULL);
881 check_string_list_value (keyfile, "valid", "key2", "v1", "v2", NULL);
882 check_string_list_value (keyfile, "valid", "key3", "v1,v2", NULL);
883 check_string_list_value (keyfile, "valid", "key4", "v1;v2", NULL);
884 check_boolean_list_value (keyfile, "valid", "key5", TRUE, FALSE, -100);
885 check_integer_list_value (keyfile, "valid", "key6", 1, 0, -1, -100);
886 /* maybe these should be valid */
887 /* check_integer_list_value (keyfile, "valid", "key7", 1, 0, -1, -100);*/
888 /* check_string_list_value (keyfile, "valid", "key8", "v1\\,v2", NULL);*/
890 g_key_file_free (keyfile);
892 /* Now check an alternate separator */
894 keyfile = load_data (data, 0);
895 g_key_file_set_list_separator (keyfile, ',');
897 check_string_list_value (keyfile, "valid", "key1", "v1;v2", NULL);
898 check_string_list_value (keyfile, "valid", "key2", "v1;v2;", NULL);
899 check_string_list_value (keyfile, "valid", "key3", "v1", "v2", NULL);
901 g_key_file_free (keyfile);
904 /* http://bugzilla.gnome.org/show_bug.cgi?id=165887 */
906 test_group_remove (void)
911 GError *error = NULL;
922 keyfile = load_data (data, 0);
924 names = g_key_file_get_groups (keyfile, &len);
927 g_print ("Error listing groups\n");
929 g_assert(FALSE && "keyfile-test failed");
932 testResultXml("keyfile-test");
933 #endif /* EMULATOR */
938 check_length ("groups", g_strv_length (names), len, 3);
939 check_name ("group name", names[0], "group1", 0);
940 check_name ("group name", names[1], "group2", 1);
941 check_name ("group name", names[2], "group3", 2);
943 g_key_file_remove_group (keyfile, "group1", &error);
944 check_no_error (&error);
948 names = g_key_file_get_groups (keyfile, &len);
951 g_print ("Error listing groups\n");
953 g_assert(FALSE && "keyfile-test failed");
956 testResultXml("keyfile-test");
957 #endif /* EMULATOR */
962 check_length ("groups", g_strv_length (names), len, 2);
963 check_name ("group name", names[0], "group2", 0);
964 check_name ("group name", names[1], "group3", 1);
966 g_key_file_remove_group (keyfile, "group2", &error);
967 check_no_error (&error);
971 names = g_key_file_get_groups (keyfile, &len);
974 g_print ("Error listing groups\n");
976 g_assert(FALSE && "keyfile-test failed");
979 testResultXml("keyfile-test");
980 #endif /* EMULATOR */
985 check_length ("groups", g_strv_length (names), len, 1);
986 check_name ("group name", names[0], "group3", 0);
988 g_key_file_remove_group (keyfile, "no such group", &error);
989 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
993 g_key_file_free (keyfile);
996 /* http://bugzilla.gnome.org/show_bug.cgi?id=165980 */
998 test_key_remove (void)
1002 GError *error = NULL;
1009 keyfile = load_data (data, 0);
1011 check_string_value (keyfile, "group1", "key1", "bla");
1013 g_key_file_remove_key (keyfile, "group1", "key1", &error);
1014 check_no_error (&error);
1016 value = g_key_file_get_string (keyfile, "group1", "key1", &error);
1017 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
1020 g_key_file_remove_key (keyfile, "group1", "key1", &error);
1021 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND);
1023 g_key_file_remove_key (keyfile, "no such group", "key1", &error);
1024 check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND);
1026 g_key_file_free (keyfile);
1029 /* http://bugzilla.gnome.org/show_bug.cgi?id=316309 */
1041 keyfile = load_data (data, 0);
1043 check_string_value (keyfile, "1", "key1", "123");
1044 check_string_value (keyfile, "2", "key2", "123");
1046 g_key_file_free (keyfile);
1051 main (int argc, char *argv[])
1054 g_log_set_handler (NULL, G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
1055 g_set_print_handler(mrtPrintHandler);
1066 test_locale_string ();
1068 test_group_remove ();
1073 testResultXml("keyfile-test");
1074 #endif /* EMULATOR */