#!/bin/sh
# Test failure recording (with and without --direct).
# Copyright (C) 2016-2018 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.  */

set -e

common_objpfx=$1; shift
test_program_prefix_before_env=$1; shift
run_program_env=$1; shift
test_program_prefix_after_env=$1; shift

run_test () {
    expected_status="$1"
    expected_output="$2"
    shift 2
    args="${common_objpfx}support/tst-support_record_failure $*"
    echo "running: $args"
    set +e
    output="$(${test_program_prefix_before_env} \
		 ${run_program} ${test_program_prefix_after_env} $args)"
    status=$?
    set -e
    echo "  exit status: $status"
    if test "$output" != "$expected_output" ; then
	echo "error: unexpected output: $output"
	exit 1
    fi
    if test "$status" -ne "$expected_status" ; then
	echo "error: exit status $expected_status expected"
	exit 1
    fi
}

different_status () {
    direct="$1"
    run_test 1 "error: 1 test failures" $direct --status=0
    run_test 1 "error: 1 test failures" $direct --status=1
    run_test 2 "error: 1 test failures" $direct --status=2
    run_test 1 "error: 1 test failures" $direct --status=77
    run_test 2 "error: tst-support_record_failure.c:109: not true: false
error: 1 test failures" $direct --test-verify
    run_test 2 "error: tst-support_record_failure.c:109: not true: false
info: execution passed failed TEST_VERIFY
error: 1 test failures" $direct --test-verify --verbose
}

different_status
different_status --direct

run_test 1 "error: tst-support_record_failure.c:116: not true: false
error: 1 test failures" --test-verify-exit
# --direct does not print the summary error message if exit is called.
run_test 1 "error: tst-support_record_failure.c:116: not true: false" \
	 --direct --test-verify-exit
