#ifndef _JTEST_TEST_CALL_H_
|
#define _JTEST_TEST_CALL_H_
|
|
/*--------------------------------------------------------------------------------*/
|
/* Includes */
|
/*--------------------------------------------------------------------------------*/
|
#include "jtest_test.h"
|
#include "jtest_test_define.h"
|
#include "jtest_fw.h"
|
|
/*--------------------------------------------------------------------------------*/
|
/* Macros and Defines */
|
/*--------------------------------------------------------------------------------*/
|
|
/**
|
* Exectute the test in the #JTEST_TEST_t struct associated with the identifier
|
* test_fn and store the result in retval.
|
*/
|
#define JTEST_TEST_RUN(retval, test_fn) \
|
do \
|
{ \
|
JTEST_DUMP_STR("Test Name:\n"); \
|
JTEST_DUMP_STR(JTEST_TEST_STRUCT_NAME(test_fn).test_fn_str); \
|
JTEST_DUMP_STR("Function Under Test:\n"); \
|
JTEST_DUMP_STR(JTEST_TEST_STRUCT_NAME(test_fn).fut_str); \
|
retval = JTEST_TEST_STRUCT_NAME(test_fn).test_fn_ptr(); \
|
} while (0)
|
|
/**
|
* Update the enclosing #JTEST_GROUP_t's pass/fail information based on
|
* test_retval.
|
*
|
* @param test_retval A #JTEST_TEST_RET_enum for the current test.
|
*
|
* @warning Only use if #JTEST_TEST_t is called in the context of a
|
* #JTEST_GROUP_t.
|
*/
|
#define JTEST_TEST_UPDATE_PARENT_GROUP_PF(test_retval) \
|
do \
|
{ \
|
/* Update enclosing JTEST_GROUP_t with pass/fail info */ \
|
if (test_retval == JTEST_TEST_PASSED) \
|
{ \
|
JTEST_GROUP_INC_PASSED(JTEST_CURRENT_GROUP_PTR(), 1); \
|
} else { \
|
JTEST_GROUP_INC_FAILED(JTEST_CURRENT_GROUP_PTR(), 1); \
|
} \
|
} while (0)
|
|
/**
|
* Update the #JTEST_FW with pass/fail information based on test_retval.
|
*
|
* @param test_retval A #JTEST_TEST_RET_enum for the current test.
|
*/
|
#define JTEST_TEST_UPDATE_FW_PF(test_retval) \
|
do \
|
{ \
|
/* Update the JTEST_FW with pass/fail info */ \
|
if (test_retval == JTEST_TEST_PASSED) \
|
{ \
|
JTEST_FW_INC_PASSED( 1); \
|
} else { \
|
JTEST_FW_INC_FAILED(1); \
|
} \
|
} while (0)
|
|
/**
|
* Update the enclosing JTEST_GROUP_t's pass/fail information, or the
|
* #JTEST_FW's if this test has no enclosing #JTEST_GROUP_t.
|
*
|
* @param test_retval A #JTEST_TEST_RET_enum for the current test.
|
*/
|
#define JTEST_TEST_UPDATE_PARENT_GROUP_OR_FW_PF(test_retval) \
|
do \
|
{ \
|
/* Update pass-fail information */ \
|
if (JTEST_CURRENT_GROUP_PTR() /* Non-null */) \
|
{ \
|
JTEST_TEST_UPDATE_PARENT_GROUP_PF(test_retval); \
|
} else { \
|
JTEST_TEST_UPDATE_FW_PF(test_retval); \
|
} \
|
} while (0)
|
|
/**
|
* Dump the results of the test to the Keil Debugger.
|
*/
|
#define JTEST_TEST_DUMP_RESULTS(test_retval) \
|
do \
|
{ \
|
if (test_retval == JTEST_TEST_PASSED) \
|
{ \
|
JTEST_DUMP_STR("Test Passed\n"); \
|
} else { \
|
JTEST_DUMP_STR("Test Failed\n"); \
|
} \
|
} while (0)
|
|
/**
|
* Call the #JTEST_TEST_t assocaited with the identifier test_fn.
|
*/
|
#define JTEST_TEST_CALL(test_fn) \
|
do \
|
{ \
|
if (JTEST_TEST_IS_ENABLED(&JTEST_TEST_STRUCT_NAME(test_fn))) \
|
{ \
|
/* Default to failure */ \
|
JTEST_TEST_RET_t __jtest_test_ret = JTEST_TEST_FAILED; \
|
\
|
JTEST_ACT_TEST_START(); \
|
JTEST_TEST_RUN(__jtest_test_ret, test_fn); \
|
\
|
/* Update pass-fail information */ \
|
JTEST_TEST_UPDATE_PARENT_GROUP_OR_FW_PF(__jtest_test_ret); \
|
\
|
JTEST_TEST_DUMP_RESULTS(__jtest_test_ret); \
|
JTEST_ACT_TEST_END(); \
|
} \
|
} while (0)
|
|
#endif /* _JTEST_TEST_CALL_H_ */
|