📄 keyfile.c
字号:
check_string_value (keyfile, "group1", "key1", "bla"); g_key_file_remove_key (keyfile, "group1", "key1", &error); check_no_error (&error); value = g_key_file_get_string (keyfile, "group1", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_free (value); g_key_file_remove_key (keyfile, "group1", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_remove_key (keyfile, "no such group", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile);}static voidtest_groups (void){ GKeyFile *keyfile; const gchar *data = "[1]\n" "key1=123\n" "[2]\n" "key2=123\n"; g_test_bug ("316309"); keyfile = load_data (data, 0); check_string_value (keyfile, "1", "key1", "123"); check_string_value (keyfile, "2", "key2", "123"); g_key_file_free (keyfile); }static voidtest_group_names (void){ GKeyFile *keyfile; GError *error = NULL; const gchar *data; gchar *value; /* [ in group name */ data = "[a[b]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* ] in group name */ data = "[a]b]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* control char in group name */ data = "[a\tb]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* empty group name */ data = "[]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* Unicode in group name */ data = "[\xc2\xbd]\n" "key1=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_no_error (&error); keyfile = g_key_file_new (); /*g_key_file_set_string (keyfile, "a[b", "key1", "123");*/ value = g_key_file_get_string (keyfile, "a[b", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); /*g_key_file_set_string (keyfile, "a]b", "key1", "123");*/ value = g_key_file_get_string (keyfile, "a]b", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); /*g_key_file_set_string (keyfile, "a\tb", "key1", "123");*/ value = g_key_file_get_string (keyfile, "a\tb", "key1", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "\xc2\xbd", "key1", "123"); check_string_value (keyfile, "\xc2\xbd", "key1", "123"); g_key_file_free (keyfile); }static voidtest_key_names (void){ GKeyFile *keyfile; GError *error = NULL; const gchar *data; gchar *value; /* [ in key name */ data = "[a]\n" "key[=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* empty key name */ data = "[a]\n" " =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* empty key name */ data = "[a]\n" " [de] =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* bad locale suffix */ data = "[a]\n" "foo[@#!&%]=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); /* initial space */ data = "[a]\n" " foo=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_no_error (&error); check_string_value (keyfile, "a", "foo", "123"); g_key_file_free (keyfile); /* final space */ data = "[a]\n" "foo =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_no_error (&error); check_string_value (keyfile, "a", "foo", "123"); g_key_file_free (keyfile); /* inner space */ data = "[a]\n" "foo bar=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_no_error (&error); check_string_value (keyfile, "a", "foo bar", "123"); g_key_file_free (keyfile); /* inner space */ data = "[a]\n" "foo [de] =123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); g_key_file_free (keyfile); /* control char in key name */ data = "[a]\n" "key\tfoo=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_no_error (&error); /* Unicode in key name */ data = "[a]\n" "\xc2\xbd=123\n"; keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data, -1, 0, &error); g_key_file_free (keyfile); check_no_error (&error); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); /*g_key_file_set_string (keyfile, "a", "key=", "123");*/ value = g_key_file_get_string (keyfile, "a", "key=", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); /*g_key_file_set_string (keyfile, "a", "key[", "123");*/ value = g_key_file_get_string (keyfile, "a", "key[", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); g_key_file_set_string (keyfile, "a", "key\tfoo", "123"); value = g_key_file_get_string (keyfile, "a", "key\tfoo", &error); check_no_error (&error); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); /*g_key_file_set_string (keyfile, "a", " key", "123");*/ value = g_key_file_get_string (keyfile, "a", " key", &error); check_error (&error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_set_string (keyfile, "a", "x", "123"); /* Unicode key */ g_key_file_set_string (keyfile, "a", "\xc2\xbd", "123"); check_string_value (keyfile, "a", "\xc2\xbd", "123"); /* Keys with / + . (as used by the gnome-vfs mime cache) */ g_key_file_set_string (keyfile, "a", "foo/bar", "/"); check_string_value (keyfile, "a", "foo/bar", "/"); g_key_file_set_string (keyfile, "a", "foo+bar", "+"); check_string_value (keyfile, "a", "foo+bar", "+"); g_key_file_set_string (keyfile, "a", "foo.bar", "."); check_string_value (keyfile, "a", "foo.bar", "."); g_key_file_free (keyfile); }static voidtest_duplicate_keys (void){ GKeyFile *keyfile; const gchar *data = "[1]\n" "key1=123\n" "key1=345\n"; keyfile = load_data (data, 0); check_string_value (keyfile, "1", "key1", "345"); g_key_file_free (keyfile); }static voidtest_duplicate_groups (void){ GKeyFile *keyfile; const gchar *data = "[Desktop Entry]\n" "key1=123\n" "[Desktop Entry]\n" "key2=123\n"; g_test_bug ("157877"); keyfile = load_data (data, 0); check_string_value (keyfile, "Desktop Entry", "key1", "123"); check_string_value (keyfile, "Desktop Entry", "key2", "123"); g_key_file_free (keyfile); }static voidtest_duplicate_groups2 (void){ GKeyFile *keyfile; const gchar *data = "[A]\n" "foo=bar\n" "[B]\n" "foo=baz\n" "[A]\n" "foo=bang\n"; g_test_bug ("385910"); keyfile = load_data (data, 0); check_string_value (keyfile, "A", "foo", "bang"); check_string_value (keyfile, "B", "foo", "baz"); g_key_file_free (keyfile); }static voidtest_reload_idempotency (void){ static const gchar *original_data="" "# Top comment\n" "\n" "# First comment\n" "[first]\n" "key=value\n" "# A random comment in the first group\n" "anotherkey=anothervalue\n" "# Second comment - one line\n" "[second]\n" "# Third comment - two lines\n" "# Third comment - two lines\n" "[third]\n" "blank_line=1\n" "\n" "blank_lines=2\n" "\n\n" "[fourth]\n" "[fifth]\n"; GKeyFile *keyfile; GError *error = NULL; gchar *data1, *data2; gsize len1, len2; g_test_bug ("420686"); /* check that we only insert a single new line between groups */ keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, original_data, strlen(original_data), G_KEY_FILE_KEEP_COMMENTS, &error); check_no_error (&error); data1 = g_key_file_to_data (keyfile, &len1, &error); g_assert (data1 != NULL); g_key_file_free (keyfile); keyfile = g_key_file_new (); g_key_file_load_from_data (keyfile, data1, len1, G_KEY_FILE_KEEP_COMMENTS, &error); check_no_error (&error); data2 = g_key_file_to_data (keyfile, &len2, &error); g_assert (data2 != NULL); g_key_file_free (keyfile); g_assert_cmpstr (data1, ==, data2); g_free (data2); g_free (data1);}intmain (int argc, char *argv[]){ g_test_init (&argc, &argv, NULL); g_test_bug_base ("http://bugzilla.gnome.org/"); g_test_add_func ("/keyfile/line-ends", test_line_ends); g_test_add_func ("/keyfile/whitespace", test_whitespace); g_test_add_func ("/keyfile/comments", test_comments); g_test_add_func ("/keyfile/listing", test_listing); g_test_add_func ("/keyfile/string", test_string); g_test_add_func ("/keyfile/boolean", test_boolean); g_test_add_func ("/keyfile/number", test_number); g_test_add_func ("/keyfile/locale-string", test_locale_string); g_test_add_func ("/keyfile/lists", test_lists); g_test_add_func ("/keyfile/lists-set-get", test_lists_set_get); g_test_add_func ("/keyfile/group-remove", test_group_remove); g_test_add_func ("/keyfile/key-remove", test_key_remove); g_test_add_func ("/keyfile/groups", test_groups); g_test_add_func ("/keyfile/duplicate-keys", test_duplicate_keys); g_test_add_func ("/keyfile/duplicate-groups", test_duplicate_groups); g_test_add_func ("/keyfile/duplicate-groups2", test_duplicate_groups2); g_test_add_func ("/keyfile/group-names", test_group_names); g_test_add_func ("/keyfile/key-names", test_key_names); g_test_add_func ("/keyfile/reload", test_reload_idempotency); return g_test_run ();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -