1*d6eebaa4SHervé Poussineau #ifndef LWIP_HDR_LWIP_CHECK_H
2*d6eebaa4SHervé Poussineau #define LWIP_HDR_LWIP_CHECK_H
31734f297SVictor Perevertkin 
41734f297SVictor Perevertkin /* Common header file for lwIP unit tests using the check framework */
51734f297SVictor Perevertkin 
61734f297SVictor Perevertkin #include <config.h>
71734f297SVictor Perevertkin #include <check.h>
81734f297SVictor Perevertkin #include <stdlib.h>
91734f297SVictor Perevertkin 
101734f297SVictor Perevertkin #define FAIL_RET() do { fail(); return; } while(0)
111734f297SVictor Perevertkin #define EXPECT(x) fail_unless(x)
121734f297SVictor Perevertkin #define EXPECT_RET(x) do { fail_unless(x); if(!(x)) { return; }} while(0)
131734f297SVictor Perevertkin #define EXPECT_RETX(x, y) do { fail_unless(x); if(!(x)) { return y; }} while(0)
141734f297SVictor Perevertkin #define EXPECT_RETNULL(x) EXPECT_RETX(x, NULL)
151734f297SVictor Perevertkin 
16*d6eebaa4SHervé Poussineau #if (CHECK_MAJOR_VERSION == 0 && CHECK_MINOR_VERSION < 13)
17*d6eebaa4SHervé Poussineau typedef struct {
18*d6eebaa4SHervé Poussineau   TFun func;
19*d6eebaa4SHervé Poussineau   const char *name;
20*d6eebaa4SHervé Poussineau } testfunc;
21*d6eebaa4SHervé Poussineau 
22*d6eebaa4SHervé Poussineau #define TESTFUNC(x) {(x), "" # x "" }
23*d6eebaa4SHervé Poussineau 
24*d6eebaa4SHervé Poussineau /* Modified function from check.h, supplying function name */
25*d6eebaa4SHervé Poussineau #define tcase_add_named_test(tc,tf) \
26*d6eebaa4SHervé Poussineau    _tcase_add_test((tc),(tf).func,(tf).name,0, 0, 0, 1)
27*d6eebaa4SHervé Poussineau 
28*d6eebaa4SHervé Poussineau #else
29*d6eebaa4SHervé Poussineau /* From 0.13.0 check keeps track of the method name internally */
30*d6eebaa4SHervé Poussineau typedef const TTest * testfunc;
31*d6eebaa4SHervé Poussineau 
32*d6eebaa4SHervé Poussineau #define TESTFUNC(x) x
33*d6eebaa4SHervé Poussineau 
34*d6eebaa4SHervé Poussineau #define tcase_add_named_test(tc,tf) tcase_add_test(tc,tf)
35*d6eebaa4SHervé Poussineau #endif
36*d6eebaa4SHervé Poussineau 
371734f297SVictor Perevertkin /** typedef for a function returning a test suite */
381734f297SVictor Perevertkin typedef Suite* (suite_getter_fn)(void);
391734f297SVictor Perevertkin 
401734f297SVictor Perevertkin /** Create a test suite */
41*d6eebaa4SHervé Poussineau Suite* create_suite(const char* name, testfunc *tests, size_t num_tests, SFun setup, SFun teardown);
421734f297SVictor Perevertkin 
43*d6eebaa4SHervé Poussineau #ifdef LWIP_UNITTESTS_LIB
44*d6eebaa4SHervé Poussineau int lwip_unittests_run(void)
45*d6eebaa4SHervé Poussineau #endif
461734f297SVictor Perevertkin 
47*d6eebaa4SHervé Poussineau /* helper functions */
48*d6eebaa4SHervé Poussineau #define SKIP_POOL(x) (1 << x)
49*d6eebaa4SHervé Poussineau #define SKIP_HEAP    (1 << MEMP_MAX)
50*d6eebaa4SHervé Poussineau void lwip_check_ensure_no_alloc(unsigned int skip);
51*d6eebaa4SHervé Poussineau 
52*d6eebaa4SHervé Poussineau #endif /* LWIP_HDR_LWIP_CHECK_H */
53