From 2086d40251704fcfde98ba5fb6163897f94f3489 Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Sat, 18 Feb 2017 13:35:54 +0000 Subject: Fix issue #49: stop unit tests changing user files Add ENCHANT_CONFIG_DIR so a private directory can be used --- src/enchant.c | 14 ++++- unittests/EnchantTestFixture.h | 62 +--------------------- unittests/Makefile.am | 2 + ...enchant_provider_get_user_config_dirs_tests.cpp | 7 ++- 4 files changed, 23 insertions(+), 62 deletions(-) diff --git a/src/enchant.c b/src/enchant.c index 6f4eb0b..172a369 100644 --- a/src/enchant.c +++ b/src/enchant.c @@ -168,6 +168,18 @@ enchant_get_user_config_dirs (void) { GSList *user_dirs = NULL; + { + /* Use ENCHANT_CONFIG_DIR env var */ + const gchar* env = g_getenv("ENCHANT_CONFIG_DIR"); + if (env) { + char * config_dir = g_filename_to_utf8(env, -1, NULL, NULL, NULL); + if (config_dir) + { + user_dirs = enchant_slist_append_unique_path (user_dirs, config_dir); + } + } + } + { const char * user_config_dir; @@ -450,7 +462,7 @@ _enchant_session_new (EnchantProvider *provider, const char * const user_config_ g_free (filename); filename = g_strdup_printf ("%s.exc", lang); - excl = g_build_filename (user_config_dir, filename, NULL); + excl = g_build_filename (user_config_dir, filename, NULL); g_free (filename); session = enchant_session_new_with_pwl (provider, dic, excl, lang, fail_if_no_pwl); diff --git a/unittests/EnchantTestFixture.h b/unittests/EnchantTestFixture.h index 4725ef1..4e39107 100644 --- a/unittests/EnchantTestFixture.h +++ b/unittests/EnchantTestFixture.h @@ -51,12 +51,11 @@ struct EnchantTestFixture EnchantTestFixture() { CleanUpFiles(); //just in case we stopped the process in the middle. - MoveEnchantUserFilesOutOfTheWay(); + CreateDirectory(GetTempUserEnchantDir()); } //Teardown ~EnchantTestFixture(){ - RestoreEnchantUserFiles(); CleanUpFiles(); } void CleanUpFiles() @@ -69,43 +68,7 @@ struct EnchantTestFixture std::string GetTempUserEnchantDir() { - return GetEnchantHomeDirFromBase(g_get_user_config_dir()); - } - - void MoveEnchantUserFilesOutOfTheWay() - { - GetFilesOutOfTheWay(GetEnchantHomeDirFromBase(g_get_user_config_dir())); - GetFilesOutOfTheWay(GetEnchantHomeDirFromBase(g_get_home_dir())); - } - - void RestoreEnchantUserFiles() - { - RestoreFiles(GetEnchantHomeDirFromBase(g_get_user_config_dir())); - RestoreFiles(GetEnchantHomeDirFromBase(g_get_home_dir())); - } - -#define OUT_OF_THE_WAY ".real"; - - void GetFilesOutOfTheWay(const std::string& dir) - { - std::string toTheSideDir = dir + OUT_OF_THE_WAY; - - if(DirExists(dir) && !DirExists(toTheSideDir)) - { - MoveDir(dir, toTheSideDir); - } - - DeleteDirAndFiles(dir); - } - - void RestoreFiles(const std::string& dir) - { - std::string toTheSideDir = dir + OUT_OF_THE_WAY; - if(DirExists(toTheSideDir)) - { - DeleteDirAndFiles(dir); - MoveDir(toTheSideDir, dir); - } + return getenv("ENCHANT_CONFIG_DIR"); } std::string GetEnchantConfigDir() @@ -113,27 +76,6 @@ struct EnchantTestFixture return AddToPath(AddToPath(GetDirectoryOfThisModule(), "share"), "enchant"); } - static bool DirExists(const std::string& dir) - { - return g_file_test(dir.c_str(), G_FILE_TEST_IS_DIR) != 0; - } - - static void MoveDir(const std::string& from, const std::string& to) - { - int result = g_rename(from.c_str(), to.c_str()); - if(result!= 0) - { - perror("failed (will retry)"); - // try once more. - result = g_rename(from.c_str(), to.c_str()); - } - assert(result == 0); - if(result!= 0) - { - perror("failed (giving up)"); - } - } - static void DeleteDirAndFiles(const std::string& dir) { GDir* gdir = g_dir_open(dir.c_str(), 0, NULL); diff --git a/unittests/Makefile.am b/unittests/Makefile.am index 9eb660e..a427ec8 100644 --- a/unittests/Makefile.am +++ b/unittests/Makefile.am @@ -6,6 +6,8 @@ AM_CPPFLAGS = -I$(top_srcdir)/src $(ENCHANT_CFLAGS) $(UNITTESTPP_CFLAGS) AM_TESTS_ENVIRONMENT = \ ENCHANT_PREFIX_DIR=""; \ export ENCHANT_PREFIX_DIR; \ + ENCHANT_CONFIG_DIR="config"; \ + export ENCHANT_CONFIG_DIR; \ cp $(builddir)/mock_provider/*.so $(builddir)/mock_provider/.libs/*.so $(builddir)/mock_provider/*.dll $(builddir)/mock_provider/.libs/*.dll . || :; DEPS = $(top_builddir)/src/libenchant.la diff --git a/unittests/provider/enchant_provider_get_user_config_dirs_tests.cpp b/unittests/provider/enchant_provider_get_user_config_dirs_tests.cpp index 7b4e314..33f71db 100644 --- a/unittests/provider/enchant_provider_get_user_config_dirs_tests.cpp +++ b/unittests/provider/enchant_provider_get_user_config_dirs_tests.cpp @@ -42,10 +42,15 @@ TEST_FIXTURE(EnchantTestFixture, CHECK(enchantUserConfigDirs); GSList* iter = enchantUserConfigDirs; + + std::string expected = getenv("ENCHANT_CONFIG_DIR"); + CHECK_EQUAL(expected, (gchar *) iter->data); + iter = iter->next; + CHECK_EQUAL(GetEnchantHomeDirFromBase(g_get_user_config_dir()), (gchar*) iter->data); iter = iter->next; - std::string expected = GetEnchantHomeDirFromHome(g_get_home_dir()); + expected = GetEnchantHomeDirFromHome(g_get_home_dir()); std::string actual((char*) iter->data); CHECK_EQUAL(expected, actual); g_slist_free(enchantUserConfigDirs); -- cgit v1.2.1