xref: /linux/tools/testing/selftests/kselftest/ktap_helpers.sh (revision 21266b8df5224c4f677acf9f353eecc9094731f0)
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_XFAIL=0
11KTAP_CNT_SKIP=0
12
13KSFT_PASS=0
14KSFT_FAIL=1
15KSFT_XFAIL=2
16KSFT_XPASS=3
17KSFT_SKIP=4
18
19KSFT_NUM_TESTS=0
20
21ktap_print_header() {
22	echo "TAP version 13"
23}
24
25ktap_print_msg()
26{
27	echo "#" $@
28}
29
30ktap_set_plan() {
31	KSFT_NUM_TESTS="$1"
32
33	echo "1..$KSFT_NUM_TESTS"
34}
35
36ktap_skip_all() {
37	echo -n "1..0 # SKIP "
38	echo $@
39}
40
41__ktap_test() {
42	result="$1"
43	description="$2"
44	directive="${3:-}" # optional
45
46	local directive_str=
47	[ ! -z "$directive" ] && directive_str="# $directive"
48
49	echo $result $KTAP_TESTNO $description $directive_str
50
51	KTAP_TESTNO=$((KTAP_TESTNO+1))
52}
53
54ktap_test_pass() {
55	description="$1"
56
57	result="ok"
58	__ktap_test "$result" "$description"
59
60	KTAP_CNT_PASS=$((KTAP_CNT_PASS+1))
61}
62
63ktap_test_skip() {
64	description="$1"
65
66	result="ok"
67	directive="SKIP"
68	__ktap_test "$result" "$description" "$directive"
69
70	KTAP_CNT_SKIP=$((KTAP_CNT_SKIP+1))
71}
72
73ktap_test_xfail() {
74	description="$1"
75
76	result="ok"
77	directive="XFAIL"
78	__ktap_test "$result" "$description" "$directive"
79
80	KTAP_CNT_XFAIL=$((KTAP_CNT_XFAIL+1))
81}
82
83ktap_test_fail() {
84	description="$1"
85
86	result="not ok"
87	__ktap_test "$result" "$description"
88
89	KTAP_CNT_FAIL=$((KTAP_CNT_FAIL+1))
90}
91
92ktap_test_result() {
93	description="$1"
94	shift
95
96	if $@; then
97		ktap_test_pass "$description"
98	else
99		ktap_test_fail "$description"
100	fi
101}
102
103ktap_exit_fail_msg() {
104	echo "Bail out! " $@
105	ktap_print_totals
106
107	exit "$KSFT_FAIL"
108}
109
110ktap_finished() {
111	ktap_print_totals
112
113	if [ $((KTAP_CNT_PASS + KTAP_CNT_SKIP + KTAP_CNT_XFAIL)) -eq "$KSFT_NUM_TESTS" ]; then
114		exit "$KSFT_PASS"
115	else
116		exit "$KSFT_FAIL"
117	fi
118}
119
120ktap_print_totals() {
121	if [ "$KTAP_CNT_SKIP" -gt 0 ]; then
122		echo "# $KTAP_CNT_SKIP skipped test(s) detected. " \
123			"Consider enabling relevant config options to improve coverage."
124	fi
125	echo "# Totals: pass:$KTAP_CNT_PASS fail:$KTAP_CNT_FAIL xfail:$KTAP_CNT_XFAIL xpass:0 skip:$KTAP_CNT_SKIP error:0"
126}
127