Subversion Repositories CharLCD

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 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_ */