From 162a330f426e0c85aad8e0a05af33673971e10dd Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Thu, 1 Dec 2011 23:04:05 +0300 Subject: [PATCH] Added unit test for mc_config_get_full_path() function Signed-off-by: Slava Zanko --- lib/mcconfig/paths.c | 5 + tests/lib/mcconfig/Makefile.am | 10 +- tests/lib/mcconfig/user_configs_path.c | 142 +++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 tests/lib/mcconfig/user_configs_path.c diff --git a/lib/mcconfig/paths.c b/lib/mcconfig/paths.c index c4efc39f1..76b35cf17 100644 --- a/lib/mcconfig/paths.c +++ b/lib/mcconfig/paths.c @@ -223,6 +223,7 @@ mc_config_copy (const char *old_name, const char *new_name, GError ** error) /* --------------------------------------------------------------------------------------------- */ +#if MC_HOMEDIR_XDG static void mc_config_fix_migrated_rules (void) { @@ -250,6 +251,7 @@ mc_config_fix_migrated_rules (void) g_free (old_name); } } +#endif /* MC_HOMEDIR_XDG */ /* --------------------------------------------------------------------------------------------- */ /*** public functions ****************************************************************************/ @@ -470,6 +472,9 @@ mc_config_get_full_path (const char *config_name) if (config_name == NULL) return NULL; + if (!xdg_vars_initialized) + mc_config_init_config_paths (NULL); + for (rule_index = 0; mc_config_files_reference[rule_index].old_filename != NULL; rule_index++) { if (strcmp (config_name, mc_config_files_reference[rule_index].new_filename) == 0) diff --git a/tests/lib/mcconfig/Makefile.am b/tests/lib/mcconfig/Makefile.am index c4ab5757d..fba2a7b2d 100644 --- a/tests/lib/mcconfig/Makefile.am +++ b/tests/lib/mcconfig/Makefile.am @@ -1,12 +1,18 @@ AM_CFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) @CHECK_CFLAGS@ \ - -DWORKDIR=\"$(abs_builddir)\" + -DWORKDIR=\"$(abs_builddir)\" -z muldefs + +AM_LDFLAGS = -z muldefs LIBS=@CHECK_LIBS@ $(top_builddir)/lib/libmc.la TESTS = \ - config_string + config_string \ + user_configs_path check_PROGRAMS = $(TESTS) config_string_SOURCES = \ config_string.c + +user_configs_path_SOURCES = \ + user_configs_path.c diff --git a/tests/lib/mcconfig/user_configs_path.c b/tests/lib/mcconfig/user_configs_path.c new file mode 100644 index 000000000..4f7817fd3 --- /dev/null +++ b/tests/lib/mcconfig/user_configs_path.c @@ -0,0 +1,142 @@ +/* + libmc - check mcconfig submodule. Get full paths to user's config files. + + Copyright (C) 2011 + The Free Software Foundation, Inc. + + Written by: + Slava Zanko , 2011 + + This file is part of the Midnight Commander. + + The Midnight Commander is free software: you can redistribute it + and/or modify it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. + + The Midnight Commander is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#define TEST_SUITE_NAME "lib/mcconfig" +#include +#include + +#include "lib/global.h" + +#include "lib/strutil.h" +#include "lib/strescape.h" +#include "lib/vfs/vfs.h" +#include "lib/fileloc.h" + +#include "lib/mcconfig.h" +#include "src/vfs/local/local.c" + +#define HOME_DIR "/home/testuser" + +#ifdef MC_HOMEDIR_XDG +# define CONF_MAIN HOME_DIR PATH_SEP_STR ".config" +# define CONF_DATA HOME_DIR PATH_SEP_STR ".local" PATH_SEP_STR "share" +# define CONF_CACHE HOME_DIR PATH_SEP_STR ".cache" +#else +# define CONF_MAIN HOME_DIR +# define CONF_DATA CONF_MAIN +# define CONF_CACHE CONF_MAIN +#endif + + +static void +setup (void) +{ + g_setenv ("HOME", HOME_DIR, TRUE); +#ifdef MC_HOMEDIR_XDG + g_setenv ("XDG_CONFIG_HOME", CONF_MAIN, TRUE); + g_setenv ("XDG_DATA_HOME", CONF_DATA, TRUE); + g_setenv ("XDG_CACHE_HOME", CONF_CACHE, TRUE); +#endif + str_init_strings("UTF-8"); + vfs_init (); + init_localfs (); +} + +static void +teardown (void) +{ + vfs_shut (); + str_uninit_strings(); +} + +#define path_fail_unless(conf_dir, conf_name) {\ + result = mc_config_get_full_path (conf_name); \ + fail_unless (strcmp( conf_dir PATH_SEP_STR MC_USERCONF_DIR PATH_SEP_STR conf_name, result) == 0); \ + g_free (result); \ +} +/* --------------------------------------------------------------------------------------------- */ +START_TEST (user_configs_path_test) +{ + char *result; + + path_fail_unless (CONF_MAIN, MC_CONFIG_FILE); + + path_fail_unless (CONF_MAIN, MC_FHL_INI_FILE); + path_fail_unless (CONF_MAIN, MC_HOTLIST_FILE); + path_fail_unless (CONF_MAIN, GLOBAL_KEYMAP_FILE); + path_fail_unless (CONF_MAIN, MC_USERMENU_FILE); + path_fail_unless (CONF_MAIN, EDIT_SYNTAX_FILE); + path_fail_unless (CONF_MAIN, EDIT_HOME_MENU); + path_fail_unless (CONF_MAIN, EDIT_DIR PATH_SEP_STR "edit.indent.rc"); + path_fail_unless (CONF_MAIN, EDIT_DIR PATH_SEP_STR "edit.spell.rc"); + path_fail_unless (CONF_MAIN, MC_PANELS_FILE); + path_fail_unless (CONF_MAIN, MC_FILEBIND_FILE); + + path_fail_unless (CONF_DATA, MC_SKINS_SUBDIR); + path_fail_unless (CONF_DATA, FISH_PREFIX); + path_fail_unless (CONF_DATA, "bashrc"); + path_fail_unless (CONF_DATA, "inputrc"); + path_fail_unless (CONF_DATA, MC_EXTFS_DIR); + path_fail_unless (CONF_DATA, MC_HISTORY_FILE); + path_fail_unless (CONF_DATA, MC_FILEPOS_FILE); + path_fail_unless (CONF_DATA, EDIT_CLIP_FILE); + path_fail_unless (CONF_DATA, MC_MACRO_FILE); + + path_fail_unless (CONF_CACHE, "mc.log"); + path_fail_unless (CONF_CACHE, MC_TREESTORE_FILE); + path_fail_unless (CONF_CACHE, EDIT_TEMP_FILE); + path_fail_unless (CONF_CACHE, EDIT_BLOCK_FILE); + +} +END_TEST + +/* --------------------------------------------------------------------------------------------- */ + +int +main (void) +{ + int number_failed; + + Suite *s = suite_create (TEST_SUITE_NAME); + TCase *tc_core = tcase_create ("Core"); + SRunner *sr; + + tcase_add_checked_fixture (tc_core, setup, teardown); + + /* Add new tests here: *************** */ + tcase_add_test (tc_core, user_configs_path_test); + /* *********************************** */ + + suite_add_tcase (s, tc_core); + sr = srunner_create (s); + srunner_set_log (sr, "user_configs_path.log"); +// srunner_set_fork_status (sr, CK_NOFORK); + srunner_run_all (sr, CK_NORMAL); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? 0 : 1; +} + +/* --------------------------------------------------------------------------------------------- */