- ARGZERO="$0"
-
- : "${SHARNESS_TEST_DIRECTORY:=$(dirname "$ARGZERO")}"
- SHARNESS_TEST_DIRECTORY=$(cd "$SHARNESS_TEST_DIRECTORY" && pwd) || exit 1
- export SHARNESS_TEST_DIRECTORY
-
- : "${SHARNESS_TEST_SRCDIR:=$(cd "$(dirname "${BASH_SOURCE-$0}")" && pwd)}"
- export SHARNESS_TEST_SRCDIR
-
- : "${SHARNESS_TEST_OUTDIR:=$SHARNESS_TEST_DIRECTORY}"
- export SHARNESS_TEST_OUTDIR
-
- while test "$#" -ne 0; do
- case "$1" in
- -v)
- verbose=t; shift ;;
- *)
- echo "error: unknown test option '$1'" >&2; exit 1 ;;
- esac
- done
-
- say() {
- printf '%s\n' "$*"
- }
-
- error() {
- say "error: $*"
- EXIT_OK=t
- exit 1
- }
-
- exec 5>&1
- exec 6<&0
- if test "$verbose" = "t"
- then
- exec 4>&2 3>&1
- else
- exec 4>/dev/null 3>/dev/null
- fi
-
- SHARNESS_TEST_NB=0
- export SHARNESS_TEST_NB
-
- die() {
- code=$?
- if test -n "$EXIT_OK"; then
- exit $code
- else
- echo >&5 "FATAL: Unexpected exit with code $code"
- exit 1
- fi
- }
-
- EXIT_OK=
- trap 'die' EXIT
-
- test_failure=0
- test_fixed=0
- test_broken=0
- test_success=0
-
- test_ok_() {
- test_success=$((test_success + 1))
- say "ok $SHARNESS_TEST_NB - $*"
- }
-
- test_failure_() {
- test_failure=$((test_failure + 1))
- say "not ok $SHARNESS_TEST_NB - $1"
- shift
- echo "$@" | sed -e 's/^/# /'
- }
-
- test_known_broken_ok_() {
- test_fixed=$((test_fixed + 1))
- say "ok $SHARNESS_TEST_NB - $* # TODO known breakage vanished"
- }
-
- test_known_broken_failure_() {
- test_broken=$((test_broken + 1))
- say "not ok $SHARNESS_TEST_NB - $* # TODO known breakage"
- }
-
- test_eval_() {
- eval "$1" </dev/null >&3 2>&4
- }
-
- test_run_() {
- test_cleanup=:
- expecting_failure=$2
- test_eval_ "$1"
- eval_ret=$?
-
- if test $eval_ret = 0 ||
- test -n "$expecting_failure" && test "$test_cleanup" != ":"
- then
- test_eval_ "$test_cleanup"
- fi
- if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then
- echo ""
- fi
- return "$eval_ret"
- }
-
- remove_trash_() {
- test -d "$remove_trash" && (
- cd "$(dirname "$remove_trash")" &&
- rm -rf "$(basename "$remove_trash")"
- )
- }
-
- test_expect_success() {
- SHARNESS_TEST_NB=$((SHARNESS_TEST_NB + 1))
- say >&3 "expecting success: $2"
- if test_run_ "$2"; then
- test_ok_ "$1"
- else
- test_failure_ "$@"
- fi
- echo >&3 ""
- }
-
- test_expect_failure() {
- SHARNESS_TEST_NB=$((SHARNESS_TEST_NB + 1))
- say >&3 "checking known breakage: $2"
- if test_run_ "$2" expecting_failure; then
- test_known_broken_ok_ "$1"
- else
- test_known_broken_failure_ "$1"
- fi
- echo >&3 ""
- }
-
- test_expect_unstable() {
- SHARNESS_TEST_NB=$((SHARNESS_TEST_NB + 1))
- say >&3 "checking unstable test: $2"
- if test_run_ "$2" unstable; then
- test_ok_ "$1"
- else
- test_known_broken_failure_ "$1"
- fi
- echo >&3 ""
- }
-
- test_done() {
- EXIT_OK=t
-
- if test "$test_fixed" != 0; then
- say "# $test_fixed known breakage(s) vanished; please update test(s)"
- fi
- if test "$test_broken" != 0; then
- say "# still have $test_broken known breakage(s)"
- fi
- if test "$test_broken" != 0 || test "$test_fixed" != 0; then
- test_remaining=$((SHARNESS_TEST_NB - test_broken - test_fixed))
- msg="remaining $test_remaining test(s)"
- else
- test_remaining=$SHARNESS_TEST_NB
- msg="$SHARNESS_TEST_NB test(s)"
- fi
-
- case "$test_failure" in
- 0)
- # Maybe print SKIP message
- if test "$test_remaining" -gt 0; then
- say "# passed all $msg"
- fi
- say "1..$SHARNESS_TEST_NB"
-
- test_eval_ "$final_cleanup"
-
- remove_trash_
-
- exit 0 ;;
-
- *)
- say "# failed $test_failure among $msg"
- say "1..$SHARNESS_TEST_NB"
-
- exit 1 ;;
-
- esac
- }
-
- : "${SHARNESS_BUILD_DIRECTORY:="$SHARNESS_TEST_DIRECTORY/.."}"
- export SHARNESS_BUILD_DIRECTORY
- PATH="$SHARNESS_BUILD_DIRECTORY:$PATH"
- export PATH
-
- SHARNESS_TEST_FILE="$ARGZERO"
- export SHARNESS_TEST_FILE
-
- SHARNESS_TRASH_DIRECTORY="$SHARNESS_TEST_OUTDIR/trash directory.$(basename "$SHARNESS_TEST_FILE" ".t")"
- remove_trash="$SHARNESS_TRASH_DIRECTORY"
- rm -rf "$SHARNESS_TRASH_DIRECTORY" || {
- EXIT_OK=t
- echo >&5 "FATAL: Cannot prepare test area"
- exit 1
- }
-
- export SHARNESS_TRASH_DIRECTORY
-
- HOME="$SHARNESS_TRASH_DIRECTORY"
- export HOME
-
- mkdir -p "$SHARNESS_TRASH_DIRECTORY" || exit 1
- cd -P "$SHARNESS_TRASH_DIRECTORY" || exit 1