Subversion Repositories ScreenTimer

Rev

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_ */