mirror of
https://github.com/go-task/task.git
synced 2026-09-01 19:50:16 +02:00
Packaging globs completion/ into the release archives, so the harness added alongside the engine was about to ship run.sh and five wrapper scripts to every user. The previous commit worked around it by listing the packaged directories one by one, which quietly stops packaging any shell added later. Moving the harness to testdata/completion/ leaves completion/ holding only what we ship, so the glob can go back to completion/**/* and needs no maintenance when a shell is added.
82 lines
2.3 KiB
Bash
Executable File
82 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Smoke-tests how the bash wrapper routes each directive, by stubbing the
|
|
# bash-completion helpers. Requires TASK_BIN and TASK_FIXTURE.
|
|
set -u
|
|
|
|
: "${TASK_BIN:?}"; : "${TASK_FIXTURE:?}"
|
|
export TASK_EXE="$TASK_BIN"
|
|
cd "$TASK_FIXTURE" || exit 1
|
|
|
|
fails=0
|
|
CAP=""
|
|
|
|
_init_completion() {
|
|
words=("${TEST_WORDS[@]}")
|
|
cword=$TEST_CWORD
|
|
cur="${TEST_WORDS[$TEST_CWORD]}"
|
|
prev="${TEST_WORDS[$((TEST_CWORD - 1))]}"
|
|
return 0
|
|
}
|
|
# Records $cur so a test can assert the inline `--flag=` prefix was stripped.
|
|
_filedir() { CAP+="filedir:$* cur=$cur"$'\n'; }
|
|
compopt() { CAP+="compopt:$*"$'\n'; }
|
|
__ltrim_colon_completions() { :; }
|
|
|
|
source "$(dirname "${BASH_SOURCE[0]}")/../../completion/bash/task.bash"
|
|
|
|
run() {
|
|
CAP=""
|
|
TEST_WORDS=("$@")
|
|
TEST_CWORD=$((${#TEST_WORDS[@]} - 1))
|
|
COMPREPLY=()
|
|
_task
|
|
}
|
|
|
|
reply_has() { # LABEL VALUE
|
|
local v
|
|
for v in "${COMPREPLY[@]}"; do [[ "$v" == "$2" ]] && { echo " ok $1"; return; }; done
|
|
echo " FAIL $1 — '$2' missing from COMPREPLY: ${COMPREPLY[*]}"
|
|
fails=$((fails + 1))
|
|
}
|
|
cap_has() { # LABEL PATTERN
|
|
if [[ "$CAP" == *"$2"* ]]; then echo " ok $1"; else
|
|
echo " FAIL $1 — expected '$2' in: $CAP"; fails=$((fails + 1)); fi
|
|
}
|
|
cap_hasnot() { # LABEL PATTERN
|
|
if [[ "$CAP" == *"$2"* ]]; then
|
|
echo " FAIL $1 — '$2' should be absent in: $CAP"; fails=$((fails + 1)); else
|
|
echo " ok $1"; fi
|
|
}
|
|
|
|
echo "bash: :4 (NoFileComp) forwards candidates, no file fallback"
|
|
run task ''
|
|
reply_has "candidate forwarded" build
|
|
cap_hasnot "no file fallback" "filedir:"
|
|
|
|
echo "bash: :2|:32 (NoSpace|KeepOrder) disable the trailing space and the sort"
|
|
run task deploy ''
|
|
cap_has "nospace applied" "compopt:-o nospace"
|
|
cap_has "keeporder applied" "compopt:-o nosort"
|
|
|
|
echo "bash: :8 (FilterFileExt) routes to extension-filtered files"
|
|
run task --taskfile ''
|
|
cap_has "filedir ext glob" "filedir:@(yml|yaml)"
|
|
|
|
echo "bash: :16 (FilterDirs) routes to directory completion"
|
|
run task --dir ''
|
|
cap_has "filedir -d" "filedir:-d"
|
|
|
|
echo "bash: :0 (Default) falls back to files"
|
|
run task build -- ''
|
|
cap_has "filedir default" "filedir:"
|
|
|
|
echo "bash: inline --flag= strips the prefix before file completion"
|
|
run task --taskfile=sub/x
|
|
cap_has "inline cur stripped" "cur=sub/x"
|
|
|
|
if ((fails)); then
|
|
echo "bash: $fails failure(s)"
|
|
exit 1
|
|
fi
|
|
echo "bash: all passed"
|