#!/bin/sh

# Copyright (C) Dmitry Volyntsev
# Copyright (C) NGINX, Inc.

set -e

. test/options
. test/setup

for njs_test in $NJS_TESTS; do
    . test/prepare

    njs_log="$NJS_TEST_DIR/${njs_test%.*}.log"

    verbose "$njs_test $njs_log"
    cat << END >> $NJS_TEST_LOG
----------------------------------------
running $njs_test $njs_log
END

    status=0

    NJS_PATH=$njs_paths \
    NJS_EXIT_CODE=$NJS_TEST_EXIT_CODE \
    $NJS_TEST_BINARY $NJS_TEST_DIR/$njs_test > $njs_log 2>&1 || status=$?

    cat $njs_log >> $NJS_TEST_LOG
    njs_out=`cat $njs_log`

    if [ "$status" -eq 0 ]; then
        if [ -n "$njs_negative" ]; then
            failed $njs_test $njs_log

        elif [ $njs_async = yes ]; then
            if [ "$njs_out" != 'Test262:AsyncTestComplete' ]; then
                failed $njs_test $njs_log

            else
                passed $njs_test
            fi

        else
            if [ -n "$njs_out" ]; then
                failed $njs_test $njs_log

            else
                passed $njs_test
            fi
        fi

    else
        if [ -n "$njs_negative" ]; then
            if [ "$status" = "$NJS_TEST_EXIT_CODE" ]; then
                passed $njs_test
            else
                echo "negative test exited with unexpected exit code:$status"
                failed $njs_test $njs_log
            fi

        else
            failed $njs_test $njs_log
        fi
    fi

done

. test/finalize
. test/report
