Libecoli 0.3.0
Extensible COmmand LIne library
Loading...
Searching...
No Matches
ecoli_test.h
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
3 */
4
12#ifndef ECOLI_TEST_
13#define ECOLI_TEST_
14
15#include <sys/queue.h>
16
17#include <ecoli_log.h>
18#include <ecoli_utils.h>
19
20struct ec_node;
21enum ec_comp_type;
22
32#define EC_TEST_REGISTER(t) \
33 static void ec_test_init_##t(void); \
34 static void __attribute__((constructor, used)) \
35 ec_test_init_##t(void) \
36 { \
37 if (ec_test_register(&t) < 0) \
38 fprintf(stderr, "cannot register test %s\n", \
39 t.name); \
40 }
41
47typedef int (ec_test_t)(void);
48
54TAILQ_HEAD(ec_test_list, ec_test);
55
61struct ec_test {
62 TAILQ_ENTRY(ec_test) next;
63 const char *name;
64 ec_test_t *test;
65};
66
78int ec_test_register(struct ec_test *test);
79
85int ec_test_all(void);
86
92int ec_test_one(const char *name);
93
98int ec_test_check_parse(struct ec_node *node, int expected, ...);
99
105#define EC_TEST_ERR(fmt, ...) \
106 EC_LOG(EC_LOG_ERR, "%s:%d: error: " fmt "\n", \
107 __FILE__, __LINE__, ##__VA_ARGS__); \
108
114#define EC_TEST_CHECK(cond, fmt, ...) ({ \
115 int ret_ = 0; \
116 if (!(cond)) { \
117 EC_TEST_ERR("(" #cond ") is wrong. " fmt \
118 ##__VA_ARGS__); \
119 ret_ = -1; \
120 } \
121 ret_; \
122})
123
129#define EC_TEST_CHECK_PARSE(node, args...) ({ \
130 int ret_ = ec_test_check_parse(node, args, EC_VA_END); \
131 if (ret_) \
132 EC_TEST_ERR("parse test failed"); \
133 ret_; \
134})
135
137int ec_test_check_complete(struct ec_node *node,
138 enum ec_comp_type type, ...);
139
141#define EC_TEST_CHECK_COMPLETE(node, args...) ({ \
142 int ret_ = ec_test_check_complete(node, EC_COMP_FULL, args); \
143 if (ret_) \
144 EC_TEST_ERR("complete test failed"); \
145 ret_; \
146})
147
149#define EC_TEST_CHECK_COMPLETE_PARTIAL(node, args...) ({ \
150 int ret_ = ec_test_check_complete(node, EC_COMP_PARTIAL, args); \
151 if (ret_) \
152 EC_TEST_ERR("complete test failed"); \
153 ret_; \
154})
155
156#endif
157
struct ec_node * ec_node(const char *typename, const char *id)
int ec_test_register(struct ec_test *test)
int ec_test_check_parse(struct ec_node *node, int expected,...)
int ec_test_all(void)
int ec_test_one(const char *name)
int ec_test_t(void)
Definition ecoli_test.h:47