86 lines
1.8 KiB
Bash
Executable file
86 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
||
set -e
|
||
|
||
if [[ $# -lt 1 || $# -gt 2 ]] ; then
|
||
echo "Usage: $0 <prefix-path> [1]" 1>&2
|
||
exit 1
|
||
fi
|
||
|
||
# Obtain the absolute path to the tests directory
|
||
pushd "$(dirname "$0")" &> /dev/null
|
||
readonly T=$(pwd)
|
||
popd &> /dev/null
|
||
export T
|
||
|
||
# Same for the nginx prefix directory
|
||
pushd "$1" &> /dev/null
|
||
readonly prefix=$(pwd)
|
||
popd &> /dev/null
|
||
|
||
dynamic=false
|
||
if [[ $# -gt 1 && $2 -eq 1 ]] ; then
|
||
dynamic=true
|
||
fi
|
||
readonly dynamic
|
||
|
||
declare -a t_pass=( )
|
||
declare -a t_fail=( )
|
||
declare -a t_skip=( )
|
||
|
||
for t in `ls "$T"/*.test | sort -R` ; do
|
||
name="t/${t##*/}"
|
||
name=${name%.test}
|
||
printf "${name} ... "
|
||
errfile="${name}.err"
|
||
outfile="${name}.out"
|
||
shfile="${name}.sh"
|
||
cat > "${shfile}" <<-EOF
|
||
readonly DYNAMIC=${dynamic}
|
||
readonly TESTDIR='$T'
|
||
readonly PREFIX='${prefix}'
|
||
$(< "$T/preamble")
|
||
$(< "$t")
|
||
EOF
|
||
if bash -e "${shfile}" > "${outfile}" 2> "${errfile}" ; then
|
||
t_pass+=( "${name}" )
|
||
printf '[1;32mpassed[0;0m\n'
|
||
elif [[ $? -eq 111 ]] ; then
|
||
t_skip+=( "${name}" )
|
||
printf '[1;33mskipped[0;0m\n'
|
||
else
|
||
t_fail+=( "${name}" )
|
||
printf '[1;31mfailed[0;0m\n'
|
||
fi
|
||
done
|
||
|
||
for name in "${t_fail[@]}" ; do
|
||
echo
|
||
printf '[1m===[0m %s.out\n' "${name}"
|
||
cat "${name}.out"
|
||
echo
|
||
printf '[1m===[0m %s.err\n' "${name}"
|
||
cat "${name}.err"
|
||
echo
|
||
done
|
||
|
||
if [[ ${#t_skip[@]} -gt 0 ]] ; then
|
||
echo
|
||
printf '[1;33mSkipped tests:\n[0;0m'
|
||
for name in "${t_skip[@]}" ; do
|
||
reason=$(grep '^(\-\-) ' "${name}.err" | head -1)
|
||
if [[ -z ${reason} ]] ; then
|
||
reason='No reason given'
|
||
else
|
||
reason=${reason:5}
|
||
fi
|
||
printf ' - %s: %s\n' "${name}" "${reason:-No reason given}"
|
||
done
|
||
echo
|
||
fi
|
||
|
||
printf '[1m===[0m passed/skipped/failed/total: [1;32m%d[0;0m/[1;33m%d[0;0m/[1;31m%d[0;0m/[1m%d[0m\n' \
|
||
${#t_pass[@]} ${#t_skip[@]} ${#t_fail[@]} $(( ${#t_pass[@]} + ${#t_fail[@]} ))
|
||
|
||
if [[ ${#t_fail[@]} -gt 0 ]] ; then
|
||
exit 1
|
||
fi
|