kselftest.h 2.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/*
 * kselftest.h:	kselftest framework return codes to include from
 *		selftests.
 *
 * Copyright (c) 2014 Shuah Khan <shuahkh@osg.samsung.com>
 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
 *
 * This file is released under the GPLv2.
 */
#ifndef __KSELFTEST_H
#define __KSELFTEST_H

#include <stdlib.h>
#include <unistd.h>
15
#include <stdarg.h>
16

D
Darren Hart 已提交
17 18 19 20 21 22 23
/* define kselftest exit codes */
#define KSFT_PASS  0
#define KSFT_FAIL  1
#define KSFT_XFAIL 2
#define KSFT_XPASS 3
#define KSFT_SKIP  4

24 25 26 27 28 29 30 31 32 33 34
/* counters */
struct ksft_count {
	unsigned int ksft_pass;
	unsigned int ksft_fail;
	unsigned int ksft_xfail;
	unsigned int ksft_xpass;
	unsigned int ksft_xskip;
};

static struct ksft_count ksft_cnt;

35 36 37 38 39 40 41
static inline int ksft_test_num(void)
{
	return ksft_cnt.ksft_pass + ksft_cnt.ksft_fail +
		ksft_cnt.ksft_xfail + ksft_cnt.ksft_xpass +
		ksft_cnt.ksft_xskip;
}

42 43 44 45 46 47
static inline void ksft_inc_pass_cnt(void) { ksft_cnt.ksft_pass++; }
static inline void ksft_inc_fail_cnt(void) { ksft_cnt.ksft_fail++; }
static inline void ksft_inc_xfail_cnt(void) { ksft_cnt.ksft_xfail++; }
static inline void ksft_inc_xpass_cnt(void) { ksft_cnt.ksft_xpass++; }
static inline void ksft_inc_xskip_cnt(void) { ksft_cnt.ksft_xskip++; }

48 49 50 51 52
static inline void ksft_print_header(void)
{
	printf("TAP version 13\n");
}

53 54
static inline void ksft_print_cnts(void)
{
55 56 57
	printf("1..%d\n", ksft_test_num());
}

58
static inline void ksft_test_result_pass(const char *msg, ...)
59
{
60 61
	va_list args;

62
	ksft_cnt.ksft_pass++;
63 64 65 66 67

	va_start(args, msg);
	printf("ok %d ", ksft_test_num());
	vprintf(msg, args);
	va_end(args);
68 69
}

70
static inline void ksft_test_result_fail(const char *msg, ...)
71
{
72 73
	va_list args;

74
	ksft_cnt.ksft_fail++;
75 76 77 78 79

	va_start(args, msg);
	printf("not ok %d ", ksft_test_num());
	vprintf(msg, args);
	va_end(args);
80 81
}

82
static inline void ksft_test_result_skip(const char *msg, ...)
83
{
84 85
	va_list args;

86
	ksft_cnt.ksft_xskip++;
87 88 89 90 91

	va_start(args, msg);
	printf("ok %d # skip ", ksft_test_num());
	vprintf(msg, args);
	va_end(args);
92 93 94 95
}

static inline int ksft_exit_pass(void)
{
96
	ksft_print_cnts();
D
Darren Hart 已提交
97
	exit(KSFT_PASS);
98
}
99

100 101
static inline int ksft_exit_fail(void)
{
102 103
	printf("Bail out!\n");
	ksft_print_cnts();
D
Darren Hart 已提交
104
	exit(KSFT_FAIL);
105
}
106

107
static inline int ksft_exit_fail_msg(const char *msg, ...)
108
{
109 110 111 112 113 114 115
	va_list args;

	va_start(args, msg);
	printf("Bail out! ");
	vprintf(msg, args);
	va_end(args);

116 117 118 119
	ksft_print_cnts();
	exit(KSFT_FAIL);
}

120 121
static inline int ksft_exit_xfail(void)
{
122
	ksft_print_cnts();
D
Darren Hart 已提交
123
	exit(KSFT_XFAIL);
124
}
125

126 127
static inline int ksft_exit_xpass(void)
{
128
	ksft_print_cnts();
D
Darren Hart 已提交
129
	exit(KSFT_XPASS);
130
}
131

132
static inline int ksft_exit_skip(const char *msg, ...)
133
{
134 135 136 137 138 139 140 141
	if (msg) {
		va_list args;

		va_start(args, msg);
		printf("1..%d # Skipped: ", ksft_test_num());
		vprintf(msg, args);
		va_end(args);
	} else {
142
		ksft_print_cnts();
143
	}
D
Darren Hart 已提交
144
	exit(KSFT_SKIP);
145 146 147
}

#endif /* __KSELFTEST_H */