summaryrefslogtreecommitdiffstats
path: root/test/t/unit/test_unit_realcommand.py
blob: a057788e7b7b3964e663780cda12be5f1f1cf48b (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
import pytest

from conftest import assert_bash_exec, bash_env_saved


@pytest.mark.bashcomp(
    cmd=None, cwd="shared", ignore_env=r"^\+declare -f __tester$"
)
class TestUnitRealCommand:
    @pytest.fixture
    def functions(self, bash):
        assert_bash_exec(
            bash,
            (
                "__tester() { "
                "local REPLY rc; "
                '_comp_realcommand "$1"; '
                "rc=$?; "
                'printf %s "$REPLY"; '
                "return $rc; "
                "}"
            ),
        )

    def test_non_pollution(self, bash):
        """Test environment non-pollution, detected at teardown."""
        assert_bash_exec(
            bash,
            "foo() { local REPLY=; _comp_realcommand bar; }; foo; unset -f foo",
            want_output=None,
        )

    def test_basename(self, bash, functions):
        with bash_env_saved(bash) as bash_env:
            bash_env.write_variable("PATH", "$PWD/bin:$PATH", quote=False)
            output = assert_bash_exec(
                bash,
                "__tester arp",
                want_output=True,
                want_newline=False,
            )
            assert output.strip().endswith("/shared/bin/arp")

    def test_basename_nonexistent(self, bash, functions):
        filename = "non-existent-file-for-bash-completion-tests"
        skipif = "! type -P %s" % filename
        try:
            assert_bash_exec(bash, skipif, want_output=None)
        except AssertionError:
            pytest.skipif(skipif)
        output = assert_bash_exec(
            bash,
            "! __tester %s" % filename,
            want_output=False,
        )
        assert output.strip() == ""

    def test_relative(self, bash, functions):
        output = assert_bash_exec(
            bash,
            "__tester bin/arp",
            want_output=True,
            want_newline=False,
        )
        assert output.strip().endswith("/shared/bin/arp")

    def test_relative_nonexistent(self, bash, functions):
        output = assert_bash_exec(
            bash,
            "! __tester bin/non-existent",
            want_output=False,
        )
        assert output.strip() == ""

    def test_absolute(self, bash, functions):
        output = assert_bash_exec(
            bash,
            '__tester "$PWD/bin/arp"',
            want_output=True,
            want_newline=False,
        )
        assert output.strip().endswith("/shared/bin/arp")

    def test_absolute_nonexistent(self, bash, functions):
        output = assert_bash_exec(
            bash,
            '! __tester "$PWD/bin/non-existent"',
            want_output=False,
        )
        assert output.strip() == ""

    def test_option_like_cmd_name(self, bash, functions):
        output = assert_bash_exec(
            bash,
            "! __tester --non-existent",
            want_output=False,
        )
        assert output.strip() == ""