pushd $(dirname "$(readlink -f "$0")") >/dev/null
source ./utils
setup trap cleanup EXIT
HERE=$PWD
for i in "$@"; do
[ $i = '-v' ] && VERBOSE=true
[ $i = '-s' ] && SILENT=true
[[ "$i" =~ [0-9]+ ]] && [ -z $ONE_TEST ] && printf -v ONE_TEST "%02d" $i
done
N=0 let PASSES=0
let TOTAL=0
test() {
[ ! -f $1 ] && echo "No such test file" && return
source $1 &>/dev/null
local title=$(get_test_title $1) && local file=${1##$HERE/}
local rec=$HERE/received/$N.txt && local exp=$HERE/expected/$N.txt
local rc=0 [ ! -f $rec ] && not_found $file received/$N.txt && rc=1
[ ! -f $exp ] && not_found $file expected/$N.txt && rc=1
[ $rc = 1 ] && return 1
local difffile=$HERE/failed/$N.diff
diff -y -W 70 $rec $exp >$difffile
rc=$?
if [[ $rc == 0 ]]; then
pass $file "$title"
rm -f $difffile
else
fail $file "$title"
fi
return $rc
}
wrap_test() {
let TOTAL++
assert $PWD $HERE && N=$(get_test_id $1)
tmp_dir=$HERE/tmp/$N && mkdir -p $tmp_dir
cd $tmp_dir && test "$1" &
pids+=("$!")
}
main() {
cargo build --quiet || exit 1
if ! command -v gitnu >/dev/null; then
echo 'gitnu not found. Aborting.' && exit 1
fi
pids=()
if [ $ONE_TEST ]; then
wrap_test $HERE/cases/$ONE_TEST.sh wait $pid
echo '────────────────────────'
cat $HERE/received/$ONE_TEST.txt
echo '────────────────────────'
else
for t in $HERE/cases/*; do wrap_test $t
done
fi
[ -z $ONE_TEST ] && for pid in ${pids[@]}; do
wait $pid
[[ $? == 0 ]] && let PASSES++
done
printf "\n $PASSES/$TOTAL tests passed\n"
[ $PASSES = $TOTAL ] && [ $TOTAL -gt 0 ]
}
log_results() {
assert $PWD $HERE
local file=$HERE/log/$(date +'%Y-%m-%d-%H:%M:%S').txt
local ENR="echo '% < received | expected >'"
rm -f $file
ls failed | xargs -I % sh -c \
"$ENR && cat failed/% && printf '\n-----\n\n'" \
>$file >latest.log
printf "\n ${HERE/$HOME/~}/latest.log\n\n"
}
main
ec=$?
[[ $ec = 1 ]] && log_results
exit $ec