1 /******************************************************************************
4 * Company XS Embedded GmbH
5 *****************************************************************************/
6 /******************************************************************************
7 * This Source Code Form is subject to the terms of the
8 * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
9 * with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 ******************************************************************************/
13 * @ingroup Persistence client library test
15 * @brief Test of persistence client library
22 #include "pers_test_base.h"
30 X_TEST_REPORTED_RESULT
33 int _optTestsReported;
36 #define X_TEST_INIT() do { \
37 _optTestID[0] = '\0'; \
40 #define ___FILE___ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
42 #define REPORT_WARNINGS(){ \
43 if(0==(_optTestsReported & (1 << X_TEST_REPORTED_RESULT))) \
44 X_TEST_REPORT_RESULT(PASSED); \
48 * @brief: Report name of test. This has to be reported first.
51 #define X_TEST_REPORT_TEST_NAME(...) do { \
52 char buf[sizeof(_optTestID)]; \
53 snprintf(buf,sizeof(buf), __VA_ARGS__); \
54 snprintf (_optTestID, sizeof(_optTestID),"%s::%s", ___FILE___, buf); \
55 X_TEST_REPORT_TEST_ID(_optTestID); \
56 X_TEST_REPORT_TEST_NAME_ID(_optTestID, __VA_ARGS__); \
60 * @brief: Path to root of source code directory under test
63 #define X_TEST_REPORT_PATH(...) do { \
64 X_TEST_REPORT_PATH_ID( _optTestID, __VA_ARGS__ ); \
68 * @brief: Name of subcomponent under test, leave empty or set value NONE if not suitable for a COMPONENT test
71 #define X_TEST_REPORT_COMP_NAME(...) do { \
72 X_TEST_REPORT_COMP_NAME_ID( _optTestID, __VA_ARGS__ ); \
76 * @brief: Name of class or file under test, leave empty or set value NONE for a COMPONENT test
79 #define X_TEST_REPORT_FILE_NAME(...) do { \
80 X_TEST_REPORT_FILE_NAME_ID( _optTestID, __VA_ARGS__ ); \
84 * @brief: If information exists: Reference to a requirement, feature or bug ID. Else leave empty or set value NONE
87 #define X_TEST_REPORT_REFERENCE(...) do { \
88 X_TEST_REPORT_REFERENCE_ID( _optTestID, __VA_ARGS__ ); \
92 * @brief: A short description of test case.
93 * Do not leave empty, can also be a internal department Test ID like CORE-OS-BOOT-0001
96 #define X_TEST_REPORT_DESCRIPTION(...) do { \
97 X_TEST_REPORT_DESCRIPTION_ID( _optTestID, __VA_ARGS__ ); \
101 * @brief: Reports weather this is a UNIT or a COMPONENT test
104 #define X_TEST_REPORT_KIND(kind) do { \
105 X_TEST_REPORT_KIND_ID( _optTestID, kind ); \
109 * @brief: valid values: PASSED, FAILED or NONE. PASSED if test result is ok, FAILED if test result is not as expected, NONE if no test exists for whole file or class
112 #define X_TEST_REPORT_RESULT(result) do { \
113 X_TEST_REPORT_RESULT_ID( _optTestID, result); \
114 _optTestsReported |= 1 << X_TEST_REPORTED_RESULT; \
118 * @brief: Additional information, if test "just" checks common information flow inside structure (GOOD test case) or if structure is tested with invalid or border values(BORDER)
121 #define X_TEST_REPORT_TYPE(type) do { \
122 X_TEST_REPORT_TYPE_ID( _optTestID, type ); \
126 /* Start a unit test with START_TEST(unit_name), end with END_TEST
127 One must use braces within a START_/END_ pair to declare new variables
129 #define START_TEST(__testname)\
130 static void __testname (int _i CK_ATTRIBUTE_UNUSED)\
133 X_TEST_REPORT_TEST_NAME(""# __testname); \
134 tcase_fn_start (""# __testname, __FILE__, __LINE__);
136 #define x_fail_unless(exp, ...){\
139 X_TEST_REPORT_RESULT(FAILED); \
141 fail_unless(exp, ##__VA_ARGS__); \
144 #define x_fail_if(exp, ...) {\
147 X_TEST_REPORT_RESULT(FAILED); \
149 fail_if(exp, ##__VA_ARGS__); \
153 #define x_fail(...) {\
154 X_TEST_REPORT_RESULT(FAILED); \
159 /* End a unit test */
162 _optTestsReported = 0; }\
169 #endif /* PERSCHECK_H_ */