libexec/shellspec-list.sh
#!/bin/sh
#shellcheck disable=SC2004
set -eu
# shellcheck source=lib/libexec/list.sh
. "${SHELLSPEC_LIB:-./lib}/libexec/list.sh"
# shellcheck source=lib/libexec/translator.sh
. "${SHELLSPEC_LIB:-./lib}/libexec/translator.sh"
trans() {
# shellcheck disable=SC2145
case $1 in (block_example_group|block_example|block_end)
"trans_$@"
esac
}
trans_block_example_group() {
putsn "block${block_no}() { "
putsn "FILTER=\${FILTER}${filter:-0}" "ENABLED=\${ENABLED}${enabled:-0}"
}
trans_block_example() {
putsn "block${block_no}() { "
putsn "LINENO_BEGIN=$lineno_begin" "EXAMPLE_ID=$block_id"
putsn "FILTER=\${FILTER}${filter:-0}" "ENABLED=\${ENABLED}${enabled:-0}"
putsn "yield ${parameter_count:-1}"
}
trans_block_end() {
putsn "FILTER=\${FILTER%?}" "ENABLED=\${ENABLED%?}"
putsn "}"
putsn "FILTER=\${FILTER}${filter:-0}" "ENABLED=\${ENABLED}${enabled:-0}"
putsn "block${block_no}"
putsn "FILTER=\${FILTER%?}" "ENABLED=\${ENABLED%?}"
}
yield() {
case $ENABLED in (*1*) case $FILTER in (*1*) disp "$1"; esac; esac
}
syntax_error() {
set -- "Syntax error: $1 in $specfile line $lineno" "${2:-}"
putsn "abort \"$1\" \"$2\""
}
prepare() {
specfile=$3 ranges=${4:-} filter=1
[ "$SHELLSPEC_FOCUS_FILTER" ] && filter=''
[ "$SHELLSPEC_TAG_FILTER" ] && filter=''
[ "$SHELLSPEC_EXAMPLE_FILTER" ] && filter=''
[ "$ranges" ] && enabled='' || enabled=1
SPECFILE=$specfile
ENABLED=$enabled
FILTER=$filter
}
list_code() {
specfiles=$(($specfiles + 1))
prepare "$@"
"$1" "$(initialize; translate < "$3"; finalize)"
}
specfiles=0 examples='' SHELLSPEC_LIST=${SHELLSPEC_LIST:-}
case ${SHELLSPEC_LIST%:*} in
debug)
specfile() { list_code putsn "$@"; }; ;;
specfiles)
specfile() { putsn "$2"; }; ;;
examples | '')
specfile() { list_code eval "$@"; }
example() { examples=$(($examples + $1)); }
# shellcheck disable=SC2153
case ${SHELLSPEC_LIST#examples:} in
id ) disp() { example "$1"; putsn "$SPECFILE:@$EXAMPLE_ID"; }; ;;
examples) disp() { example "$1"; putsn "$SPECFILE:@$EXAMPLE_ID"; }; ;;
lineno) disp() { example "$1"; putsn "$SPECFILE:$LINENO_BEGIN"; }; ;;
'') disp() { example "$1"; }; ;;
esac
esac
if [ "${SHELLSPEC_RANDOM:-}" ]; then
eval find_specfiles specfile ${1+'"$@"'} | shuffle "${SHELLSPEC_SEED:-}"
else
eval find_specfiles specfile ${1+'"$@"'}
fi
[ "$SHELLSPEC_LIST" ] || echo "$specfiles ${examples:-0}"
if [ "${SHELLSPEC_COUNT_FILE:-}" ]; then
echo "$specfiles${examples:+ }$examples" > "$SHELLSPEC_COUNT_FILE"
fi