summaryrefslogtreecommitdiffstats
path: root/test/t/unit/test_unit_expand_glob.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/t/unit/test_unit_expand_glob.py')
-rw-r--r--test/t/unit/test_unit_expand_glob.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/t/unit/test_unit_expand_glob.py b/test/t/unit/test_unit_expand_glob.py
new file mode 100644
index 0000000..64d04a7
--- /dev/null
+++ b/test/t/unit/test_unit_expand_glob.py
@@ -0,0 +1,83 @@
+import pytest
+
+from conftest import assert_bash_exec, bash_env_saved
+
+
+@pytest.mark.bashcomp(
+ cmd=None,
+ cwd="_filedir",
+ ignore_env=r"^\+declare -f (dump_array|__tester)$",
+)
+class TestExpandGlob:
+ @pytest.fixture(scope="class")
+ def functions(self, bash):
+ assert_bash_exec(
+ bash,
+ "dump_array() { ((${#arr[@]})) && printf '<%s>' \"${arr[@]}\"; echo; }",
+ )
+ assert_bash_exec(
+ bash,
+ '__tester() { local LC_ALL= LC_COLLATE=C arr; _comp_expand_glob arr "$@";dump_array; }',
+ )
+
+ def test_match_all(self, bash, functions):
+ output = assert_bash_exec(bash, "__tester '*'", want_output=True)
+ assert output.strip() == "<a b><a$b><a&b><a'b><ab><aé><brackets><ext>"
+
+ def test_match_pattern(self, bash, functions):
+ output = assert_bash_exec(bash, "__tester 'a*'", want_output=True)
+ assert output.strip() == "<a b><a$b><a&b><a'b><ab><aé>"
+
+ def test_match_unmatched(self, bash, functions):
+ output = assert_bash_exec(
+ bash, "__tester 'unmatched-*'", want_output=True
+ )
+ assert output.strip() == ""
+
+ def test_match_multiple_words(self, bash, functions):
+ output = assert_bash_exec(bash, "__tester 'b* e*'", want_output=True)
+ assert output.strip() == "<brackets><ext>"
+
+ def test_match_brace_expansion(self, bash, functions):
+ output = assert_bash_exec(
+ bash, "__tester 'brac{ket,unmatched}*'", want_output=True
+ )
+ assert output.strip() == "<brackets>"
+
+ def test_protect_from_noglob(self, bash, functions):
+ with bash_env_saved(bash, functions) as bash_env:
+ bash_env.set("noglob", True)
+ output = assert_bash_exec(bash, "__tester 'a*'", want_output=True)
+ assert output.strip() == "<a b><a$b><a&b><a'b><ab><aé>"
+
+ def test_protect_from_failglob(self, bash, functions):
+ with bash_env_saved(bash) as bash_env:
+ bash_env.shopt("failglob", True)
+ output = assert_bash_exec(
+ bash, "__tester 'unmatched-*'", want_output=True
+ )
+ assert output.strip() == ""
+
+ def test_protect_from_nullglob(self, bash, functions):
+ with bash_env_saved(bash) as bash_env:
+ bash_env.shopt("nullglob", False)
+ output = assert_bash_exec(
+ bash, "__tester 'unmatched-*'", want_output=True
+ )
+ assert output.strip() == ""
+
+ def test_protect_from_dotglob(self, bash, functions):
+ with bash_env_saved(bash) as bash_env:
+ bash_env.shopt("dotglob", True)
+ output = assert_bash_exec(
+ bash, "__tester 'ext/foo/*'", want_output=True
+ )
+ assert output.strip() == ""
+
+ def test_protect_from_GLOBIGNORE(self, bash, functions):
+ with bash_env_saved(bash) as bash_env:
+ # Note: dotglob is changed by GLOBIGNORE
+ bash_env.save_shopt("dotglob")
+ bash_env.write_variable("GLOBIGNORE", "*")
+ output = assert_bash_exec(bash, "__tester 'a*'", want_output=True)
+ assert output.strip() == "<a b><a$b><a&b><a'b><ab><aé>"