# Copyright (c) 2009-2014 Petri Lehtinen <petri@digip.org>
#
# Jansson is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.

die() {
    echo "$1" >&2
    exit 1
}

[ -n "$1" ] || die "Usage: $0 suite-name"
[ -n "$bindir" ] || die "Set bindir"
[ -n "$logdir" ] || die "Set logdir"
[ -n "$scriptdir" ] || die "Set scriptdir"
[ -n "$suites_srcdir" ] || die "Set suites_srcdir"
[ -n "$suites_builddir" ] || die "Set suites_builddir"

json_process=$bindir/json_process

suite_name=$1
suite_srcdir=$suites_srcdir/$suite_name
suite_builddir=$suites_builddir/$suite_name
suite_log=$logdir/$suite_name

[ -z "$VERBOSE" ] && VERBOSE=0
[ -z "$STOP" ] && STOP=0

. $scriptdir/valgrind.sh

rm -rf $suite_log
mkdir -p $suite_log

for test_path in $suite_srcdir/*; do
    test_name=$(basename $test_path)
    test_builddir=$suite_builddir/$test_name
    test_log=$suite_log/$test_name

    [ "$test_name" = "run" ] && continue
    is_test || continue

    rm -rf $test_log
    mkdir -p $test_log
    if [ $VERBOSE -eq 1 ]; then
        printf '%s... ' "$test_name"
    fi

    run_test
    case $? in
        0)
            # Success
            if [ $VERBOSE -eq 1 ]; then
                printf 'ok\n'
            else
                printf '.'
            fi
            rm -rf $test_log
            ;;

        77)
            # Skip
            if [ $VERBOSE -eq 1 ]; then
                printf 'skipped\n'
            else
                printf 'S'
            fi
            rm -rf $test_log
            ;;

        *)
            # Failure
            if [ $VERBOSE -eq 1 ]; then
                printf 'FAILED\n'
            else
                printf 'F'
            fi

            [ $STOP -eq 1 ] && break
            ;;
    esac
done

if [ $VERBOSE -eq 0 ]; then
    printf '\n'
fi

if [ -n "$(ls -A $suite_log)" ]; then
    for test_log in $suite_log/*; do
        test_name=$(basename $test_log)
        test_path=$suite_srcdir/$test_name
        echo "================================================================="
        echo "$suite_name/$test_name"
        echo "================================================================="
        show_error
        echo
    done
    echo "================================================================="
    exit 1
else
    rm -rf $suite_log
fi
