#ifndef _JTEST_GROUP_DEFINE_H_ #define _JTEST_GROUP_DEFINE_H_ /*--------------------------------------------------------------------------------*/ /* Includes */ /*--------------------------------------------------------------------------------*/ #include "jtest_util.h" #include "jtest_define.h" #include "jtest_group.h" /* For defining macros with optional arguments */ #include "opt_arg/opt_arg.h" /*--------------------------------------------------------------------------------*/ /* Macros and Defines */ /*--------------------------------------------------------------------------------*/ /** * Prefix for all #JTEST_GROUP_t structs. */ #define JTEST_GROUP_STRUCT_NAME_PREFIX G_JTEST_GROUP_STRUCT_ /** * Define test template used by #JTEST_GROUP_t tests. */ #define JTEST_GROUP_FN_TEMPLATE(group_fn) \ void group_fn(void) #define JTEST_GROUP_FN_PROTOTYPE JTEST_GROUP_FN_TEMPLATE /**< Alias for #JTEST_GROUP_FN_TEMPLATE. */ /** * Evaluate to the name of the #JTEST_GROUP_t struct associated with group_fn. */ #define JTEST_GROUP_STRUCT_NAME(group_fn) \ JTEST_STRUCT_NAME(JTEST_GROUP_STRUCT_NAME_PREFIX, group_fn) /** * Define a #JTEST_GROUP_t struct based on the given group_fn. */ #define JTEST_GROUP_DEFINE_STRUCT(group_fn) \ JTEST_DEFINE_STRUCT(JTEST_GROUP_t, \ JTEST_GROUP_STRUCT_NAME(group_fn)) /** * Declare a #JTEST_GROUP_t struct based on the given group_fn. */ #define JTEST_GROUP_DECLARE_STRUCT(group_fn) \ JTEST_DECLARE_STRUCT(JTEST_GROUP_DEFINE_STRUCT(group_fn)) /** * Contents needed to initialize a JTEST_GROUP_t struct. */ #define JTEST_GROUP_STRUCT_INIT(group_fn) \ group_fn, \ STR_NL(group_fn), \ JTEST_PF_MEMBER_INIT /** * Initialize the contents of a #JTEST_GROUP_t struct. */ #define JTEST_GROUP_INIT(group_fn) \ JTEST_GROUP_DEFINE_STRUCT(group_fn) = { \ JTEST_GROUP_STRUCT_INIT(group_fn) \ } /* Test Definition Macro */ /*--------------------------------------------------------------------------------*/ /** * Define a #JTEST_GROUP_t object and a test function. */ #define JTEST_DEFINE_GROUP(group_fn) \ JTEST_GROUP_FN_PROTOTYPE(group_fn); \ JTEST_GROUP_INIT(group_fn); \ JTEST_GROUP_FN_PROTOTYPE(group_fn) /* Notice the lacking semicolon */ /** * Declare a #JTEST_GROUP_t object and a test function prototype. */ #define JTEST_DECLARE_GROUP(group_fn) \ JTEST_GROUP_FN_PROTOTYPE(group_fn); \ JTEST_GROUP_DECLARE_STRUCT(group_fn) /* Note the lacking semicolon */ #endif /* _JTEST_GROUP_DEFINE_H_ */