2 lib/vfs - manipulate with current directory
4 Copyright (C) 2011-2024
5 Free Software Foundation, Inc.
8 Slava Zanko <slavazanko@gmail.com>, 2011, 2013
10 This file is part of the Midnight Commander.
12 The Midnight Commander is free software: you can redistribute it
13 and/or modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation, either version 3 of the License,
15 or (at your option) any later version.
17 The Midnight Commander is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program. If not, see <http://www.gnu.org/licenses/>.
26 #define TEST_SUITE_NAME "/lib/vfs"
28 #include "tests/mctest.h"
30 #include <string.h> /* memset() */
32 #include "lib/global.h"
33 #include "lib/strutil.h"
34 #include "lib/vfs/xdirentry.h"
36 #include "src/vfs/local/local.c"
38 static struct vfs_s_subclass vfs_test_subclass
;
39 static struct vfs_class
*vfs_test_ops
= VFS_CLASS (&vfs_test_subclass
);
41 /* --------------------------------------------------------------------------------------------- */
45 test_chdir (const vfs_path_t
*vpath
)
52 /* --------------------------------------------------------------------------------------------- */
58 str_init_strings (NULL
);
62 vfs_setup_work_dir ();
64 memset (&vfs_test_subclass
, 0, sizeof (vfs_test_subclass
));
65 vfs_init_class (vfs_test_ops
, "testfs", VFSF_UNKNOWN
, "test");
66 vfs_test_ops
->chdir
= test_chdir
;
69 /* --------------------------------------------------------------------------------------------- */
76 str_uninit_strings ();
79 /* --------------------------------------------------------------------------------------------- */
81 /* @DataSource("test_cd_ds") */
83 static const struct test_cd_ds
85 const char *input_initial_path
;
86 const char *input_cd_path
;
87 const vfs_flags_t input_class_flags
;
89 const char *expected_cd_path
;
94 "/dev/some.file/test://",
96 "/dev/some.file/test://"
100 "/dev/some.file/test://bla-bla",
102 "/dev/some.file/test://bla-bla"
105 "/dev/some.file/test://bla-bla",
108 "/dev/some.file/test://"
111 "/dev/some.file/test://",
130 "/test://user:pass@host.net/path",
131 VFSF_NOLINKS
| VFSF_REMOTE
,
132 "/test://user:pass@host.net/path"
135 "/test://user:pass@host.net/path",
137 VFSF_NOLINKS
| VFSF_REMOTE
,
138 "/test://user:pass@host.net/"
141 "/test://user:pass@host.net/",
143 VFSF_NOLINKS
| VFSF_REMOTE
,
149 /* @Test(dataSource = "test_cd_ds") */
151 START_PARAMETRIZED_TEST (test_cd
, test_cd_ds
)
157 vfs_test_ops
->flags
= data
->input_class_flags
;
158 vfs_register_class (vfs_test_ops
);
160 vfs_set_raw_current_dir (vfs_path_from_str (data
->input_initial_path
));
162 vpath
= vfs_path_from_str (data
->input_cd_path
);
169 char *actual_cd_path
;
171 actual_cd_path
= vfs_get_cwd ();
172 mctest_assert_str_eq (actual_cd_path
, data
->expected_cd_path
);
173 g_free (actual_cd_path
);
175 vfs_path_free (vpath
, TRUE
);
177 vfs_unregister_class (vfs_test_ops
);
180 END_PARAMETRIZED_TEST
183 /* --------------------------------------------------------------------------------------------- */
191 tc_core
= tcase_create ("Core");
193 /* writable directory where check creates temporary files */
194 cwd
= g_get_current_dir ();
195 g_setenv ("TEMP", cwd
, TRUE
);
198 tcase_add_checked_fixture (tc_core
, setup
, teardown
);
200 /* Add new tests here: *************** */
201 mctest_add_parameterized_test (tc_core
, test_cd
, test_cd_ds
);
202 /* *********************************** */
204 return mctest_run_all (tc_core
);
207 /* --------------------------------------------------------------------------------------------- */