Subversion Repositories DashDisplay

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef _JTEST_GROUP_CALL_H_
  2. #define _JTEST_GROUP_CALL_H_
  3.  
  4. /*--------------------------------------------------------------------------------*/
  5. /* Includes */
  6. /*--------------------------------------------------------------------------------*/
  7.  
  8. #include "jtest_fw.h"
  9. #include <inttypes.h>
  10.  
  11. /*--------------------------------------------------------------------------------*/
  12. /* Macros and Defines */
  13. /*--------------------------------------------------------------------------------*/
  14.  
  15. /**
  16.  *  Execute the test in the #JTEST_GROUP_t struct associated witht he identifier
  17.  *  group_fn.
  18.  */
  19. #define JTEST_GROUP_RUN(group_fn)                                   \
  20.     do                                                              \
  21.     {                                                               \
  22.         JTEST_DUMP_STR("Group Name:\n");                            \
  23.         JTEST_DUMP_STR(JTEST_GROUP_STRUCT_NAME(group_fn).name_str); \
  24.         JTEST_GROUP_STRUCT_NAME(group_fn).group_fn_ptr();           \
  25.     } while (0)
  26.  
  27.  
  28. /**
  29.  *  Update the enclosing #JTEST_GROUP_t's pass/fail information using the
  30.  *  current #JTEST_GROUP_t's.
  31.  *
  32.  *  @param group_ptr Pointer to the current #JTEST_GROUP_t.
  33.  *  @param parent_ptr Pointer to the enclosing #JTEST_GROUP_t.
  34.  *
  35.  *  @warning Only run this if the current #JTEST_GROUP_t is being called within
  36.  *  the context of another #JTEST_GROUP_t.
  37.  */
  38. #define JTEST_GROUP_UPDATE_PARENT_GROUP_PF(group_ptr, parent_group_ptr) \
  39.     do                                                                  \
  40.     {                                                                   \
  41.         JTEST_GROUP_INC_PASSED(parent_group_ptr,                        \
  42.                                (group_ptr)->passed);                    \
  43.         JTEST_GROUP_INC_FAILED(parent_group_ptr,                        \
  44.                                (group_ptr)->failed);                    \
  45.     } while (0)
  46.  
  47. /**
  48.  *  Update the #JTEST_FW's pass/fail information using the current
  49.  *  #JTEST_GROUP_t's.
  50.  */
  51. #define JTEST_GROUP_UPDATE_FW_PF(group_ptr)                     \
  52.     do                                                          \
  53.     {                                                           \
  54.         JTEST_FW_INC_PASSED((group_ptr)->passed);               \
  55.         JTEST_FW_INC_FAILED((group_ptr)->failed);               \
  56.     } while (0)
  57.  
  58. /**
  59.  *  Update the enclosing context with the current #JTEST_GROUP_t's pass/fail
  60.  *  information. If this group isn't in an enclosing group, it updates the
  61.  *  #JTEST_FW's pass/fail info by default.
  62.  */
  63. #define JTEST_GROUP_UPDATE_PARENT_GROUP_OR_FW_PF(group_ptr,         \
  64.                                                  parent_group_ptr)  \
  65.     do                                                              \
  66.     {                                                               \
  67.         /* Update the pass fail counts in the parent group */       \
  68.         if (parent_group_ptr /* Null implies Top*/)                 \
  69.         {                                                           \
  70.             JTEST_GROUP_UPDATE_PARENT_GROUP_PF(                     \
  71.                 group_ptr,                                          \
  72.                 parent_group_ptr);                                  \
  73.         } else {                                                    \
  74.             JTEST_GROUP_UPDATE_FW_PF(                               \
  75.                 group_ptr);                                         \
  76.         }                                                           \
  77.     } while (0)
  78.  
  79. /**
  80.  *  Dump the results of running the #JTEST_GROUP_t to the Keil Debugger.
  81.  */
  82. #define JTEST_GROUP_DUMP_RESULTS(group_ptr)                             \
  83.         do                                                              \
  84.         {                                                               \
  85.             JTEST_DUMP_STRF(                                            \
  86.                 "Tests Run: %" PRIu32 "\n"                              \
  87.                 "----------\n"                                          \
  88.                 "   Passed: %" PRIu32 "\n"                              \
  89.                 "   Failed: %" PRIu32 "\n",                             \
  90.                 (group_ptr)->passed + (group_ptr)->failed,              \
  91.                 (group_ptr)->passed,                                    \
  92.                 (group_ptr)->failed);                                   \
  93.         } while (0)
  94.  
  95. /**
  96.  *  Call the #JTEST_GROUP_t associated with the identifier group_fn.
  97.  */
  98. #define JTEST_GROUP_CALL(group_fn)                                      \
  99.         do                                                              \
  100.         {   /* Save the current group from JTEST_FW_t before swapping */ \
  101.             /* it to this group (in order to restore it later )*/       \
  102.             JTEST_GROUP_t * __jtest_temp_group_ptr =                    \
  103.                 JTEST_CURRENT_GROUP_PTR();                              \
  104.             JTEST_SET_CURRENT_GROUP(&JTEST_GROUP_STRUCT_NAME(group_fn)); \
  105.                                                                         \
  106.             /* Reset this group's pass/fail count. Each group */        \
  107.             /* should only remember counts for its last execution. */   \
  108.             JTEST_GROUP_RESET_PF(JTEST_CURRENT_GROUP_PTR());            \
  109.                                                                         \
  110.             /* Run the current group */                                 \
  111.             JTEST_ACT_GROUP_START();                                    \
  112.             JTEST_GROUP_RUN(group_fn);                                  \
  113.             JTEST_ACT_GROUP_END();                                      \
  114.                                                                         \
  115.             /* Update the pass fail counts in the parent group (or FW) */ \
  116.             JTEST_GROUP_UPDATE_PARENT_GROUP_OR_FW_PF(                   \
  117.                 JTEST_CURRENT_GROUP_PTR(),                              \
  118.                 __jtest_temp_group_ptr);                                \
  119.                                                                         \
  120.             JTEST_GROUP_DUMP_RESULTS(JTEST_CURRENT_GROUP_PTR());        \
  121.                                                                         \
  122.             /* Restore the previously current group */                  \
  123.             JTEST_SET_CURRENT_GROUP(__jtest_temp_group_ptr);            \
  124.         } while (0)
  125.  
  126. #endif /* _JTEST_GROUP_CALL_H_ */
  127.