diff options
author | Reuben Thomas <rrt@sc3d.org> | 2017-02-18 13:35:54 +0000 |
---|---|---|
committer | Reuben Thomas <rrt@sc3d.org> | 2017-02-19 00:11:39 +0000 |
commit | 2086d40251704fcfde98ba5fb6163897f94f3489 (patch) | |
tree | 123ac4c90ff1d17471e359ffb05551c0ba00be2e | |
parent | d395046f4d0cb0fde36cdd31ba841bbdd19cebf2 (diff) | |
download | enchant-2086d40251704fcfde98ba5fb6163897f94f3489.tar.gz |
Fix issue #49: stop unit tests changing user files
Add ENCHANT_CONFIG_DIR so a private directory can be used
-rw-r--r-- | src/enchant.c | 14 | ||||
-rw-r--r-- | unittests/EnchantTestFixture.h | 62 | ||||
-rw-r--r-- | unittests/Makefile.am | 2 | ||||
-rw-r--r-- | unittests/provider/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 @@ -169,6 +169,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; user_config_dir = g_get_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);
|