mirror of
https://github.com/sstephenson/bats.git
synced 2026-02-26 09:48:10 +01:00
bats-exec -> bats-exec-test
This commit is contained in:
154
libexec/bats-exec-test
Executable file
154
libexec/bats-exec-test
Executable file
@@ -0,0 +1,154 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
BATS_COUNT_ONLY=""
|
||||
if [ "$1" = "-c" ]; then
|
||||
BATS_COUNT_ONLY=1
|
||||
shift
|
||||
fi
|
||||
|
||||
BATS_TEST_FILENAME="$1"
|
||||
if [ -z "$BATS_TEST_FILENAME" ]; then
|
||||
echo "usage: bats-exec <filename>" >&2
|
||||
exit 1
|
||||
elif [ ! -f "$BATS_TEST_FILENAME" ]; then
|
||||
echo "bats: $BATS_TEST_FILENAME does not exist"
|
||||
exit 1
|
||||
else
|
||||
shift
|
||||
fi
|
||||
|
||||
BATS_TEST_DIRNAME="$(dirname "$BATS_TEST_FILENAME")"
|
||||
BATS_TEST_NAMES=()
|
||||
|
||||
load() {
|
||||
source "$BATS_TEST_DIRNAME/$1.bash"
|
||||
}
|
||||
|
||||
run() {
|
||||
local e
|
||||
[[ ! "$-" =~ e ]] || e=1
|
||||
set +e
|
||||
output="$("$@" 2>&1)"
|
||||
status="$?"
|
||||
IFS=$'\n' lines=($output)
|
||||
[ -z "$e" ] || set -e
|
||||
}
|
||||
|
||||
setup() {
|
||||
true
|
||||
}
|
||||
|
||||
teardown() {
|
||||
true
|
||||
}
|
||||
|
||||
bats_test_info() {
|
||||
BATS_TEST_DESCRIPTION="$1"
|
||||
BATS_LINE_NUMBER="$2"
|
||||
}
|
||||
|
||||
bats_test_function() {
|
||||
local test_name="$1"
|
||||
BATS_TEST_NAMES["${#BATS_TEST_NAMES[@]}"]="$test_name"
|
||||
}
|
||||
|
||||
bats_teardown_trap() {
|
||||
trap bats_exit_trap err exit
|
||||
teardown >>"$BATS_OUT" 2>&1
|
||||
bats_exit_trap
|
||||
}
|
||||
|
||||
bats_exit_trap() {
|
||||
local status
|
||||
trap - err exit
|
||||
|
||||
if [ -z "$BATS_TEST_COMPLETED" ]; then
|
||||
echo "not ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION" >&3
|
||||
sed -e "s/^/ /" < "$BATS_OUT" >&3
|
||||
status=1
|
||||
else
|
||||
echo "ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION" >&3
|
||||
status=0
|
||||
fi
|
||||
|
||||
rm -f "$BATS_OUT"
|
||||
exit "$status"
|
||||
}
|
||||
|
||||
bats_perform_tests() {
|
||||
echo "1..$#"
|
||||
test_number=1
|
||||
status=0
|
||||
for test_name in "$@"; do
|
||||
"$0" "$BATS_TEST_FILENAME" "$test_name" "$test_number" || status=1
|
||||
test_number=$(($test_number + 1))
|
||||
done
|
||||
exit "$status"
|
||||
}
|
||||
|
||||
bats_perform_test() {
|
||||
BATS_TEST_NAME="$1"
|
||||
if [ "$(type -t "$BATS_TEST_NAME" || true)" = "function" ]; then
|
||||
BATS_TEST_NUMBER="$2"
|
||||
if [ -z "$BATS_TEST_NUMBER" ]; then
|
||||
echo "1..1"
|
||||
BATS_TEST_NUMBER="1"
|
||||
fi
|
||||
|
||||
BATS_TEST_COMPLETED=""
|
||||
trap bats_teardown_trap err exit
|
||||
{ setup
|
||||
"$BATS_TEST_NAME"
|
||||
} >>"$BATS_OUT" 2>&1
|
||||
BATS_TEST_COMPLETED=1
|
||||
|
||||
else
|
||||
echo "bats: unknown test name \`$BATS_TEST_NAME'" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -z "$TMPDIR" ]; then
|
||||
BATS_TMPDIR="/tmp"
|
||||
else
|
||||
BATS_TMPDIR="${TMPDIR%/}"
|
||||
fi
|
||||
|
||||
BATS_TMPNAME="$BATS_TMPDIR/bats.$$"
|
||||
BATS_PARENT_TMPNAME="$BATS_TMPDIR/bats.$PPID"
|
||||
BATS_OUT="${BATS_TMPNAME}.out"
|
||||
|
||||
bats_preprocess_source() {
|
||||
BATS_TEST_SOURCE="${BATS_TMPNAME}.src"
|
||||
bats-preprocess < "$BATS_TEST_FILENAME" > "$BATS_TEST_SOURCE"
|
||||
trap bats_cleanup_preprocessed_source err exit
|
||||
trap "bats_cleanup_preprocessed_source; exit 1" int
|
||||
}
|
||||
|
||||
bats_cleanup_preprocessed_source() {
|
||||
rm -f "$BATS_TEST_SOURCE"
|
||||
}
|
||||
|
||||
bats_evaluate_preprocessed_source() {
|
||||
if [ -z "$BATS_TEST_SOURCE" ]; then
|
||||
BATS_TEST_SOURCE="${BATS_PARENT_TMPNAME}.src"
|
||||
fi
|
||||
source "$BATS_TEST_SOURCE"
|
||||
}
|
||||
|
||||
exec 3<&1
|
||||
|
||||
if [ "$#" -eq 0 ]; then
|
||||
bats_preprocess_source
|
||||
bats_evaluate_preprocessed_source
|
||||
|
||||
if [ -n "$BATS_COUNT_ONLY" ]; then
|
||||
echo "${#BATS_TEST_NAMES[@]}"
|
||||
else
|
||||
bats_perform_tests "${BATS_TEST_NAMES[@]}"
|
||||
fi
|
||||
else
|
||||
bats_evaluate_preprocessed_source
|
||||
bats_perform_test "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user