Merge branch '3205_eta'
[midnight-commander.git] / tests / src / execute__execute_external_editor_or_viewer.c
blob79f8b4fa6654c3d1c9f6ffa2411755683ff34bca
1 /*
2 src - tests for execute_external_editor_or_viewer() function
4 Copyright (C) 2013-2024
5 Free Software Foundation, Inc.
7 Written by:
8 Slava Zanko <slavazanko@gmail.com>, 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 "/src"
28 #include "tests/mctest.h"
30 #include "execute__common.c"
32 /* --------------------------------------------------------------------------------------------- */
34 char *execute_get_external_cmd_opts_from_config (const char *command,
35 const vfs_path_t * filename_vpath,
36 long start_line);
38 /* @CapturedValue */
39 static char *execute_external_cmd_opts__command__captured;
40 /* @CapturedValue */
41 static vfs_path_t *execute_external_cmd_opts__filename_vpath__captured;
42 /* @CapturedValue */
43 static int execute_external_cmd_opts__start_line__captured;
45 /* @ThenReturnValue */
46 static char *execute_external_cmd_opts__return_value;
48 /* @Mock */
49 char *
50 execute_get_external_cmd_opts_from_config (const char *command, const vfs_path_t *filename_vpath,
51 long start_line)
53 execute_external_cmd_opts__command__captured = g_strdup (command);
54 execute_external_cmd_opts__filename_vpath__captured = vfs_path_clone (filename_vpath);
55 execute_external_cmd_opts__start_line__captured = start_line;
57 return execute_external_cmd_opts__return_value;
60 static void
61 execute_get_external_cmd_opts_from_config__init (void)
63 execute_external_cmd_opts__command__captured = NULL;
64 execute_external_cmd_opts__filename_vpath__captured = NULL;
65 execute_external_cmd_opts__start_line__captured = 0;
68 static void
69 execute_get_external_cmd_opts_from_config__deinit (void)
71 g_free (execute_external_cmd_opts__command__captured);
72 vfs_path_free (execute_external_cmd_opts__filename_vpath__captured, TRUE);
75 /* --------------------------------------------------------------------------------------------- */
76 void do_executev (const char *lc_shell, int flags, char *const argv[]);
78 /* @CapturedValue */
79 static char *do_executev__lc_shell__captured;
80 /* @CapturedValue */
81 static int do_executev__flags__captured;
82 /* @CapturedValue */
83 static GPtrArray *do_executev__argv__captured;
85 /* @Mock */
86 void
87 do_executev (const char *lc_shell, int flags, char *const argv[])
89 do_executev__lc_shell__captured = g_strdup (lc_shell);
90 do_executev__flags__captured = flags;
92 for (; argv != NULL && *argv != NULL; argv++)
93 g_ptr_array_add (do_executev__argv__captured, g_strdup (*argv));
96 static void
97 do_executev__init (void)
99 do_executev__lc_shell__captured = NULL;
100 do_executev__argv__captured = g_ptr_array_new_with_free_func (g_free);
101 do_executev__flags__captured = 0;
104 static void
105 do_executev__deinit (void)
107 g_free (do_executev__lc_shell__captured);
108 g_ptr_array_free (do_executev__argv__captured, TRUE);
111 /* --------------------------------------------------------------------------------------------- */
113 /* @Before */
114 static void
115 my_setup (void)
117 setup ();
119 execute_get_external_cmd_opts_from_config__init ();
120 do_executev__init ();
123 /* --------------------------------------------------------------------------------------------- */
125 /* @After */
126 static void
127 my_teardown (void)
129 do_executev__deinit ();
130 execute_get_external_cmd_opts_from_config__deinit ();
132 teardown ();
135 /* --------------------------------------------------------------------------------------------- */
137 /* @Test */
138 /* *INDENT-OFF* */
139 START_TEST (do_open_external_editor_or_viewer)
140 /* *INDENT-ON* */
142 /* given */
143 vfs_path_t *filename_vpath;
144 filename_vpath = vfs_path_from_str ("/path/to/file.txt");
146 vfs_file_is_local__return_value = TRUE;
147 execute_external_cmd_opts__return_value =
148 g_strdup
149 (" 'param 1 with spaces' \"param 2\" -a -b -cdef /path/to/file.txt +123");
151 /* when */
152 execute_external_editor_or_viewer ("editor_or_viewer", filename_vpath, 123);
154 /* then */
156 /* check call to execute_get_external_cmd_opts_from_config() */
157 mctest_assert_str_eq (execute_external_cmd_opts__command__captured, "editor_or_viewer");
158 mctest_assert_true (vfs_path_equal
159 (execute_external_cmd_opts__filename_vpath__captured, filename_vpath));
160 ck_assert_int_eq (execute_external_cmd_opts__start_line__captured, 123);
162 /* check call to do_executev() */
163 mctest_assert_str_eq (do_executev__lc_shell__captured, "editor_or_viewer");
164 ck_assert_int_eq (do_executev__flags__captured, EXECUTE_INTERNAL);
165 ck_assert_int_eq (do_executev__argv__captured->len, 7);
167 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 0),
168 "param 1 with spaces");
169 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 1), "param 2");
170 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 2), "-a");
171 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 3), "-b");
172 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 4), "-cdef");
173 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 5), "/path/to/file.txt");
174 mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 6), "+123");
176 vfs_path_free (filename_vpath, TRUE);
178 /* *INDENT-OFF* */
179 END_TEST
180 /* *INDENT-ON* */
182 /* --------------------------------------------------------------------------------------------- */
185 main (void)
187 TCase *tc_core;
189 tc_core = tcase_create ("Core");
191 tcase_add_checked_fixture (tc_core, my_setup, my_teardown);
193 /* Add new tests here: *************** */
194 tcase_add_test (tc_core, do_open_external_editor_or_viewer);
195 /* *********************************** */
197 return mctest_run_all (tc_core);
200 /* --------------------------------------------------------------------------------------------- */