| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author       Notes * 2018-11-19     MurphyZhao   the first version */#ifndef __UTEST_H__#define __UTEST_H__#include <rtthread.h>#include <stdint.h>#include "utest_log.h"#include "utest_assert.h"#ifdef __cplusplusextern "C" {#endif/** * utest_error *  * @brief Test result. *  * @member UTEST_PASSED Test success. * @member UTEST_FAILED Test failed. * @member UTEST_PASSED Test skipped. * */enum utest_error{    UTEST_PASSED  = 0,    UTEST_FAILED  = 1,    UTEST_SKIPPED = 2};typedef enum utest_error utest_err_e;/** * utest *  * @brief utest data structure. *  * @member error      Error number from enum `utest_error`. * @member passed_num Total number of tests passed. * @member failed_num Total number of tests failed. * */struct utest{    utest_err_e error;    uint32_t passed_num;    uint32_t failed_num;};typedef struct utest *utest_t;/** * utest_tc_export *  * @brief utest testcase data structure. *        Will export the data to `UtestTcTab` section in flash. *  * @member name        Testcase name. * @member run_timeout Testcase maximum test time (Time unit: seconds). * @member init        Necessary initialization before executing the test case function. * @member tc          Total number of tests failed. * @member cleanup     Total number of tests failed. * */struct utest_tc_export {    const char  *name;    uint32_t     run_timeout;    rt_err_t   (*init)(void);    void       (*tc)(void);    rt_err_t   (*cleanup)(void);};typedef struct utest_tc_export *utest_tc_export_t;/** * test_unit_func *  * @brief Unit test handler function pointer. * */typedef void (*test_unit_func)(void);/** * utest_unit_run *  * @brief Unit test function executor. *        No need for the user to call this function directly *  * @param func           Unit test function. * @param unit_func_name Unit test function name. *  * @return void * */void utest_unit_run(test_unit_func func, const char *unit_func_name);/** * utest_handle_get *  * @brief Get the utest data structure handle. *        No need for the user to call this function directly *  * @param void *  * @return utest_t type. (struct utest *) * */utest_t utest_handle_get(void);/** * UTEST_NAME_MAX_LEN *  * @brief Testcase name maximum length. * */#define UTEST_NAME_MAX_LEN (128u)/** * UTEST_TC_EXPORT *  * @brief Export testcase function to `UtestTcTab` section in flash. *        Used in application layer. *  * @param testcase The testcase function. * @param name     The testcase name. * @param init     The initialization function of the test case. * @param cleanup  The cleanup function of the test case. * @param timeout  Testcase maximum test time (Time unit: seconds). *  * @return None * */#define UTEST_TC_EXPORT(testcase, name, init, cleanup, timeout)                \    RT_USED static const struct utest_tc_export _utest_testcase                \    SECTION("UtestTcTab") =                                                    \    {                                                                          \        name,                                                                  \        timeout,                                                               \        init,                                                                  \        testcase,                                                              \        cleanup                                                                \    }/** * UTEST_UNIT_RUN *  * @brief Unit test function executor. *        Used in `testcase` function in application. *  * @param test_unit_func Unit test function *  * @return None * */#define UTEST_UNIT_RUN(test_unit_func)                                         \    utest_unit_run(test_unit_func, #test_unit_func);                           \    if(utest_handle_get()->failed_num != 0) return;#ifdef __cplusplus}#endif#endif /* __UTEST_H__ */
 |