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 976c783029b64935f198396a1459157d0ee0be7a

Modernize misc/flist_reload fixture
* Add parameter comments in a few places.
* Adjust includes.
* Use make_abs_path().
* Use create_dir().
* Use remove_dir(), where applicable (this caught unnecessary directory
removal in closest_match_above_is_choosen).
Author: xaizek
Author date (UTC): 2026-10-04 13:17
Committer name: xaizek
Committer date (UTC): 2026-10-17 15:58
Parent(s): cc97740ad291d48caae8bc3989493514b3dad8ad
Signing key: 99DC5E4DB05F6BE2
Tree: 0071365e8985ed0c97c6289e1ee0f5769fd2b785
File Lines added Lines deleted
tests/misc/flist_reload.c 22 31
File tests/misc/flist_reload.c changed (mode: 100644) (index 0eb304ea0..db6df5dda)
1 1 #include <stic.h> #include <stic.h>
2 2
3 #include <unistd.h> /* chdir() rmdir() */
4
3 5 #include <stddef.h> /* NULL */ #include <stddef.h> /* NULL */
4 #include <string.h> /* memset() */
5 6
6 7 #include <test-utils.h> #include <test-utils.h>
7 8
8 #include "../../src/cfg/config.h"
9 #include "../../src/compat/os.h"
10 #include "../../src/compat/fs_limits.h"
11 9 #include "../../src/ui/ui.h" #include "../../src/ui/ui.h"
12 #include "../../src/utils/fs.h"
13 #include "../../src/utils/str.h"
14 10 #include "../../src/filelist.h" #include "../../src/filelist.h"
15 11
16 12 static view_t *const view = &lwin; static view_t *const view = &lwin;
17 13
18 14 SETUP() SETUP()
19 15 { {
20 char cwd[PATH_MAX + 1];
21
22 assert_success(chdir(SANDBOX_PATH));
23
24 assert_true(get_cwd(cwd, sizeof(cwd)) == cwd);
25
26 16 view_setup(view); view_setup(view);
27 copy_str(view->curr_dir, sizeof(view->curr_dir), cwd);
17 make_abs_path(view->curr_dir, sizeof(view->curr_dir), SANDBOX_PATH, "", NULL);
18 assert_success(chdir(view->curr_dir));
28 19
29 assert_success(os_mkdir("0", 0000));
30 assert_success(os_mkdir("1", 0000));
31 assert_success(os_mkdir("2", 0000));
32 assert_success(os_mkdir("3", 0000));
33 assert_success(os_mkdir("4", 0000));
34 assert_success(os_mkdir("5", 0000));
20 create_dir("0");
21 create_dir("1");
22 create_dir("2");
23 create_dir("3");
24 create_dir("4");
25 create_dir("5");
35 26
36 populate_dir_list(view, 0);
27 populate_dir_list(view, /*reload=*/0);
37 28 } }
38 29
39 30 TEARDOWN() TEARDOWN()
40 31 { {
41 32 view_teardown(view); view_teardown(view);
42 33
34 /* Some of these files won't exist depending on the last test. */
43 35 (void)rmdir("0"); (void)rmdir("0");
44 36 (void)rmdir("1"); (void)rmdir("1");
45 37 (void)rmdir("2"); (void)rmdir("2");
 
... ... TEARDOWN()
51 43 TEST(exact_match_is_preferred) TEST(exact_match_is_preferred)
52 44 { {
53 45 view->list_pos = 2; view->list_pos = 2;
54 (void)rmdir("0");
55 (void)rmdir("1");
46 remove_dir("0");
47 remove_dir("1");
56 48
57 49 assert_string_equal("2", view->dir_entry[view->list_pos].name); assert_string_equal("2", view->dir_entry[view->list_pos].name);
58 populate_dir_list(view, 1);
50 populate_dir_list(view, /*reload=*/1);
59 51 assert_string_equal("2", view->dir_entry[view->list_pos].name); assert_string_equal("2", view->dir_entry[view->list_pos].name);
60 52 } }
61 53
62 54 TEST(closest_match_below_is_choosen) TEST(closest_match_below_is_choosen)
63 55 { {
64 56 view->list_pos = 1; view->list_pos = 1;
65 (void)rmdir("1");
66 (void)rmdir("2");
57 remove_dir("1");
58 remove_dir("2");
67 59
68 60 assert_string_equal("1", view->dir_entry[view->list_pos].name); assert_string_equal("1", view->dir_entry[view->list_pos].name);
69 populate_dir_list(view, 1);
61 populate_dir_list(view, /*reload=*/1);
70 62 assert_string_equal("3", view->dir_entry[view->list_pos].name); assert_string_equal("3", view->dir_entry[view->list_pos].name);
71 63 } }
72 64
73 65 TEST(closest_match_above_is_choosen) TEST(closest_match_above_is_choosen)
74 66 { {
75 67 view->list_pos = 5; view->list_pos = 5;
76 (void)rmdir("5");
77 (void)rmdir("6");
68 remove_dir("5");
78 69
79 70 assert_string_equal("5", view->dir_entry[view->list_pos].name); assert_string_equal("5", view->dir_entry[view->list_pos].name);
80 populate_dir_list(view, 1);
71 populate_dir_list(view, /*reload=*/1);
81 72 assert_string_equal("4", view->dir_entry[view->list_pos].name); assert_string_equal("4", view->dir_entry[view->list_pos].name);
82 73 } }
83 74
 
... ... TEST(selection_is_preserved)
87 78 view->dir_entry[1].selected = 1; view->dir_entry[1].selected = 1;
88 79 view->dir_entry[3].selected = 1; view->dir_entry[3].selected = 1;
89 80 view->selected_files = 3; view->selected_files = 3;
90 (void)rmdir("3");
81 remove_dir("3");
91 82
92 populate_dir_list(view, 1);
83 populate_dir_list(view, /*reload=*/1);
93 84 assert_true(view->dir_entry[0].selected); assert_true(view->dir_entry[0].selected);
94 85 assert_true(view->dir_entry[1].selected); assert_true(view->dir_entry[1].selected);
95 86 assert_int_equal(2, view->selected_files); assert_int_equal(2, view->selected_files);
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