# 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"
}
