# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2023 Collabora Ltd
#
# Helpers for outputting in KTAP format
#
KTAP_TESTNO=1
KTAP_CNT_PASS=0
KTAP_CNT_FAIL=0
KTAP_CNT_SKIP=0

KSFT_PASS=0
KSFT_FAIL=1
KSFT_XFAIL=2
KSFT_XPASS=3
KSFT_SKIP=4

KSFT_NUM_TESTS=0

ktap_print_header() {
	echo "TAP version 13"
}

ktap_print_msg()
{
	echo "#" $@
}

ktap_set_plan() {
	KSFT_NUM_TESTS="$1"

	echo "1..$KSFT_NUM_TESTS"
}

ktap_skip_all() {
	echo -n "1..0 # SKIP "
	echo $@
}

__ktap_test() {
	result="$1"
	description="$2"
	directive="$3" # optional

	local directive_str=
	[[ ! -z "$directive" ]] && directive_str="# $directive"

	echo $result $KTAP_TESTNO $description $directive_str

	KTAP_TESTNO=$((KTAP_TESTNO+1))
}

ktap_test_pass() {
	description="$1"

	result="ok"
	__ktap_test "$result" "$description"

	KTAP_CNT_PASS=$((KTAP_CNT_PASS+1))
}

ktap_test_skip() {
	description="$1"

	result="ok"
	directive="SKIP"
	__ktap_test "$result" "$description" "$directive"

	KTAP_CNT_SKIP=$((KTAP_CNT_SKIP+1))
}

ktap_test_fail() {
	description="$1"

	result="not ok"
	__ktap_test "$result" "$description"

	KTAP_CNT_FAIL=$((KTAP_CNT_FAIL+1))
}

ktap_test_result() {
	description="$1"
	shift

	if $@; then
		ktap_test_pass "$description"
	else
		ktap_test_fail "$description"
	fi
}

ktap_exit_fail_msg() {
	echo "Bail out! " $@
	ktap_print_totals

	exit "$KSFT_FAIL"
}

ktap_finished() {
	ktap_print_totals

	if [ $(("$KTAP_CNT_PASS" + "$KTAP_CNT_SKIP")) -eq "$KSFT_NUM_TESTS" ]; then
		exit "$KSFT_PASS"
	else
		exit "$KSFT_FAIL"
	fi
}

ktap_print_totals() {
	echo "# Totals: pass:$KTAP_CNT_PASS fail:$KTAP_CNT_FAIL xfail:0 xpass:0 skip:$KTAP_CNT_SKIP error:0"
}
