| #ifndef _JTEST_TEST_H_ |
| #define _JTEST_TEST_H_ |
| |
| /*--------------------------------------------------------------------------------*/ |
| /* Includes */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| #include <stdint.h> |
| #include "jtest_util.h" |
| #include "jtest_test_ret.h" |
| |
| /*--------------------------------------------------------------------------------*/ |
| /* Type Definitions */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| /** |
| * A struct which represents a Test in the JTEST framework. This struct is |
| * used to enable, run, and describe the test it represents. |
| */ |
| typedef struct JTEST_TEST_struct |
| { |
| JTEST_TEST_RET_t ( * test_fn_ptr)(void); /**< Pointer to the test function. */ |
| char * test_fn_str; /**< Name of the test function */ |
| char * fut_str; /**< Name of the function under test. */ |
| |
| /** |
| * Flags that govern how the #JTEST_TEST_t behaves. |
| */ |
| union { |
| struct { |
| unsigned enabled : 1; |
| unsigned unused : 7; |
| } bits; |
| uint8_t byte; /* Access all flags at once. */ |
| } flags; |
| |
| } JTEST_TEST_t; |
| |
| /*--------------------------------------------------------------------------------*/ |
| /* Macros and Defines */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| /** |
| * Assign a test function to the #JTEST_TEST_t struct. |
| */ |
| #define JTEST_TEST_SET_FN(jtest_test_ptr, fn_ptr) \ |
| JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, test_fn_ptr, fn_ptr) |
| |
| /** |
| * Specify a function under test (FUT) for the #JTEST_TEST_t struct. |
| */ |
| #define JTEST_TEST_SET_FUT(jtest_test_ptr, str) \ |
| JTEST_SET_STRUCT_ATTRIBUTE(jtest_test_ptr, fut_str, str) |
| |
| /* Macros concerning JTEST_TEST_t flags */ |
| /*--------------------------------------------------------------------------------*/ |
| |
| #define JTEST_TEST_FLAG_SET 1 /**< Value of a set #JTEST_TEST_t flag. */ |
| #define JTEST_TEST_FLAG_CLR 0 /**< Value of a cleared #JTEST_TEST_t flag. */ |
| |
| /** |
| * Evaluate to the flag in #JTEST_TEST_t having flag_name. |
| */ |
| #define JTEST_TEST_FLAG(jtest_test_ptr, flag_name) \ |
| ((jtest_test_ptr)->flags.bits.flag_name) |
| |
| /** |
| * Dispatch macro for setting and clearing #JTEST_TEST_t flags. |
| * |
| * @param jtest_test_ptr Pointer to a #JTEST_TEST_t struct. |
| * @param flag_name Name of the flag to set in #JTEST_TEST_t.flags.bits |
| * @param xxx Vaid values: "SET" or "CLR" |
| * |
| * @note This function depends on JTEST_TEST_FLAG_SET and JTEST_TEST_FLAG_CLR. |
| */ |
| #define JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, xxx) \ |
| do \ |
| { \ |
| JTEST_TEST_FLAG(jtest_test_ptr, flag_name) = JTEST_TEST_FLAG_##xxx ; \ |
| } while (0) |
| |
| /** |
| * Specification of #JTEST_TEST_XXX_FLAG to set #JTEST_TEST_t flags. |
| */ |
| #define JTEST_TEST_SET_FLAG(jtest_test_ptr, flag_name) \ |
| JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, SET) |
| |
| /** |
| * Specification of #JTEST_TEST_XXX_FLAG to clear #JTEST_TEST_t flags. |
| */ |
| #define JTEST_TEST_CLR_FLAG(jtest_test_ptr, flag_name) \ |
| JTEST_TEST_XXX_FLAG(jtest_test_ptr, flag_name, CLR) |
| |
| /** |
| * Evaluate to true if the #JTEST_TEST_t is enabled. |
| */ |
| #define JTEST_TEST_IS_ENABLED(jtest_test_ptr) \ |
| (JTEST_TEST_FLAG(jtest_test_ptr, enabled) == JTEST_TEST_FLAG_SET) |
| |
| #endif /* _JTEST_TEST_H_ */ |