#!/bin/bash source scripts/runtest.sh source scripts/portability.sh # Kill child processes when we exit trap 'kill $(jobs -p) 2>/dev/null; exit 1' INT # Create working directory TOPDIR="$PWD" export FILES="$PWD"/tests/files PREFIX=generated/testdir rm -rf "$PREFIX" mkdir -p "$PREFIX"/testdir # Populate working directory if [ -z "$TEST_HOST" ] then if [ $# -ne 0 ] then scripts/single.sh "$@" || exit 1 else scripts/install.sh --symlink --force || exit 1 fi fi # Add prefix to $PATH export -n PREFIX cd "$PREFIX" PATH="$PWD:$PATH" TESTDIR="$PWD" export LC_COLLATE=C # Collection OPTIONFLAGS for optional() [ -f "$TOPDIR/generated/config.h" ] && export OPTIONFLAGS=:$($SED -nr 's/^#define CFG_(.*) 1$/\1/p' "$TOPDIR/generated/config.h" | tr '\n' :) # Run a test file in $TESTDIR/testdir with $CMDNAME and $C set, parse $FAILCOUNT do_test() { # reset testdir cd "$TESTDIR" && rm -rf testdir continue && mkdir testdir && cd testdir || exit 1 # set CMDNAME to base name of test file, and C to full path to command CMDNAME="${1##*/}" CMDNAME="${CMDNAME%.test}" if [ -z "$TEST_HOST" ] then C="$TESTDIR/$CMDNAME" [ ! -e "$C" ] && echo "$SHOWSKIP: $CMDNAME disabled" && return C="$(dirname $(realpath "$C"))/$CMDNAME" else C="$(which $CMDNAME 2>/dev/null)" [ -z "$C" ] && printf '%s\n' "$SHOWSKIP: no $CMDNAME" && return fi # Run command.test in a subshell (. "$1"; cd "$TESTDIR"; echo "$FAILCOUNT" > continue) cd "$TESTDIR" [ -e continue ] && FAILCOUNT=$(($(cat continue)+$FAILCOUNT)) || exit 1 } # Run each test listed on command line or else all tests with executable bit set if [ $# -ne 0 ] then for i in "$@" do do_test "$TOPDIR"/tests/$i.test done else for i in "$TOPDIR"/tests/*.test do [ -z "$TEST_ALL" ] && [ ! -x "$i" ] && continue do_test "$i" done fi [ $FAILCOUNT -eq 0 ]