diff options
Diffstat (limited to 'test/t/unit/test_unit_expand_tilde.py')
-rw-r--r-- | test/t/unit/test_unit_expand_tilde.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/t/unit/test_unit_expand_tilde.py b/test/t/unit/test_unit_expand_tilde.py new file mode 100644 index 0000000..3552fd6 --- /dev/null +++ b/test/t/unit/test_unit_expand_tilde.py @@ -0,0 +1,59 @@ +import pytest + +from conftest import assert_bash_exec + + +@pytest.mark.bashcomp(cmd=None) +class TestUnitExpandTilde: + def test_1(self, bash): + """The old interface `__expand_tilde_by_ref` should not fail when it is + called without arguments""" + assert_bash_exec(bash, "__expand_tilde_by_ref >/dev/null") + + def test_2(self, bash): + """Test environment non-pollution, detected at teardown.""" + assert_bash_exec( + bash, + '_x() { local REPLY; _comp_expand_tilde "~"; }; _x; unset -f _x', + ) + + @pytest.fixture(scope="class") + def functions(self, bash): + # $HOME tinkering: protect against $HOME != ~user; our "home" is the + # latter but plain_tilde follows $HOME + assert_bash_exec( + bash, + '_comp__test_unit() { local REPLY HOME=$1; _comp_expand_tilde "$2"; printf "%s\\n" "$REPLY"; }', + ) + + @pytest.mark.parametrize("plain_tilde", (True, False)) + @pytest.mark.parametrize( + "suffix_expanded", + ( + ("", True), + ("/foo", True), + (r"/\$HOME", True), + ("/a b", True), + ("/*", True), + (";echo hello", False), + ("/a;echo hello", True), + ), + ) + def test_expand( + self, bash, user_home, plain_tilde, suffix_expanded, functions + ): + user, home = user_home + suffix, expanded = suffix_expanded + home2 = home + if plain_tilde: + user = "" + if not suffix or not expanded: + home2 = "~" + elif not expanded: + home2 = "~%s" % user + output = assert_bash_exec( + bash, + r'_comp__test_unit "%s" "~%s%s"' % (home, user, suffix), + want_output=True, + ) + assert output.strip() == "%s%s" % (home2, suffix.replace(r"\$", "$")) |