#ifndef _JTEST_GROUP_CALL_H_ #define _JTEST_GROUP_CALL_H_ /*--------------------------------------------------------------------------------*/ /* Includes */ /*--------------------------------------------------------------------------------*/ #include "jtest_fw.h" #include /*--------------------------------------------------------------------------------*/ /* Macros and Defines */ /*--------------------------------------------------------------------------------*/ /** * Execute the test in the #JTEST_GROUP_t struct associated witht he identifier * group_fn. */ #define JTEST_GROUP_RUN(group_fn) \ do \ { \ JTEST_DUMP_STR("Group Name:\n"); \ JTEST_DUMP_STR(JTEST_GROUP_STRUCT_NAME(group_fn).name_str); \ JTEST_GROUP_STRUCT_NAME(group_fn).group_fn_ptr(); \ } while (0) /** * Update the enclosing #JTEST_GROUP_t's pass/fail information using the * current #JTEST_GROUP_t's. * * @param group_ptr Pointer to the current #JTEST_GROUP_t. * @param parent_ptr Pointer to the enclosing #JTEST_GROUP_t. * * @warning Only run this if the current #JTEST_GROUP_t is being called within * the context of another #JTEST_GROUP_t. */ #define JTEST_GROUP_UPDATE_PARENT_GROUP_PF(group_ptr, parent_group_ptr) \ do \ { \ JTEST_GROUP_INC_PASSED(parent_group_ptr, \ (group_ptr)->passed); \ JTEST_GROUP_INC_FAILED(parent_group_ptr, \ (group_ptr)->failed); \ } while (0) /** * Update the #JTEST_FW's pass/fail information using the current * #JTEST_GROUP_t's. */ #define JTEST_GROUP_UPDATE_FW_PF(group_ptr) \ do \ { \ JTEST_FW_INC_PASSED((group_ptr)->passed); \ JTEST_FW_INC_FAILED((group_ptr)->failed); \ } while (0) /** * Update the enclosing context with the current #JTEST_GROUP_t's pass/fail * information. If this group isn't in an enclosing group, it updates the * #JTEST_FW's pass/fail info by default. */ #define JTEST_GROUP_UPDATE_PARENT_GROUP_OR_FW_PF(group_ptr, \ parent_group_ptr) \ do \ { \ /* Update the pass fail counts in the parent group */ \ if (parent_group_ptr /* Null implies Top*/) \ { \ JTEST_GROUP_UPDATE_PARENT_GROUP_PF( \ group_ptr, \ parent_group_ptr); \ } else { \ JTEST_GROUP_UPDATE_FW_PF( \ group_ptr); \ } \ } while (0) /** * Dump the results of running the #JTEST_GROUP_t to the Keil Debugger. */ #define JTEST_GROUP_DUMP_RESULTS(group_ptr) \ do \ { \ JTEST_DUMP_STRF( \ "Tests Run: %" PRIu32 "\n" \ "----------\n" \ " Passed: %" PRIu32 "\n" \ " Failed: %" PRIu32 "\n", \ (group_ptr)->passed + (group_ptr)->failed, \ (group_ptr)->passed, \ (group_ptr)->failed); \ } while (0) /** * Call the #JTEST_GROUP_t associated with the identifier group_fn. */ #define JTEST_GROUP_CALL(group_fn) \ do \ { /* Save the current group from JTEST_FW_t before swapping */ \ /* it to this group (in order to restore it later )*/ \ JTEST_GROUP_t * __jtest_temp_group_ptr = \ JTEST_CURRENT_GROUP_PTR(); \ JTEST_SET_CURRENT_GROUP(&JTEST_GROUP_STRUCT_NAME(group_fn)); \ \ /* Reset this group's pass/fail count. Each group */ \ /* should only remember counts for its last execution. */ \ JTEST_GROUP_RESET_PF(JTEST_CURRENT_GROUP_PTR()); \ \ /* Run the current group */ \ JTEST_ACT_GROUP_START(); \ JTEST_GROUP_RUN(group_fn); \ JTEST_ACT_GROUP_END(); \ \ /* Update the pass fail counts in the parent group (or FW) */ \ JTEST_GROUP_UPDATE_PARENT_GROUP_OR_FW_PF( \ JTEST_CURRENT_GROUP_PTR(), \ __jtest_temp_group_ptr); \ \ JTEST_GROUP_DUMP_RESULTS(JTEST_CURRENT_GROUP_PTR()); \ \ /* Restore the previously current group */ \ JTEST_SET_CURRENT_GROUP(__jtest_temp_group_ptr); \ } while (0) #endif /* _JTEST_GROUP_CALL_H_ */