1
0
mirror of https://github.com/sstephenson/bats.git synced 2024-11-17 11:42:33 +01:00
bats/libexec/bats-exec
2011-12-28 17:12:37 -06:00

103 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
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)"
IFS=$'\n' lines=($output)
status="$?"
[ -z "$e" ] || set -e
}
abort() {
[ "$#" -eq 0 ] || echo error: "$@" >&2
exit 1
}
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_exit_trap() {
trap - err exit
if [ -z "$BATS_TEST_COMPLETED" ]; then
echo "not ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION"
exit 1
else
echo "ok $BATS_TEST_NUMBER $BATS_TEST_DESCRIPTION"
exit 0
fi
}
bats_perform_tests() {
echo "1..$#"
test_number=1
for test_name in "$@"; do
"$0" "$BATS_TEST_FILENAME" "$test_name" "$test_number" || true
test_number=$(($test_number + 1))
done
}
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_exit_trap err exit
setup
"$BATS_TEST_NAME"
BATS_TEST_COMPLETED=1
else
echo "bats: unknown test name \`$BATS_TEST_NAME'" >&2
exit 1
fi
}
eval "$(bats-preprocess < "$BATS_TEST_FILENAME")"
if [ "$#" -eq 0 ]; then
bats_perform_tests "${BATS_TEST_NAMES[@]}"
else
bats_perform_test "$@"
fi