summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReuben Thomas <rrt@sc3d.org>2017-02-18 13:35:54 +0000
committerReuben Thomas <rrt@sc3d.org>2017-02-19 00:11:39 +0000
commit2086d40251704fcfde98ba5fb6163897f94f3489 (patch)
tree123ac4c90ff1d17471e359ffb05551c0ba00be2e
parentd395046f4d0cb0fde36cdd31ba841bbdd19cebf2 (diff)
downloadenchant-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.c14
-rw-r--r--unittests/EnchantTestFixture.h62
-rw-r--r--unittests/Makefile.am2
-rw-r--r--unittests/provider/enchant_provider_get_user_config_dirs_tests.cpp7
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);