From a57d45d59005c2fe8a3a5d1c4365c9c4ba7853f3 Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Fri, 8 Nov 2013 16:57:42 +0300 Subject: [PATCH] Ticket #3098: vfs_path_from_str_flags() doesn't support VPF_STRIP_HOME Signed-off-by: Slava Zanko --- lib/vfs/path.c | 2 +- tests/lib/vfs/Makefile.am | 4 + tests/lib/vfs/vfs_path_from_str_flags.c | 134 ++++++++++++++++++++++++++++++++ 3 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 tests/lib/vfs/vfs_path_from_str_flags.c diff --git a/lib/vfs/path.c b/lib/vfs/path.c index 7e69b49bc..e847a2b4e 100644 --- a/lib/vfs/path.c +++ b/lib/vfs/path.c @@ -739,7 +739,7 @@ vfs_path_from_str_flags (const char *path_str, vfs_path_flag_t flags) else vpath = vfs_path_from_str_uri_parser (path, flags); - vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE); + vpath->str = vfs_path_to_str_flags (vpath, 0, flags); g_free (path); return vpath; diff --git a/tests/lib/vfs/Makefile.am b/tests/lib/vfs/Makefile.am index 58146f127..226f3f650 100644 --- a/tests/lib/vfs/Makefile.am +++ b/tests/lib/vfs/Makefile.am @@ -23,6 +23,7 @@ TESTS = \ relative_cd \ tempdir \ vfs_parse_ls_lga \ + vfs_path_from_str_flags \ vfs_path_string_convert \ vfs_prefix_to_class \ vfs_split \ @@ -74,6 +75,9 @@ vfs_parse_ls_lga_SOURCES = \ vfs_prefix_to_class_SOURCES = \ vfs_prefix_to_class.c +vfs_path_from_str_flags_SOURCES = \ + vfs_path_from_str_flags.c + vfs_path_string_convert_SOURCES = \ vfs_path_string_convert.c diff --git a/tests/lib/vfs/vfs_path_from_str_flags.c b/tests/lib/vfs/vfs_path_from_str_flags.c new file mode 100644 index 000000000..f47489268 --- /dev/null +++ b/tests/lib/vfs/vfs_path_from_str_flags.c @@ -0,0 +1,134 @@ +/* lib/vfs - test vfs_path_from_str_flags() function + + Copyright (C) 2013 + The Free Software Foundation, Inc. + + Written by: + Slava Zanko , 2013 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program 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 Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#define TEST_SUITE_NAME "/lib/vfs" + +#include "tests/mctest.h" + +#include "lib/strutil.h" +#include "lib/vfs/xdirentry.h" +#include "lib/vfs/path.h" + +#include "src/vfs/local/local.c" + +const char *mc_config_get_home_dir (void); + +/* --------------------------------------------------------------------------------------------- */ + +/* @Mock */ +const char * +mc_config_get_home_dir (void) +{ + return "/mock/test"; +} + +/* --------------------------------------------------------------------------------------------- */ +/* @Before */ +static void +setup (void) +{ + str_init_strings (NULL); + + vfs_init (); + init_localfs (); + vfs_setup_work_dir (); +} + +/* --------------------------------------------------------------------------------------------- */ + +/* @After */ +static void +teardown (void) +{ + vfs_shut (); + str_uninit_strings (); +} + +/* --------------------------------------------------------------------------------------------- */ + +/* @DataSource("test_from_to_string_ds") */ +/* *INDENT-OFF* */ +static const struct test_strip_home_ds +{ + const char *input_string; + const char *expected_result; +} test_strip_home_ds[] = +{ + { /* 0. */ + "/mock/test/some/path", + "~/some/path" + }, + { /* 1. */ + "/mock/testttt/some/path", + "/mock/testttt/some/path" + }, +}; +/* *INDENT-ON* */ + +/* @Test */ +/* *INDENT-OFF* */ +START_PARAMETRIZED_TEST (test_strip_home, test_strip_home_ds) +/* *INDENT-ON* */ +{ + /* given */ + vfs_path_t *actual_result; + + /* when */ + actual_result = vfs_path_from_str_flags (data->input_string, VPF_STRIP_HOME); + + /* then */ + mctest_assert_str_eq (actual_result->str, data->expected_result); + + vfs_path_free (actual_result); +} +/* *INDENT-OFF* */ +END_PARAMETRIZED_TEST +/* *INDENT-ON* */ + +/* --------------------------------------------------------------------------------------------- */ + +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: *************** */ + mctest_add_parameterized_test (tc_core, test_strip_home, test_strip_home_ds); + /* *********************************** */ + + suite_add_tcase (s, tc_core); + sr = srunner_create (s); + srunner_set_log (sr, "vfs_path_from_str_flags.log"); + srunner_run_all (sr, CK_NORMAL); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? 0 : 1; +} + +/* --------------------------------------------------------------------------------------------- */ -- 2.11.4.GIT