summaryrefslogtreecommitdiffstats
path: root/src/features/navigate.rs
blob: 1175b13b3850218bb9e35f7728b08340d8e59702 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
use crate::config::Config;
use crate::features::OptionValueFunction;

pub fn make_feature() -> Vec<(String, OptionValueFunction)> {
    builtin_feature!([
        (
            "navigate",
            bool,
            None,
            _opt => true
        ),
        (
            "file-modified-label",
            String,
            None,
            _opt => "Δ"
        )
    ])
}

pub fn make_navigate_regexp(config: &Config) -> String {
    format!(
        "^(commit|{}|{}|{}|{})",
        config.file_modified_label,
        config.file_added_label,
        config.file_removed_label,
        config.file_renamed_label
    )
}

#[cfg(test)]
mod tests {
    use std::fs::remove_file;

    use crate::features;

    #[test]
    fn test_navigate_with_overriden_key_in_main_section() {
        let git_config_contents = b"
[delta]
    features = navigate
    file-modified-label = \"modified: \"
";
        let git_config_path = "delta__test_navigate_with_overriden_key_in_main_section.gitconfig";

        assert_eq!(
            features::tests::make_options(&[], None, None).file_modified_label,
            ""
        );
        assert_eq!(
            features::tests::make_options(&["--features", "navigate"], None, None)
                .file_modified_label,
            "Δ"
        );
        assert_eq!(
            features::tests::make_options(&["--navigate"], None, None).file_modified_label,
            "Δ"
        );
        assert_eq!(
            features::tests::make_options(&[], Some(git_config_contents), Some(git_config_path))
                .file_modified_label,
            "modified: "
        );

        remove_file(git_config_path).unwrap();
    }

    #[test]
    fn test_navigate_with_overriden_key_in_custom_navigate_section() {
        let git_config_contents = b"
[delta]
    features = navigate

[delta \"navigate\"]
    file-modified-label = \"modified: \"
";
        let git_config_path =
            "delta__test_navigate_with_overriden_key_in_custom_navigate_section.gitconfig";

        assert_eq!(
            features::tests::make_options(&[], None, None).file_modified_label,
            ""
        );
        assert_eq!(
            features::tests::make_options(&["--features", "navigate"], None, None)
                .file_modified_label,
            "Δ"
        );
        assert_eq!(
            features::tests::make_options(&[], Some(git_config_contents), Some(git_config_path))
                .file_modified_label,
            "modified: "
        );

        remove_file(git_config_path).unwrap();
    }

    #[test]
    fn test_navigate_activated_by_custom_feature() {
        let git_config_contents = b"
[delta \"my-navigate-feature\"]
    features = navigate
    file-modified-label = \"modified: \"
";
        let git_config_path = "delta__test_navigate_activated_by_custom_feature.gitconfig";

        assert_eq!(
            features::tests::make_options(&[], Some(git_config_contents), Some(git_config_path))
                .file_modified_label,
            ""
        );
        assert_eq!(
            features::tests::make_options(
                &["--features", "my-navigate-feature"],
                Some(git_config_contents),
                Some(git_config_path)
            )
            .file_modified_label,
            "modified: "
        );

        remove_file(git_config_path).unwrap();
    }
}