Subversion Repositories dashGPS

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #ifndef _JTEST_GROUP_DEFINE_H_
  2. #define _JTEST_GROUP_DEFINE_H_
  3.  
  4.  
  5. /*--------------------------------------------------------------------------------*/
  6. /* Includes */
  7. /*--------------------------------------------------------------------------------*/
  8.  
  9. #include "jtest_util.h"
  10. #include "jtest_define.h"
  11. #include "jtest_group.h"
  12.  
  13. /* For defining macros with optional arguments */
  14. #include "opt_arg/opt_arg.h"
  15.  
  16. /*--------------------------------------------------------------------------------*/
  17. /* Macros and Defines */
  18. /*--------------------------------------------------------------------------------*/
  19.  
  20. /**
  21.  *  Prefix for all #JTEST_GROUP_t structs.
  22.  */
  23. #define JTEST_GROUP_STRUCT_NAME_PREFIX G_JTEST_GROUP_STRUCT_
  24.  
  25. /**
  26.  *  Define test template used by #JTEST_GROUP_t tests.
  27.  */
  28. #define JTEST_GROUP_FN_TEMPLATE(group_fn)    \
  29.     void group_fn(void)
  30.  
  31. #define JTEST_GROUP_FN_PROTOTYPE JTEST_GROUP_FN_TEMPLATE /**< Alias for
  32.                                                             #JTEST_GROUP_FN_TEMPLATE. */
  33.  
  34. /**
  35.  *  Evaluate to the name of the #JTEST_GROUP_t struct associated with group_fn.
  36.  */
  37. #define JTEST_GROUP_STRUCT_NAME(group_fn)    \
  38.     JTEST_STRUCT_NAME(JTEST_GROUP_STRUCT_NAME_PREFIX, group_fn)
  39.  
  40. /**
  41.  *  Define a #JTEST_GROUP_t struct based on the given group_fn.
  42.  */
  43. #define JTEST_GROUP_DEFINE_STRUCT(group_fn)  \
  44.     JTEST_DEFINE_STRUCT(JTEST_GROUP_t,       \
  45.                         JTEST_GROUP_STRUCT_NAME(group_fn))
  46.  
  47. /**
  48.  *  Declare a #JTEST_GROUP_t struct based on the given group_fn.
  49.  */
  50. #define JTEST_GROUP_DECLARE_STRUCT(group_fn) \
  51.     JTEST_DECLARE_STRUCT(JTEST_GROUP_DEFINE_STRUCT(group_fn))
  52.  
  53. /**
  54.  *  Contents needed to initialize a JTEST_GROUP_t struct.
  55.  */
  56. #define JTEST_GROUP_STRUCT_INIT(group_fn)    \
  57.     group_fn,                                \
  58.         STR_NL(group_fn),                       \
  59.         JTEST_PF_MEMBER_INIT
  60.  
  61. /**
  62.  *  Initialize the contents of a #JTEST_GROUP_t struct.
  63.  */
  64. #define JTEST_GROUP_INIT(group_fn)           \
  65.     JTEST_GROUP_DEFINE_STRUCT(group_fn) = {  \
  66.         JTEST_GROUP_STRUCT_INIT(group_fn)    \
  67.     }
  68.  
  69. /* Test Definition Macro */
  70. /*--------------------------------------------------------------------------------*/
  71.  
  72. /**
  73.  *  Define a #JTEST_GROUP_t object and a test function.
  74.  */
  75. #define JTEST_DEFINE_GROUP(group_fn)         \
  76.     JTEST_GROUP_FN_PROTOTYPE(group_fn);      \
  77.     JTEST_GROUP_INIT(group_fn);              \
  78.     JTEST_GROUP_FN_PROTOTYPE(group_fn) /* Notice the lacking semicolon */
  79.  
  80. /**
  81.  *  Declare a #JTEST_GROUP_t object and a test function prototype.
  82.  */
  83. #define JTEST_DECLARE_GROUP(group_fn)        \
  84.     JTEST_GROUP_FN_PROTOTYPE(group_fn);      \
  85.     JTEST_GROUP_DECLARE_STRUCT(group_fn) /* Note the lacking semicolon */
  86.  
  87. #endif /* _JTEST_GROUP_DEFINE_H_ */
  88.