xref: /linux/tools/testing/selftests/kselftest/ktap_helpers.sh (revision 55d0969c451159cff86949b38c39171cab962069)
1# SPDX-License-Identifier: GPL-2.0
2#
3# Copyright (c) 2023 Collabora Ltd
4#
5# Helpers for outputting in KTAP format
6#
7KTAP_TESTNO=1
8KTAP_CNT_PASS=0
9KTAP_CNT_FAIL=0
10KTAP_CNT_SKIP=0
11
12KSFT_PASS=0
13KSFT_FAIL=1
14KSFT_XFAIL=2
15KSFT_XPASS=3
16KSFT_SKIP=4
17
18KSFT_NUM_TESTS=0
19
20ktap_print_header() {
21	echo "TAP version 13"
22}
23
24ktap_print_msg()
25{
26	echo "#" $@
27}
28
29ktap_set_plan() {
30	KSFT_NUM_TESTS="$1"
31
32	echo "1..$KSFT_NUM_TESTS"
33}
34
35ktap_skip_all() {
36	echo -n "1..0 # SKIP "
37	echo $@
38}
39
40__ktap_test() {
41	result="$1"
42	description="$2"
43	directive="$3" # optional
44
45	local directive_str=
46	[ ! -z "$directive" ] && directive_str="# $directive"
47
48	echo $result $KTAP_TESTNO $description $directive_str
49
50	KTAP_TESTNO=$((KTAP_TESTNO+1))
51}
52
53ktap_test_pass() {
54	description="$1"
55
56	result="ok"
57	__ktap_test "$result" "$description"
58
59	KTAP_CNT_PASS=$((KTAP_CNT_PASS+1))
60}
61
62ktap_test_skip() {
63	description="$1"
64
65	result="ok"
66	directive="SKIP"
67	__ktap_test "$result" "$description" "$directive"
68
69	KTAP_CNT_SKIP=$((KTAP_CNT_SKIP+1))
70}
71
72ktap_test_fail() {
73	description="$1"
74
75	result="not ok"
76	__ktap_test "$result" "$description"
77
78	KTAP_CNT_FAIL=$((KTAP_CNT_FAIL+1))
79}
80
81ktap_test_result() {
82	description="$1"
83	shift
84
85	if $@; then
86		ktap_test_pass "$description"
87	else
88		ktap_test_fail "$description"
89	fi
90}
91
92ktap_exit_fail_msg() {
93	echo "Bail out! " $@
94	ktap_print_totals
95
96	exit "$KSFT_FAIL"
97}
98
99ktap_finished() {
100	ktap_print_totals
101
102	if [ $((KTAP_CNT_PASS + KTAP_CNT_SKIP)) -eq "$KSFT_NUM_TESTS" ]; then
103		exit "$KSFT_PASS"
104	else
105		exit "$KSFT_FAIL"
106	fi
107}
108
109ktap_print_totals() {
110	echo "# Totals: pass:$KTAP_CNT_PASS fail:$KTAP_CNT_FAIL xfail:0 xpass:0 skip:$KTAP_CNT_SKIP error:0"
111}
112