From c188153507f77987ba83f844def5b62c412c8078 Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Thu, 28 Apr 2011 17:27:05 +0300 Subject: [PATCH] Add more tests for VFS Signed-off-by: Slava Zanko --- lib/tests/vfs/Makefile.am | 6 +- lib/tests/vfs/current_dir.c | 126 ++++++++++++++++++++++++ lib/tests/vfs/vfs_path_string_convert.c | 70 +++++++++++++ 3 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 lib/tests/vfs/current_dir.c diff --git a/lib/tests/vfs/Makefile.am b/lib/tests/vfs/Makefile.am index 1889b27f6..17f572aed 100644 --- a/lib/tests/vfs/Makefile.am +++ b/lib/tests/vfs/Makefile.am @@ -3,6 +3,7 @@ LIBS=@CHECK_LIBS@ \ $(top_builddir)/lib/libmc.la TESTS = \ + current_dir \ vfs_prefix_to_class \ get_vfs_class \ vfs_split \ @@ -11,6 +12,9 @@ TESTS = \ check_PROGRAMS = $(TESTS) +current_dir_SOURCES = \ + current_dir.c + get_vfs_class_SOURCES = \ get_vfs_class.c @@ -24,4 +28,4 @@ vfs_path_string_convert_SOURCES = \ vfs_path_string_convert.c vfs_s_get_path_mangle_SOURCES = \ - vfs_s_get_path_mangle.c \ No newline at end of file + vfs_s_get_path_mangle.c diff --git a/lib/tests/vfs/current_dir.c b/lib/tests/vfs/current_dir.c new file mode 100644 index 000000000..fd108b385 --- /dev/null +++ b/lib/tests/vfs/current_dir.c @@ -0,0 +1,126 @@ +/* lib/vfs - manipulate with current directory + + Copyright (C) 2011 Free Software Foundation, Inc. + + Written by: + Slava Zanko , 2011 + + 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 + + +#include "lib/global.h" +#include "lib/strutil.h" +#include "lib/vfs/xdirentry.h" + +#include "src/vfs/local/local.c" + +static void +setup (void) +{ + str_init_strings (NULL); + + vfs_init (); + init_localfs (); + vfs_setup_work_dir (); +} + +static void +teardown (void) +{ + vfs_shut (); +} + +static int +test_chdir(const vfs_path_t * vpath) +{ +#if 0 + char *path = vfs_path_to_str(vpath); + printf("test_chdir: %s\n", path); + g_free(path); +#else + (void) vpath; +#endif + return 0; +} + +/* --------------------------------------------------------------------------------------------- */ + +#define cd_and_check( cd_dir, etalon ) \ + mc_chdir(cd_dir); \ + fail_unless( \ + strcmp(etalon, mc_get_current_wd(buffer,MC_MAXPATHLEN)) == 0, \ + "\n expected(%s) doesn't equal \nto actual(%s)", etalon, buffer); + +START_TEST (set_up_current_dir) +{ + static struct vfs_s_subclass test_subclass; + static struct vfs_class vfs_test_ops; + char buffer[MC_MAXPATHLEN]; + + test_subclass.flags = VFS_S_REMOTE; + vfs_s_init_class (&vfs_test_ops, &test_subclass); + + vfs_test_ops.name = "testfs"; + vfs_test_ops.flags = VFSF_NOLINKS; + vfs_test_ops.prefix = "test:"; + vfs_test_ops.chdir = test_chdir; + + vfs_register_class (&vfs_test_ops); + + cd_and_check ("/dev/some.file#test:/bla-bla", "/dev/some.file#test:/bla-bla"); + + cd_and_check ("..", "/dev/some.file#test:"); + + cd_and_check ("..", "/dev"); + + cd_and_check ("..", "/"); + + cd_and_check ("..", "/"); + +} +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, set_up_current_dir); + /* *********************************** */ + + suite_add_tcase (s, tc_core); + sr = srunner_create (s); + srunner_set_log (sr, "get_vfs_class.log"); + srunner_run_all (sr, CK_NORMAL); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? 0 : 1; +} + +/* --------------------------------------------------------------------------------------------- */ diff --git a/lib/tests/vfs/vfs_path_string_convert.c b/lib/tests/vfs/vfs_path_string_convert.c index 3f75539d2..258ca8fd0 100644 --- a/lib/tests/vfs/vfs_path_string_convert.c +++ b/lib/tests/vfs/vfs_path_string_convert.c @@ -94,6 +94,75 @@ START_TEST (test_vfs_path_from_to_string) END_TEST /* --------------------------------------------------------------------------------------------- */ +START_TEST (test_vfs_path_from_to_partial_string_by_class) +{ + vfs_path_t *vpath; + char *result; + vpath = vfs_path_from_str (ETALON_PATH_STR); + + + result = vfs_path_to_str_elements_count(vpath, -1); + fail_unless( + strcmp("/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path", result); + g_free(result); + + result = vfs_path_to_str_elements_count(vpath, -2); + fail_unless( + strcmp("/#test1:/bla-bla/some/path/", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "/#test1:/bla-bla/some/path/", result); + g_free(result); + + result = vfs_path_to_str_elements_count(vpath, -3); + fail_unless( + strcmp("/", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "/", result); + g_free(result); + + /* index out of bound*/ + result = vfs_path_to_str_elements_count(vpath, -4); + fail_unless( + strcmp("", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "", result); + g_free(result); + + + result = vfs_path_to_str_elements_count(vpath, 1); + fail_unless( + strcmp("/", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "/", result); + g_free(result); + + result = vfs_path_to_str_elements_count(vpath, 2); + fail_unless( + strcmp("/#test1:/bla-bla/some/path/", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "/#test1:/bla-bla/some/path/", result); + g_free(result); + + result = vfs_path_to_str_elements_count(vpath, 3); + fail_unless( + strcmp("/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path", result) == 0, + "expected(%s) doesn't equal to actual(%s)", "/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path", result); + g_free(result); + + result = vfs_path_to_str_elements_count(vpath, 4); + fail_unless( + strcmp(ETALON_PATH_STR, result) == 0, + "expected(%s) doesn't equal to actual(%s)", ETALON_PATH_STR, result); + g_free(result); + + /* index out of bound*/ + result = vfs_path_to_str_elements_count(vpath, 5); + fail_unless( + strcmp(ETALON_PATH_STR, result) == 0, + "expected(%s) doesn't equal to actual(%s)", ETALON_PATH_STR, result); + g_free(result); + + vfs_path_free(vpath); +} +END_TEST +/* --------------------------------------------------------------------------------------------- */ + int main (void) @@ -108,6 +177,7 @@ main (void) /* Add new tests here: *************** */ tcase_add_test (tc_core, test_vfs_path_from_to_string); + tcase_add_test (tc_core, test_vfs_path_from_to_partial_string_by_class); /* *********************************** */ suite_add_tcase (s, tc_core);