| #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_ */ |