xaizek / vifm (License: GPLv2+) (since 2018-12-07)
Vifm is a file manager with curses interface, which provides Vi[m]-like environment for managing objects within file systems, extended with some useful ideas from mutt.
Commit f44b21ad45ff7561cbe24bb91d048ef4ef3cbadf

Use assoc_{programs,viewers}() in all test suites
Author: xaizek
Author date (UTC): 2025-07-14 07:52
Committer name: xaizek
Committer date (UTC): 2025-07-14 07:52
Parent(s): 2018d23bb31216c70a9f64f3326e5a7957a934c0
Signing key: 99DC5E4DB05F6BE2
Tree: e825048ab2669a50cdf6ba43e6fe38174544e417
File Lines added Lines deleted
tests/menus/filetypes.c 3 18
tests/misc/quickview.c 3 18
tests/misc/running.c 13 73
tests/misc/view_mode.c 2 12
tests/misc/vifminfo.c 2 9
File tests/menus/filetypes.c changed (mode: 100644) (index d729fa98d..9a703b3da)
... ... TEST(unknown_key_is_ignored)
111 111
112 112 TEST(pseudo_entry_is_always_present_for_directories) TEST(pseudo_entry_is_always_present_for_directories)
113 113 { {
114 char *error;
115 matchers_group_t mg;
116 assert_success(ft_mg_from_string("{bla-*/}", &mg, &error));
117 assert_string_equal(NULL, error);
118
119 ft_set_programs(mg, "abc-run %c", 0, 0);
114 assoc_programs("{bla-*/}", "abc-run %c", 0, 0);
120 115
121 116 assert_success(cmds_dispatch("filetype bla-dir/", &lwin, CIT_COMMAND)); assert_success(cmds_dispatch("filetype bla-dir/", &lwin, CIT_COMMAND));
122 117
 
... ... TEST(no_menu_if_no_handlers)
136 131
137 132 TEST(filetypes_menu) TEST(filetypes_menu)
138 133 { {
139 char *error;
140 matchers_group_t mg;
141 assert_success(ft_mg_from_string("{a,b,c}", &mg, &error));
142 assert_string_equal(NULL, error);
143
144 ft_set_programs(mg, "abc-run %c", 0, 0);
134 assoc_programs("{a,b,c}", "abc-run %c", 0, 0);
145 135
146 136 assert_success(cmds_dispatch("filetype b", &lwin, CIT_COMMAND)); assert_success(cmds_dispatch("filetype b", &lwin, CIT_COMMAND));
147 137
 
... ... TEST(filetypes_menu)
153 143
154 144 TEST(fileviewers_menu) TEST(fileviewers_menu)
155 145 { {
156 char *error;
157 matchers_group_t mg;
158 assert_success(ft_mg_from_string("{a,b,c}", &mg, &error));
159 assert_string_equal(NULL, error);
160
161 ft_set_viewers(mg, "abc-view %c");
146 assoc_viewers("{a,b,c}", "abc-view %c");
162 147
163 148 assert_success(cmds_dispatch("fileviewer c", &lwin, CIT_COMMAND)); assert_success(cmds_dispatch("fileviewer c", &lwin, CIT_COMMAND));
164 149
File tests/misc/quickview.c changed (mode: 100644) (index 058798e3e..2983a4931)
... ... TEST(preview_can_match_agains_full_paths)
55 55 { {
56 56 ft_init(NULL); ft_init(NULL);
57 57
58 char *error;
59 matchers_group_t mg;
60 assert_success(ft_mg_from_string("{{*/*}}", &mg, &error));
61 assert_string_equal(NULL, error);
62
63 ft_set_viewers(mg, "the-viewer");
58 assoc_viewers("{{*/*}}", "the-viewer");
64 59
65 60 assert_string_equal("the-viewer", assert_string_equal("the-viewer",
66 61 qv_get_viewer(TEST_DATA_PATH "/read/two-lines")); qv_get_viewer(TEST_DATA_PATH "/read/two-lines"));
 
... ... TEST(preview_prg_overrules_fileviewer)
72 67 { {
73 68 ft_init(NULL); ft_init(NULL);
74 69
75 char *error;
76 matchers_group_t mg;
77 assert_success(ft_mg_from_string("file", &mg, &error));
78 assert_string_equal(NULL, error);
79
80 ft_set_viewers(mg, "the-viewer");
70 assoc_viewers("file", "the-viewer");
81 71
82 72 assert_string_equal("the-viewer", qv_get_viewer("file")); assert_string_equal("the-viewer", qv_get_viewer("file"));
83 73 update_string(&curr_view->preview_prg, "override"); update_string(&curr_view->preview_prg, "override");
 
... ... TEST(quick_view_picks_parent_directory_if_there_is_a_match)
156 146 dir_entry_t entry = { .origin = origin, .name = name, .type = FT_DIR }; dir_entry_t entry = { .origin = origin, .name = name, .type = FT_DIR };
157 147 char path[PATH_MAX + 1]; char path[PATH_MAX + 1];
158 148
159 char *error;
160 matchers_group_t mg;
161 assert_success(ft_mg_from_string("../", &mg, &error));
162 assert_string_equal(NULL, error);
163
164 ft_set_viewers(mg, "do something");
149 assoc_viewers("../", "do something");
165 150
166 151 qv_get_path_to_explore(&entry, path, sizeof(path)); qv_get_path_to_explore(&entry, path, sizeof(path));
167 152 assert_string_equal("/path/..", path); assert_string_equal("/path/..", path);
File tests/misc/running.c changed (mode: 100644) (index a32eb5dc6..7b5fcd0ea)
... ... static void stop_use_script(void);
31 31 static void assoc_a(char macro); static void assoc_a(char macro);
32 32 static void assoc_b(char macro); static void assoc_b(char macro);
33 33 static void assoc_common(void); static void assoc_common(void);
34 static void assoc(const char pattern[], const char cmd[]);
35 34
36 35 static char cwd[PATH_MAX + 1]; static char cwd[PATH_MAX + 1];
37 36 static char script_path[PATH_MAX + 1]; static char script_path[PATH_MAX + 1];
 
... ... TEST(full_path_regexps_are_handled_for_selection)
101 100
102 101 char pattern[PATH_MAX + 16]; char pattern[PATH_MAX + 16];
103 102 snprintf(pattern, sizeof(pattern), "//%s/*//", lwin.curr_dir); snprintf(pattern, sizeof(pattern), "//%s/*//", lwin.curr_dir);
104
105 char *error;
106 matchers_group_t mg;
107 assert_success(ft_mg_from_string(pattern, &mg, &error));
108 assert_string_equal(NULL, error);
109
110 ft_set_programs(mg, "echo %f >> " SANDBOX_PATH "/run", 0, 1);
103 assoc_programs(pattern, "echo %f >> " SANDBOX_PATH "/run", 0, 1);
111 104
112 105 rn_open(&lwin, FHE_NO_RUN); rn_open(&lwin, FHE_NO_RUN);
113 106
 
... ... TEST(full_path_regexps_are_handled_for_selection2)
123 116 char pattern[PATH_MAX + 16]; char pattern[PATH_MAX + 16];
124 117 snprintf(pattern, sizeof(pattern), "//%s/*//", lwin.curr_dir); snprintf(pattern, sizeof(pattern), "//%s/*//", lwin.curr_dir);
125 118
126 char *error;
127 matchers_group_t mg;
128 assert_success(ft_mg_from_string(pattern, &mg, &error));
129 assert_string_equal(NULL, error);
130
131 119 #ifndef _WIN32 #ifndef _WIN32
132 ft_set_programs(mg, "echo > /dev/null %c &", 0, 1);
120 assoc_programs(pattern, "echo > /dev/null %c &", 0, 1);
133 121 #else #else
134 ft_set_programs(mg, "echo > NUL %c &", 0, 1);
122 assoc_programs(pattern, "echo > NUL %c &", 0, 1);
135 123 #endif #endif
136 124
137 125 rn_open(&lwin, FHE_NO_RUN); rn_open(&lwin, FHE_NO_RUN);
 
... ... TEST(can_open_via_plugin)
148 136 GLUA_EQ(curr_stats.vlua, "", GLUA_EQ(curr_stats.vlua, "",
149 137 "vifm.addhandler{ name = 'open', handler = open }"); "vifm.addhandler{ name = 'open', handler = open }");
150 138
151 char *error;
152 matchers_group_t mg;
153 assert_success(ft_mg_from_string("*", &mg, &error));
154 assert_string_equal(NULL, error);
155
156 ft_set_programs(mg, "#vifmtest#open", /*for_x=*/0, /*in_x=*/1);
139 assoc_programs("*", "#vifmtest#open", /*for_x=*/0, /*in_x=*/1);
157 140
158 141 rn_open(&lwin, FHE_NO_RUN); rn_open(&lwin, FHE_NO_RUN);
159 142
 
... ... TEST(selection_is_incompatible, IF(not_windows))
294 277 TEST(selection_is_compatible, IF(not_windows)) TEST(selection_is_compatible, IF(not_windows))
295 278 { {
296 279 start_use_script(); start_use_script();
297 assoc("{a}", "echo > /dev/null %c &");
298 assoc("{b}", "echo > /dev/null %c &");
280 assoc_programs("{a}", "echo > /dev/null %c &", 0, 0);
281 assoc_programs("{b}", "echo > /dev/null %c &", 0, 0);
299 282
300 283 rn_open(&lwin, FHE_NO_RUN); rn_open(&lwin, FHE_NO_RUN);
301 284
 
... ... TEST(macro_can_be_added_implicitly, IF(not_windows))
430 413 lwin.dir_entry[1].selected = 0; lwin.dir_entry[1].selected = 0;
431 414 --lwin.selected_files; --lwin.selected_files;
432 415
433 char *error;
434 matchers_group_t mg;
435 assert_success(ft_mg_from_string("{a}", &mg, &error));
436 assert_string_equal(NULL, error);
437
438 416 char cmd[PATH_MAX + 1]; char cmd[PATH_MAX + 1];
439 417 snprintf(cmd, sizeof(cmd), "%s a", script_path); snprintf(cmd, sizeof(cmd), "%s a", script_path);
440 ft_set_programs(mg, cmd, 0, 0);
418 assoc_programs("{a}", cmd, 0, 0);
441 419
442 420 rn_open(&lwin, FHE_NO_RUN); rn_open(&lwin, FHE_NO_RUN);
443 421
 
... ... TEST(handler_can_be_matched_by_a_prefix, IF(not_windows))
456 434 lwin.dir_entry[1].selected = 0; lwin.dir_entry[1].selected = 0;
457 435 --lwin.selected_files; --lwin.selected_files;
458 436
459 char *error;
460 matchers_group_t mg;
461 assert_success(ft_mg_from_string("{a}", &mg, &error));
462 assert_string_equal(NULL, error);
463
464 437 char cmd[PATH_MAX + 1]; char cmd[PATH_MAX + 1];
465 438 snprintf(cmd, sizeof(cmd), "{wrong}no-such-cmd a, {right}%s a", script_path); snprintf(cmd, sizeof(cmd), "{wrong}no-such-cmd a, {right}%s a", script_path);
466 ft_set_programs(mg, cmd, 0, 0);
439 assoc_programs("{a}", cmd, 0, 0);
467 440
468 441 rn_open_with_match(&lwin, script_path, 0); rn_open_with_match(&lwin, script_path, 0);
469 442
 
... ... TEST(selection_multi_run, IF(not_windows))
482 455
483 456 char cmd[PATH_MAX + 1]; char cmd[PATH_MAX + 1];
484 457
485 char *error;
486 matchers_group_t mg;
487
488 assert_success(ft_mg_from_string("{a}", &mg, &error));
489 assert_string_equal(NULL, error);
490 458 snprintf(cmd, sizeof(cmd), "%s a %%c &", script_path); snprintf(cmd, sizeof(cmd), "%s a %%c &", script_path);
491 ft_set_programs(mg, cmd, /*for_x=*/0, /*in_x=*/0);
459 assoc_programs("{a}", cmd, /*for_x=*/0, /*in_x=*/0);
492 460
493 assert_success(ft_mg_from_string("{b}", &mg, &error));
494 assert_string_equal(NULL, error);
495 461 snprintf(cmd, sizeof(cmd), "%s b %%\"c &", script_path); snprintf(cmd, sizeof(cmd), "%s b %%\"c &", script_path);
496 ft_set_programs(mg, cmd, /*for_x=*/0, /*in_x=*/0);
462 assoc_programs("{b}", cmd, /*for_x=*/0, /*in_x=*/0);
497 463
498 464 rn_open(&lwin, FHE_NO_RUN); rn_open(&lwin, FHE_NO_RUN);
499 465
 
... ... stop_use_script(void)
708 674 static void static void
709 675 assoc_a(char macro) assoc_a(char macro)
710 676 { {
711 char *error;
712 matchers_group_t mg;
713 assert_success(ft_mg_from_string("{a}", &mg, &error));
714 assert_string_equal(NULL, error);
715
716 677 char cmd[PATH_MAX + 1]; char cmd[PATH_MAX + 1];
717 678 snprintf(cmd, sizeof(cmd), "%s a %%%c", script_path, macro); snprintf(cmd, sizeof(cmd), "%s a %%%c", script_path, macro);
718 ft_set_programs(mg, cmd, 0, 0);
679 assoc_programs("{a}", cmd, 0, 0);
719 680 } }
720 681
721 682 static void static void
722 683 assoc_b(char macro) assoc_b(char macro)
723 684 { {
724 char *error;
725 matchers_group_t mg;
726 assert_success(ft_mg_from_string("{b}", &mg, &error));
727 assert_string_equal(NULL, error);
728
729 685 char cmd[PATH_MAX + 1]; char cmd[PATH_MAX + 1];
730 686 snprintf(cmd, sizeof(cmd), "%s b %%%c", script_path, macro); snprintf(cmd, sizeof(cmd), "%s b %%%c", script_path, macro);
731 ft_set_programs(mg, cmd, 0, 0);
687 assoc_programs("{b}", cmd, 0, 0);
732 688 } }
733 689
734 690 static void static void
735 691 assoc_common(void) assoc_common(void)
736 692 { {
737 char *error;
738 matchers_group_t mg;
739 assert_success(ft_mg_from_string("{a,b}", &mg, &error));
740 assert_string_equal(NULL, error);
741
742 693 char cmd[PATH_MAX + 1]; char cmd[PATH_MAX + 1];
743 694 snprintf(cmd, sizeof(cmd), "%s common %%f", script_path); snprintf(cmd, sizeof(cmd), "%s common %%f", script_path);
744 ft_set_programs(mg, cmd, 0, 0);
745 }
746
747 static void
748 assoc(const char pattern[], const char cmd[])
749 {
750 char *error;
751 matchers_group_t mg;
752 assert_success(ft_mg_from_string(pattern, &mg, &error));
753 assert_string_equal(NULL, error);
754
755 ft_set_programs(mg, cmd, 0, 0);
695 assoc_programs("{a,b}", cmd, 0, 0);
756 696 } }
757 697
758 698 /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */ /* vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : */
File tests/misc/view_mode.c changed (mode: 100644) (index 17871eeb7..a116b8628)
... ... TEST(previewprg_is_applied)
329 329 opt_handlers_setup(); opt_handlers_setup();
330 330 update_string(&lwin.preview_prg, "echo previewprg_is_applied%%"); update_string(&lwin.preview_prg, "echo previewprg_is_applied%%");
331 331
332 char *error;
333 matchers_group_t mg;
334 assert_success(ft_mg_from_string("*", &mg, &error));
335 assert_string_equal(NULL, error);
336
337 ft_set_viewers(mg, "echo viewer%%");
332 assoc_viewers("*", "echo viewer%%");
338 333
339 334 make_abs_path(lwin.curr_dir, sizeof(lwin.curr_dir), TEST_DATA_PATH, "read", make_abs_path(lwin.curr_dir, sizeof(lwin.curr_dir), TEST_DATA_PATH, "read",
340 335 NULL); NULL);
 
... ... start_view_mode(const char pattern[], const char viewers[],
398 393 { {
399 394 if(viewers != NULL) if(viewers != NULL)
400 395 { {
401 char *error;
402 matchers_group_t mg;
403 assert_success(ft_mg_from_string(pattern, &mg, &error));
404 assert_string_equal(NULL, error);
405
406 ft_set_viewers(mg, viewers);
396 assoc_viewers(pattern, viewers);
407 397 } }
408 398
409 399 make_abs_path(lwin.curr_dir, sizeof(lwin.curr_dir), base_dir, sub_path, NULL); make_abs_path(lwin.curr_dir, sizeof(lwin.curr_dir), base_dir, sub_path, NULL);
File tests/misc/vifminfo.c changed (mode: 100644) (index 242a27ca2..8a926d60a)
... ... TEST(filetypes_are_deduplicated)
93 93 cfg.vifm_info = VINFO_FILETYPES; cfg.vifm_info = VINFO_FILETYPES;
94 94 cmds_init(); cmds_init();
95 95
96 char *error;
97 matchers_group_t mg;
98
99 96 /* Add a filetype. */ /* Add a filetype. */
100 assert_success(ft_mg_from_string("*.c", &mg, &error));
101 assert_string_equal(NULL, error);
102 ft_set_programs(mg, "{Description}com,,mand,{descr2}cmd", 0, 1);
97 assoc_programs("*.c", "{Description}com,,mand,{descr2}cmd", 0, 1);
103 98
104 99 /* Write it first time. */ /* Write it first time. */
105 100 write_info_file(); write_info_file();
 
... ... TEST(filetypes_are_deduplicated)
107 102 assert_success(stat(SANDBOX_PATH "/vifminfo.json", &first)); assert_success(stat(SANDBOX_PATH "/vifminfo.json", &first));
108 103
109 104 /* Add filetype again (as if it was read from vifmrc). */ /* Add filetype again (as if it was read from vifmrc). */
110 assert_success(ft_mg_from_string("*.c", &mg, &error));
111 assert_string_equal(NULL, error);
112 ft_set_programs(mg, "{Description}com,,mand,{descr2}cmd", 0, 1);
105 assoc_programs("*.c", "{Description}com,,mand,{descr2}cmd", 0, 1);
113 106
114 107 /* Update vifminfo second time. */ /* Update vifminfo second time. */
115 108 write_info_file(); write_info_file();
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vifm

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vifm

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master