Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 2 | mjames | 1 | #ifndef _JTEST_TEST_H_ |
| 2 | #define _JTEST_TEST_H_ |
||
| 3 | |||
| 4 | /*--------------------------------------------------------------------------------*/ |
||
| 5 | /* Includes */ |
||
| 6 | /*--------------------------------------------------------------------------------*/ |
||
| 7 | |||
| 8 | #include <stdint.h> |
||
| 9 | #include "jtest_util.h" |
||
| 10 | #include "jtest_test_ret.h" |
||
| 11 | |||
| 12 | /*--------------------------------------------------------------------------------*/ |
||
| 13 | /* Type Definitions */ |
||
| 14 | /*--------------------------------------------------------------------------------*/ |
||
| 15 | |||
| 16 | /** |
||
| 17 | * A struct which represents a Test in the JTEST framework. This struct is |
||
| 18 | * used to enable, run, and describe the test it represents. |
||
| 19 | */ |
||
| 20 | typedef struct JTEST_TEST_struct |
||
| 21 | { |
||
| 22 | JTEST_TEST_RET_t ( * test_fn_ptr)(void); /**< Pointer to the test function. */ |
||
| 23 | char * test_fn_str; /**< Name of the test function */ |
||
| 24 | char * fut_str; /**< Name of the function under test. */ |
||
| 25 | |||
| 26 | /** |
||
| 27 | * Flags that govern how the #JTEST_TEST_t behaves. |
||
| 28 | */ |
||
| 29 | union { |
||
| 30 | struct { |
||
| 31 | unsigned enabled : 1; |
||
| 32 | unsigned unused : 7; |
||
| 33 | } bits; |
||
| 34 | uint8_t byte; /* Access all flags at once. */ |
||
| 35 | } flags; |
||
| 36 | |||
| 37 | } JTEST_TEST_t; |
||
| 38 | |||
| 39 | /*--------------------------------------------------------------------------------*/ |
||
| 40 | /* Macros and Defines */ |
||
| 41 | /*--------------------------------------------------------------------------------*/ |
||
| 42 | |||
| 43 | /** |
||
| 44 | * Assign a test function to the #JTEST_TEST_t struct. |
||
| 45 | */ |
||
| 46 | #define JTEST_TEST_SET_FN(jtest_test_ptr, fn_ptr) \ |
||
| 47 | JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, test_fn_ptr, fn_ptr) |
||
| 48 | |||
| 49 | /** |
||
| 50 | * Specify a function under test (FUT) for the #JTEST_TEST_t struct. |
||
| 51 | */ |
||
| 52 | #define JTEST_TEST_SET_FUT(jtest_test_ptr, str) \ |
||
| 53 | JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, fut_str, str) |
||
| 54 | |||
| 55 | /* Macros concerning JTEST_TEST_t flags */ |
||
| 56 | /*--------------------------------------------------------------------------------*/ |
||
| 57 | |||
| 58 | #define JTEST_TEST_FLAG_SET 1 /**< Value of a set #JTEST_TEST_t flag. */ |
||
| 59 | #define JTEST_TEST_FLAG_CLR 0 /**< Value of a cleared #JTEST_TEST_t flag. */ |
||
| 60 | |||
| 61 | /** |
||
| 62 | * Evaluate to the flag in #JTEST_TEST_t having flag_name. |
||
| 63 | */ |
||
| 64 | #define JTEST_TEST_FLAG(jtest_test_ptr, flag_name) \ |
||
| 65 | ((jtest_test_ptr)->flags.bits.flag_name) |
||
| 66 | |||
| 67 | /** |
||
| 68 | * Dispatch macro for setting and clearing #JTEST_TEST_t flags. |
||
| 69 | * |
||
| 70 | * @param jtest_test_ptr Pointer to a #JTEST_TEST_t struct. |
||
| 71 | * @param flag_name Name of the flag to set in #JTEST_TEST_t.flags.bits |
||
| 72 | * @param xxx Vaid values: "SET" or "CLR" |
||
| 73 | * |
||
| 74 | * @note This function depends on JTEST_TEST_FLAG_SET and JTEST_TEST_FLAG_CLR. |
||
| 75 | */ |
||
| 76 | #define JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, xxx) \ |
||
| 77 | do \ |
||
| 78 | { \ |
||
| 79 | JTEST_TEST_FLAG(jtest_test_ptr, flag_name) = JTEST_TEST_FLAG_##xxx ; \ |
||
| 80 | } while (0) |
||
| 81 | |||
| 82 | /** |
||
| 83 | * Specification of #JTEST_TEST_XXX_FLAG to set #JTEST_TEST_t flags. |
||
| 84 | */ |
||
| 85 | #define JTEST_TEST_SET_FLAG(jtest_test_ptr, flag_name) \ |
||
| 86 | JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, SET) |
||
| 87 | |||
| 88 | /** |
||
| 89 | * Specification of #JTEST_TEST_XXX_FLAG to clear #JTEST_TEST_t flags. |
||
| 90 | */ |
||
| 91 | #define JTEST_TEST_CLR_FLAG(jtest_test_ptr, flag_name) \ |
||
| 92 | JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, CLR) |
||
| 93 | |||
| 94 | /** |
||
| 95 | * Evaluate to true if the #JTEST_TEST_t is enabled. |
||
| 96 | */ |
||
| 97 | #define JTEST_TEST_IS_ENABLED(jtest_test_ptr) \ |
||
| 98 | (JTEST_TEST_FLAG(jtest_test_ptr, enabled) == JTEST_TEST_FLAG_SET) |
||
| 99 | |||
| 100 | #endif /* _JTEST_TEST_H_ */ |