diff options
Diffstat (limited to '')
-rw-r--r-- | tests/src/execute__execute_external_editor_or_viewer.c | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/tests/src/execute__execute_external_editor_or_viewer.c b/tests/src/execute__execute_external_editor_or_viewer.c new file mode 100644 index 0000000..e659477 --- /dev/null +++ b/tests/src/execute__execute_external_editor_or_viewer.c @@ -0,0 +1,200 @@ +/* + src - tests for execute_external_editor_or_viewer() function + + Copyright (C) 2013-2023 + Free Software Foundation, Inc. + + Written by: + Slava Zanko <slavazanko@gmail.com>, 2013 + + 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 <http://www.gnu.org/licenses/>. + */ + +#define TEST_SUITE_NAME "/src" + +#include "tests/mctest.h" + +#include "execute__common.c" + +/* --------------------------------------------------------------------------------------------- */ + +char *execute_get_external_cmd_opts_from_config (const char *command, + const vfs_path_t * filename_vpath, + long start_line); + +/* @CapturedValue */ +static char *execute_external_cmd_opts__command__captured; +/* @CapturedValue */ +static vfs_path_t *execute_external_cmd_opts__filename_vpath__captured; +/* @CapturedValue */ +static int execute_external_cmd_opts__start_line__captured; + +/* @ThenReturnValue */ +static char *execute_external_cmd_opts__return_value; + +/* @Mock */ +char * +execute_get_external_cmd_opts_from_config (const char *command, const vfs_path_t * filename_vpath, + long start_line) +{ + execute_external_cmd_opts__command__captured = g_strdup (command); + execute_external_cmd_opts__filename_vpath__captured = vfs_path_clone (filename_vpath); + execute_external_cmd_opts__start_line__captured = start_line; + + return execute_external_cmd_opts__return_value; +} + +static void +execute_get_external_cmd_opts_from_config__init (void) +{ + execute_external_cmd_opts__command__captured = NULL; + execute_external_cmd_opts__filename_vpath__captured = NULL; + execute_external_cmd_opts__start_line__captured = 0; +} + +static void +execute_get_external_cmd_opts_from_config__deinit (void) +{ + g_free (execute_external_cmd_opts__command__captured); + vfs_path_free (execute_external_cmd_opts__filename_vpath__captured, TRUE); +} + +/* --------------------------------------------------------------------------------------------- */ +void do_executev (const char *lc_shell, int flags, char *const argv[]); + +/* @CapturedValue */ +static char *do_executev__lc_shell__captured; +/* @CapturedValue */ +static int do_executev__flags__captured; +/* @CapturedValue */ +static GPtrArray *do_executev__argv__captured; + +/* @Mock */ +void +do_executev (const char *lc_shell, int flags, char *const argv[]) +{ + do_executev__lc_shell__captured = g_strdup (lc_shell); + do_executev__flags__captured = flags; + + for (; argv != NULL && *argv != NULL; argv++) + g_ptr_array_add (do_executev__argv__captured, g_strdup (*argv)); +} + +static void +do_executev__init (void) +{ + do_executev__lc_shell__captured = NULL; + do_executev__argv__captured = g_ptr_array_new_with_free_func (g_free); + do_executev__flags__captured = 0; +} + +static void +do_executev__deinit (void) +{ + g_free (do_executev__lc_shell__captured); + g_ptr_array_free (do_executev__argv__captured, TRUE); +} + +/* --------------------------------------------------------------------------------------------- */ + +/* @Before */ +static void +my_setup (void) +{ + setup (); + + execute_get_external_cmd_opts_from_config__init (); + do_executev__init (); +} + +/* --------------------------------------------------------------------------------------------- */ + +/* @After */ +static void +my_teardown (void) +{ + do_executev__deinit (); + execute_get_external_cmd_opts_from_config__deinit (); + + teardown (); +} + +/* --------------------------------------------------------------------------------------------- */ + +/* @Test */ +/* *INDENT-OFF* */ +START_TEST (do_open_external_editor_or_viewer) +/* *INDENT-ON* */ +{ + /* given */ + vfs_path_t *filename_vpath; + filename_vpath = vfs_path_from_str ("/path/to/file.txt"); + + vfs_file_is_local__return_value = TRUE; + execute_external_cmd_opts__return_value = + g_strdup + (" 'param 1 with spaces' \"param 2\" -a -b -cdef /path/to/file.txt +123"); + + /* when */ + execute_external_editor_or_viewer ("editor_or_viewer", filename_vpath, 123); + + /* then */ + + /* check call to execute_get_external_cmd_opts_from_config() */ + mctest_assert_str_eq (execute_external_cmd_opts__command__captured, "editor_or_viewer"); + mctest_assert_true (vfs_path_equal + (execute_external_cmd_opts__filename_vpath__captured, filename_vpath)); + ck_assert_int_eq (execute_external_cmd_opts__start_line__captured, 123); + + /* check call to do_executev() */ + mctest_assert_str_eq (do_executev__lc_shell__captured, "editor_or_viewer"); + ck_assert_int_eq (do_executev__flags__captured, EXECUTE_INTERNAL); + ck_assert_int_eq (do_executev__argv__captured->len, 7); + + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 0), + "param 1 with spaces"); + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 1), "param 2"); + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 2), "-a"); + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 3), "-b"); + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 4), "-cdef"); + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 5), "/path/to/file.txt"); + mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 6), "+123"); + + vfs_path_free (filename_vpath, TRUE); +} +/* *INDENT-OFF* */ +END_TEST +/* *INDENT-ON* */ + +/* --------------------------------------------------------------------------------------------- */ + +int +main (void) +{ + TCase *tc_core; + + tc_core = tcase_create ("Core"); + + tcase_add_checked_fixture (tc_core, my_setup, my_teardown); + + /* Add new tests here: *************** */ + tcase_add_test (tc_core, do_open_external_editor_or_viewer); + /* *********************************** */ + + return mctest_run_all (tc_core); +} + +/* --------------------------------------------------------------------------------------------- */ |