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
|
import pytest
from conftest import assert_bash_exec
@pytest.mark.bashcomp(cmd=None)
class TestUnitGetFirstArg:
@pytest.fixture(scope="class")
def functions(self, bash):
assert_bash_exec(
bash,
'_comp__test_unit() { local -a "words=$1"; local cword=$2 REPLY=; shift 2; _comp_get_first_arg "$@" && printf "%s\\n" "$REPLY"; return 0; }',
)
def _test(self, bash, words, cword, args=""):
return assert_bash_exec(
bash,
'_comp__test_unit "%s" %d %s' % (words, cword, args),
want_output=None,
).strip()
def test_1(self, bash, functions):
assert_bash_exec(bash, "_comp__test_unit '()' 0")
def test_2(self, bash, functions):
output = self._test(bash, "(a b)", 2)
assert output == "b"
def test_3(self, bash, functions):
output = self._test(bash, "(a bc)", 2)
assert output == "bc"
def test_4(self, bash, functions):
output = self._test(bash, "(a b c)", 2)
assert output == "b"
def test_5(self, bash, functions):
"""Neither of the current word and the command name should be picked
as the first argument"""
output = self._test(bash, "(a b c)", 1)
assert output == ""
def test_6(self, bash, functions):
"""Options starting with - should not be picked as the first
argument"""
output = self._test(bash, "(a -b -c d e)", 4)
assert output == "d"
def test_7_single_hyphen(self, bash, functions):
"""- should be counted as an argument representing stdout/stdin"""
output = self._test(bash, "(a -b - c -d e)", 5)
assert output == "-"
def test_8_double_hyphen_1(self, bash, functions):
"""any word after -- should be picked"""
output = self._test(bash, "(a -b -- -c -d e)", 5)
assert output == "-c"
def test_8_double_hyphen_2(self, bash, functions):
"""any word after -- should be picked only without any preceding argument"""
output = self._test(bash, "(a b -- -c -d e)", 5)
assert output == "b"
def test_9_skip_optarg_1(self, bash, functions):
output = self._test(bash, "(a -b -c d e f)", 5, '-a "@(-c|--foo)"')
assert output == "e"
def test_9_skip_optarg_2(self, bash, functions):
output = self._test(bash, "(a -b --foo d e f)", 5, '-a "@(-c|--foo)"')
assert output == "e"
def test_9_skip_optarg_3(self, bash, functions):
output = self._test(bash, "(a -b - c d e)", 5, '-a "-b"')
assert output == "c"
def test_9_skip_optarg_4(self, bash, functions):
output = self._test(bash, "(a -b -c d e f)", 5, '-a "-[bc]"')
assert output == "d"
def test_9_skip_optarg_5(self, bash, functions):
output = self._test(bash, "(a +o b c d)", 4, '-a "+o"')
assert output == "c"
def test_9_skip_optarg_6(self, bash, functions):
output = self._test(bash, "(a -o -o -o -o b c)", 6, '-a "-o"')
assert output == "b"
def test_9_skip_optarg_7(self, bash, functions):
output = self._test(bash, "(a -o -- -b -c d e)", 6, '-a "-o"')
assert output == "d"
|