1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2018-11-19 MurphyZhao the first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #ifndef __UTEST_H__ 12*10465441SEvalZero #define __UTEST_H__ 13*10465441SEvalZero 14*10465441SEvalZero #include <rtthread.h> 15*10465441SEvalZero #include "utest_log.h" 16*10465441SEvalZero #include "utest_assert.h" 17*10465441SEvalZero 18*10465441SEvalZero /** 19*10465441SEvalZero * utest_error 20*10465441SEvalZero * 21*10465441SEvalZero * @brief Test result. 22*10465441SEvalZero * 23*10465441SEvalZero * @member UTEST_PASSED Test success. 24*10465441SEvalZero * @member UTEST_FAILED Test failed. 25*10465441SEvalZero * @member UTEST_PASSED Test skipped. 26*10465441SEvalZero * 27*10465441SEvalZero */ 28*10465441SEvalZero enum utest_error 29*10465441SEvalZero { 30*10465441SEvalZero UTEST_PASSED = 0, 31*10465441SEvalZero UTEST_FAILED = 1, 32*10465441SEvalZero UTEST_SKIPPED = 2 33*10465441SEvalZero }; 34*10465441SEvalZero typedef enum utest_error utest_err_e; 35*10465441SEvalZero 36*10465441SEvalZero /** 37*10465441SEvalZero * utest 38*10465441SEvalZero * 39*10465441SEvalZero * @brief utest data structure. 40*10465441SEvalZero * 41*10465441SEvalZero * @member error Error number from enum `utest_error`. 42*10465441SEvalZero * @member passed_num Total number of tests passed. 43*10465441SEvalZero * @member failed_num Total number of tests failed. 44*10465441SEvalZero * 45*10465441SEvalZero */ 46*10465441SEvalZero struct utest 47*10465441SEvalZero { 48*10465441SEvalZero utest_err_e error; 49*10465441SEvalZero uint32_t passed_num; 50*10465441SEvalZero uint32_t failed_num; 51*10465441SEvalZero }; 52*10465441SEvalZero typedef struct utest *utest_t; 53*10465441SEvalZero 54*10465441SEvalZero /** 55*10465441SEvalZero * utest_tc_export 56*10465441SEvalZero * 57*10465441SEvalZero * @brief utest testcase data structure. 58*10465441SEvalZero * Will export the data to `UtestTcTab` section in flash. 59*10465441SEvalZero * 60*10465441SEvalZero * @member name Testcase name. 61*10465441SEvalZero * @member run_timeout Testcase maximum test time (Time unit: seconds). 62*10465441SEvalZero * @member init Necessary initialization before executing the test case function. 63*10465441SEvalZero * @member tc Total number of tests failed. 64*10465441SEvalZero * @member cleanup Total number of tests failed. 65*10465441SEvalZero * 66*10465441SEvalZero */ 67*10465441SEvalZero struct utest_tc_export { 68*10465441SEvalZero const char *name; 69*10465441SEvalZero uint32_t run_timeout; 70*10465441SEvalZero rt_err_t (*init)(void); 71*10465441SEvalZero void (*tc)(void); 72*10465441SEvalZero rt_err_t (*cleanup)(void); 73*10465441SEvalZero }; 74*10465441SEvalZero typedef struct utest_tc_export *utest_tc_export_t; 75*10465441SEvalZero 76*10465441SEvalZero /** 77*10465441SEvalZero * test_unit_func 78*10465441SEvalZero * 79*10465441SEvalZero * @brief Unit test handler function pointer. 80*10465441SEvalZero * 81*10465441SEvalZero */ 82*10465441SEvalZero typedef void (*test_unit_func)(void); 83*10465441SEvalZero 84*10465441SEvalZero /** 85*10465441SEvalZero * utest_unit_run 86*10465441SEvalZero * 87*10465441SEvalZero * @brief Unit test function executor. 88*10465441SEvalZero * No need for the user to call this function directly 89*10465441SEvalZero * 90*10465441SEvalZero * @param func Unit test function. 91*10465441SEvalZero * @param unit_func_name Unit test function name. 92*10465441SEvalZero * 93*10465441SEvalZero * @return void 94*10465441SEvalZero * 95*10465441SEvalZero */ 96*10465441SEvalZero void utest_unit_run(test_unit_func func, const char *unit_func_name); 97*10465441SEvalZero 98*10465441SEvalZero /** 99*10465441SEvalZero * utest_handle_get 100*10465441SEvalZero * 101*10465441SEvalZero * @brief Get the utest data structure handle. 102*10465441SEvalZero * No need for the user to call this function directly 103*10465441SEvalZero * 104*10465441SEvalZero * @param void 105*10465441SEvalZero * 106*10465441SEvalZero * @return utest_t type. (struct utest *) 107*10465441SEvalZero * 108*10465441SEvalZero */ 109*10465441SEvalZero utest_t utest_handle_get(void); 110*10465441SEvalZero 111*10465441SEvalZero /** 112*10465441SEvalZero * UTEST_NAME_MAX_LEN 113*10465441SEvalZero * 114*10465441SEvalZero * @brief Testcase name maximum length. 115*10465441SEvalZero * 116*10465441SEvalZero */ 117*10465441SEvalZero #define UTEST_NAME_MAX_LEN (128u) 118*10465441SEvalZero 119*10465441SEvalZero /** 120*10465441SEvalZero * UTEST_TC_EXPORT 121*10465441SEvalZero * 122*10465441SEvalZero * @brief Export testcase function to `UtestTcTab` section in flash. 123*10465441SEvalZero * Used in application layer. 124*10465441SEvalZero * 125*10465441SEvalZero * @param testcase The testcase function. 126*10465441SEvalZero * @param name The testcase name. 127*10465441SEvalZero * @param init The initialization function of the test case. 128*10465441SEvalZero * @param cleanup The cleanup function of the test case. 129*10465441SEvalZero * @param timeout Testcase maximum test time (Time unit: seconds). 130*10465441SEvalZero * 131*10465441SEvalZero * @return None 132*10465441SEvalZero * 133*10465441SEvalZero */ 134*10465441SEvalZero #define UTEST_TC_EXPORT(testcase, name, init, cleanup, timeout) \ 135*10465441SEvalZero RT_USED static const struct utest_tc_export _utest_testcase \ 136*10465441SEvalZero SECTION("UtestTcTab") = \ 137*10465441SEvalZero { \ 138*10465441SEvalZero name, \ 139*10465441SEvalZero timeout, \ 140*10465441SEvalZero init, \ 141*10465441SEvalZero testcase, \ 142*10465441SEvalZero cleanup \ 143*10465441SEvalZero } 144*10465441SEvalZero 145*10465441SEvalZero /** 146*10465441SEvalZero * UTEST_UNIT_RUN 147*10465441SEvalZero * 148*10465441SEvalZero * @brief Unit test function executor. 149*10465441SEvalZero * Used in `testcase` function in application. 150*10465441SEvalZero * 151*10465441SEvalZero * @param test_unit_func Unit test function 152*10465441SEvalZero * 153*10465441SEvalZero * @return None 154*10465441SEvalZero * 155*10465441SEvalZero */ 156*10465441SEvalZero #define UTEST_UNIT_RUN(test_unit_func) \ 157*10465441SEvalZero utest_unit_run(test_unit_func, #test_unit_func); \ 158*10465441SEvalZero if(utest_handle_get()->failed_num != 0) return; 159*10465441SEvalZero 160*10465441SEvalZero #endif /* __UTEST_H__ */ 161