From 54317c9118bfffa4e9390945f88e63addc1cb69c Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Mon, 4 Mar 2019 12:27:28 +0000 Subject: [PATCH] tests: Run /gsettings/keyfile test in a temporary directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don’t pollute the build directory with files generated by running the test. Note that there are still other tests in the gsettings.c test suite which use the build directory, but fixing them is a bit more involved than I have time for right now. This is a step in the right direction. Signed-off-by: Philip Withnall --- gio/tests/gsettings.c | 56 +++++++++++++++++++++++++++++++++---------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c index afc4e1fd8..77905ec7a 100644 --- a/gio/tests/gsettings.c +++ b/gio/tests/gsettings.c @@ -18,6 +18,31 @@ static gboolean backend_set; * to be compiled and installed in the same directory. */ +typedef struct +{ + gchar *tmp_dir; +} Fixture; + +static void +setup (Fixture *fixture, + gconstpointer user_data) +{ + GError *error = NULL; + + fixture->tmp_dir = g_dir_make_tmp ("gio-test-gsettings_XXXXXX", &error); + g_assert_no_error (error); + + g_test_message ("Using temporary directory: %s", fixture->tmp_dir); +} + +static void +teardown (Fixture *fixture, + gconstpointer user_data) +{ + g_assert_cmpint (g_rmdir (fixture->tmp_dir), ==, 0); + g_clear_pointer (&fixture->tmp_dir, g_free); +} + static void check_and_free (GVariant *value, const gchar *expected) @@ -1701,7 +1726,8 @@ key_changed_cb (GSettings *settings, const gchar *key, gpointer data) * Test that using a keyfile works */ static void -test_keyfile (void) +test_keyfile (Fixture *fixture, + gconstpointer user_data) { GSettingsBackend *kf_backend; GSettings *settings; @@ -1712,11 +1738,11 @@ test_keyfile (void) gchar *data; gsize len; gboolean called = FALSE; + gchar *keyfile_path = NULL, *store_path = NULL; - g_remove ("keyfile/gsettings.store"); - g_rmdir ("keyfile"); - - kf_backend = g_keyfile_settings_backend_new ("keyfile/gsettings.store", "/", "root"); + keyfile_path = g_build_filename (fixture->tmp_dir, "keyfile", NULL); + store_path = g_build_filename (keyfile_path, "gsettings.store", NULL); + kf_backend = g_keyfile_settings_backend_new (store_path, "/", "root"); settings = g_settings_new_with_backend ("org.gtk.test", kf_backend); g_object_unref (kf_backend); @@ -1738,7 +1764,7 @@ test_keyfile (void) g_settings_apply (settings); keyfile = g_key_file_new (); - g_assert_true (g_key_file_load_from_file (keyfile, "keyfile/gsettings.store", 0, NULL)); + g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL)); str = g_key_file_get_string (keyfile, "tests", "greeting", NULL); g_assert_cmpstr (str, ==, "'see if this works'"); @@ -1752,7 +1778,7 @@ test_keyfile (void) g_settings_reset (settings, "greeting"); g_settings_apply (settings); keyfile = g_key_file_new (); - g_assert_true (g_key_file_load_from_file (keyfile, "keyfile/gsettings.store", 0, NULL)); + g_assert_true (g_key_file_load_from_file (keyfile, store_path, 0, NULL)); str = g_key_file_get_string (keyfile, "tests", "greeting", NULL); g_assert_null (str); @@ -1762,7 +1788,7 @@ test_keyfile (void) g_key_file_set_string (keyfile, "tests", "greeting", "'howdy'"); data = g_key_file_to_data (keyfile, &len, NULL); - g_file_set_contents ("keyfile/gsettings.store", data, len, &error); + g_file_set_contents (store_path, data, len, &error); g_assert_no_error (error); while (!called) g_main_context_iteration (NULL, FALSE); @@ -1779,7 +1805,7 @@ test_keyfile (void) g_key_file_set_string (keyfile, "tests", "greeting", "he\"l🤗uń"); g_free (data); data = g_key_file_to_data (keyfile, &len, NULL); - g_file_set_contents ("keyfile/gsettings.store", data, len, &error); + g_file_set_contents (store_path, data, len, &error); g_assert_no_error (error); while (!called) g_main_context_iteration (NULL, FALSE); @@ -1800,7 +1826,7 @@ test_keyfile (void) g_signal_connect (settings, "writable-changed::greeting", G_CALLBACK (key_changed_cb), &called); - g_chmod ("keyfile", 0500); + g_chmod (keyfile_path, 0500); while (!called) g_main_context_iteration (NULL, FALSE); g_signal_handlers_disconnect_by_func (settings, key_changed_cb, &called); @@ -1813,7 +1839,13 @@ test_keyfile (void) g_free (data); g_object_unref (settings); - g_chmod ("keyfile", 0777); + + /* Clean up the temporary directory. */ + g_chmod (keyfile_path, 0777); + g_assert_cmpint (g_remove (store_path), ==, 0); + g_rmdir (keyfile_path); + g_free (store_path); + g_free (keyfile_path); } /* Test that getting child schemas works @@ -2916,7 +2948,7 @@ main (int argc, char *argv[]) g_test_add_func ("/gsettings/no-write-binding/subprocess/pass", test_no_write_binding_pass); } - g_test_add_func ("/gsettings/keyfile", test_keyfile); + g_test_add ("/gsettings/keyfile", Fixture, NULL, setup, test_keyfile, teardown); g_test_add_func ("/gsettings/child-schema", test_child_schema); g_test_add_func ("/gsettings/strinfo", test_strinfo); g_test_add_func ("/gsettings/enums", test_enums);