Merge nucleic/sleek-thistle-egret-fyej into dev
This commit is contained in:
@@ -0,0 +1,309 @@
|
||||
name: "Builtins: compgen"
|
||||
cases:
|
||||
- name: "compgen -A alias"
|
||||
stdin: |
|
||||
alias myalias="ls"
|
||||
alias myalias2="echo hi"
|
||||
|
||||
compgen -A alias myalias | sort
|
||||
|
||||
- name: "compgen -A binding"
|
||||
stdin: |
|
||||
compgen -A binding tab | sort
|
||||
|
||||
- name: "compgen -A builtin"
|
||||
stdin: |
|
||||
compgen -A builtin cd | sort
|
||||
|
||||
- name: "compgen -A directory"
|
||||
stdin: |
|
||||
touch somefile
|
||||
mkdir somedir
|
||||
mkdir somedir2
|
||||
|
||||
compgen -A directory some | sort
|
||||
|
||||
- name: "compgen -A file"
|
||||
stdin: |
|
||||
touch somefile
|
||||
mkdir somedir
|
||||
mkdir somedir2
|
||||
|
||||
compgen -A file some | sort
|
||||
|
||||
- name: "compgen -A file with dot files"
|
||||
stdin: |
|
||||
touch .file
|
||||
mkdir .dir
|
||||
|
||||
echo "[without dotglob]"
|
||||
shopt -u dotglob
|
||||
compgen -A file | sort
|
||||
|
||||
echo "[with dotglob]"
|
||||
shopt -s dotglob
|
||||
compgen -A file | sort
|
||||
|
||||
- name: "compgen -A function"
|
||||
stdin: |
|
||||
myfunc() {
|
||||
echo hi
|
||||
}
|
||||
|
||||
myfunc2() {
|
||||
echo hello
|
||||
}
|
||||
|
||||
compgen -A function myfunc | sort
|
||||
|
||||
- name: "compgen -A keyword"
|
||||
stdin: |
|
||||
compgen -A keyword esa | sort
|
||||
|
||||
- name: "compgen -A variable"
|
||||
stdin: |
|
||||
declare myvar=10
|
||||
declare myvar2=11
|
||||
|
||||
compgen -A variable myvar | sort
|
||||
|
||||
- name: "compgen -W"
|
||||
stdin: |
|
||||
echo "1. Basic compgen -W"
|
||||
compgen -W "one two three" -- t | sort
|
||||
echo "2. compgen -W with expansion"
|
||||
myvar=value compgen -W '${myvar}'
|
||||
|
||||
- name: "compgen -W does not pathname-expand"
|
||||
stdin: |
|
||||
touch foo.txt bar.txt baz.log
|
||||
|
||||
echo "[glob pattern should be literal]"
|
||||
compgen -W '*.txt' | sort
|
||||
|
||||
echo "[question mark glob should be literal]"
|
||||
compgen -W '?.log' | sort
|
||||
|
||||
- name: "compgen -W with unsorted values"
|
||||
stdin: |
|
||||
compgen -W 'c b d a'
|
||||
|
||||
- name: "compgen -W with options"
|
||||
stdin: |
|
||||
compgen -W '--abc --def' -- '--ab'
|
||||
|
||||
- name: "compgen with no matches"
|
||||
stdin: |
|
||||
compgen -W yes no && echo "1. Result"
|
||||
|
||||
- name: "compgen -f with tilde"
|
||||
home_dir: testhome # relative to default working dir
|
||||
stdin: |
|
||||
mkdir testhome && cd testhome
|
||||
|
||||
echo "HOME base: $(basename $HOME)"
|
||||
echo "~ base:" $(basename ~)
|
||||
|
||||
touch item1
|
||||
|
||||
echo "[0]"
|
||||
for p in $(compgen -f ~); do
|
||||
echo ${p//$HOME/HOME}
|
||||
done
|
||||
|
||||
echo "[1]"
|
||||
for p in $(compgen -f ~/); do
|
||||
echo ${p//$HOME/HOME}
|
||||
done
|
||||
|
||||
- name: "compgen -f with quoted tilde"
|
||||
known_failure: true
|
||||
stdin: |
|
||||
touch item1
|
||||
HOME=$(pwd)
|
||||
|
||||
echo "[0]"
|
||||
for p in $(compgen -f '~/'); do
|
||||
echo ${p//$HOME/HOME}
|
||||
done
|
||||
|
||||
- name: "compgen -f with quoted var"
|
||||
known_failure: true
|
||||
stdin: |
|
||||
touch item1
|
||||
HOME=$(pwd)
|
||||
|
||||
echo "[0]"
|
||||
for p in $(compgen -f '$HOME/'); do
|
||||
echo ${p//$HOME/HOME}
|
||||
done
|
||||
|
||||
- name: "compgen -f with quoted + escaped var"
|
||||
known_failure: true
|
||||
stdin: |
|
||||
touch item1
|
||||
HOME=$(pwd)
|
||||
|
||||
echo "[0]"
|
||||
for p in $(compgen -f '\$HOME/'); do
|
||||
echo ${p//$HOME/HOME}
|
||||
done
|
||||
|
||||
- name: "compgen with interesting hyphens"
|
||||
stdin: |
|
||||
compgen -P-before -S-after -W "one two three" -- t | sort
|
||||
|
||||
- name: "compgen -X"
|
||||
stdin: |
|
||||
echo "[Take 1]"
|
||||
compgen -W 'foo bar' -X 'foo' ''
|
||||
|
||||
echo "[Take 2]"
|
||||
compgen -W 'foo bar' -X 'f*' ''
|
||||
|
||||
echo "[Take 3]"
|
||||
compgen -W '&1 foo' -X '\&*' ''
|
||||
|
||||
- name: "compgen -X with replacement"
|
||||
stdin: |
|
||||
echo "[Take 1]"
|
||||
compgen -W 'somebody something' -X '&b*' some
|
||||
|
||||
- name: "compgen -X with extglob"
|
||||
stdin: |
|
||||
touch README
|
||||
shopt -s extglob
|
||||
|
||||
echo "[Take 1]"
|
||||
compgen -f READ
|
||||
|
||||
echo "[Take 2]"
|
||||
compgen -f -X "READ" READ
|
||||
|
||||
echo "[Take 3]"
|
||||
compgen -f -X "README" READ
|
||||
|
||||
echo "[Take 4]"
|
||||
compgen -f -X "!(READ)" READ
|
||||
|
||||
echo "[Take 5]"
|
||||
compgen -f -X "!(README)" READ
|
||||
|
||||
echo "[Take 6]"
|
||||
compgen -f -X "!!(READ)" READ
|
||||
|
||||
echo "[Take 7]"
|
||||
compgen -f -X "!!(README)" READ
|
||||
|
||||
- name: "compgen -o dirnames"
|
||||
stdin: |
|
||||
echo "[Take 1]"
|
||||
compgen -W 'completion' -o dirnames -- c | sort
|
||||
|
||||
echo "[Take 2]"
|
||||
mkdir subdir
|
||||
touch subfile
|
||||
compgen -W 'completion' -o dirnames -- s | sort
|
||||
|
||||
- name: "compgen -o default"
|
||||
stdin: |
|
||||
echo "[Take 1]"
|
||||
compgen -W 'completion' -o default -- c | sort
|
||||
|
||||
echo "[Take 2]"
|
||||
mkdir subdir
|
||||
touch subfile
|
||||
compgen -W 'completion' -o default -- s | sort
|
||||
|
||||
- name: "compgen -o bashdefault"
|
||||
stdin: |
|
||||
echo "[Take 1]"
|
||||
compgen -W 'completion' -o bashdefault -- c | sort
|
||||
|
||||
echo "[Take 2]"
|
||||
mkdir subdir
|
||||
touch subfile
|
||||
compgen -W 'completion' -o bashdefault -- s | sort
|
||||
|
||||
- name: "compgen -o plusdirs"
|
||||
stdin: |
|
||||
echo "[Take 1]"
|
||||
touch cfile
|
||||
mkdir cdir
|
||||
compgen -W 'completion' -o plusdirs -o default -S suffix -- c | sort
|
||||
|
||||
- name: "compgen -A command"
|
||||
# Temporarily marked unconstrained Path case as `skip: true` to keep CI stable.
|
||||
# Environment-dependent due to host PATH contents(Ubuntu includes X11, while Arch and others do not).
|
||||
skip: true
|
||||
stdin: |
|
||||
compgen -A command | sort | grep -v "^brush"
|
||||
|
||||
- name: "compgen -A command in a constrained PATH"
|
||||
stdin: |
|
||||
SORT=$(command -v sort)
|
||||
GREP=$(command -v grep)
|
||||
PATH=$(pwd)
|
||||
compgen -A command | $SORT | $GREP -v "^brush"
|
||||
|
||||
- name: "compgen -A command builtins in a constrained PATH"
|
||||
stdin: |
|
||||
SORT=$(command -v sort)
|
||||
PATH=$(pwd)
|
||||
compgen -A command cd | $SORT
|
||||
|
||||
- name: "compgen -A command keywords in a constrained PATH"
|
||||
stdin: |
|
||||
SORT=$(command -v sort)
|
||||
PATH=$(pwd)
|
||||
compgen -A command [ | $SORT
|
||||
|
||||
- name: "compgen -A command function in a constrained PATH"
|
||||
stdin: |
|
||||
SORT=$(command -v sort)
|
||||
PATH=$(pwd)
|
||||
myfunc() {
|
||||
echo hi
|
||||
}
|
||||
myfunc2() {
|
||||
echo hello
|
||||
}
|
||||
compgen -A command myfunc | $SORT
|
||||
|
||||
- name: "compgen -A command with executable symlink"
|
||||
stdin: |
|
||||
# pwd
|
||||
# drwxr-xr-x ├── test-bin
|
||||
# .rwxr-xr-x │ ├── dummy_exe
|
||||
# .rw-r--r-- │ └── dummy_non_exe
|
||||
# drwxr-xr-x └── test-links
|
||||
# lrwxrwxrwx ├── link_valid ⇒ $(pwd)/test-bin/dummy_exe
|
||||
# lrwxrwxrwx └── link_valid_exe_rec ⇒ $(pwd)/test-links/link_valid
|
||||
# lrwxrwxrwx ├── link_non_exec ⇒ $(pwd)/test-bin/dummy_non_exe
|
||||
# lrwxrwxrwx ├── link_broken ⇒ $(pwd)/test-bin/dummy_non_exist
|
||||
#
|
||||
mkdir test-bin
|
||||
touch test-bin/dummy_exe
|
||||
touch test-bin/dummy_non_exe
|
||||
chmod +x test-bin/dummy_exe
|
||||
|
||||
mkdir test-links
|
||||
ln -s $(pwd)/test-bin/dummy_exe $(pwd)/test-links/link_valid
|
||||
ln -s $(pwd)/test-links/link_vaild $(pwd)/test-links/link_valid_rec
|
||||
ln -s $(pwd)/test-bin/dummy_non_exe $(pwd)/test-links/link_non_exec
|
||||
ln -s $(pwd)/test-bin/dummy_non_exist $(pwd)/test-links/link_broken
|
||||
|
||||
PATH="$(pwd)/test-links:$PATH"
|
||||
|
||||
echo "[Valid]"
|
||||
compgen -A command -- link_valid | sort
|
||||
|
||||
echo "[Invalid]"
|
||||
compgen -A command -- link_non_exec
|
||||
compgen -A command -- link_broken
|
||||
|
||||
- name: "compgen -F sets COMP_KEY and COMP_TYPE to 0"
|
||||
ignore_stderr: true
|
||||
stdin: |
|
||||
_comp() { echo "KEY=${COMP_KEY:-unset} TYPE=${COMP_TYPE:-unset}"; COMPREPLY=(); }
|
||||
compgen -F _comp mycmd
|
||||
Reference in New Issue
Block a user