test-common.h revision bd1e1a9720ce4617f7d97be75cffc45e905bb791
#ifndef TEST_COMMON_H
#define TEST_COMMON_H
void test_begin(const char *name);
} STMT_END
/* Additional parameter may be int or unsigned int, to indicate which of
* a barrage of tests have failed (such as in a loop).
*/
} STMT_END
/* Additional parameters are s1 (source) and s2 (destination) string
* in strcmp().
*/
if ((strcmp(s1,s2) != 0)) test_assert_failed_strcmp("strcmp(" #s1 "," #s2 ")", __FILE__, __LINE__, s1, s2); \
} STMT_END
bool test_has_failed(void);
/* If you're testing nasty cases which you want to warn, surround the noisy op with these */
void test_expect_errors(unsigned int expected);
void test_expect_error_string(const char *substr); /* expect just 1 message matching the printf format */
void test_expect_no_more_errors(void);
/* Note that test_expect_error{s,_string}() effectively begin with a check equivalent
to test_expect_no_more_errors(), so you don't need the latter explicitly if following
it with either of the former.*/
void test_end(void);
ATTR_NULL(3);
int test_run(void (*test_functions[])(void));
struct named_test {
const char *name;
void (*func)(void);
};
#define TEST_DECL(x) void x(void);
#define TEST_NAMELESS(x) x, /* Were you to want to use the X trick but not name the tests */
enum fatal_test_state {
FATAL_TEST_FINISHED, /* no more test stages, don't call again */
FATAL_TEST_FAILURE, /* single stage has failed, continue */
FATAL_TEST_ABORT, /* something's gone horrifically wrong */
};
struct named_fatal {
const char *name;
enum fatal_test_state (*func)(int);
};
int test_run_with_fatals(void (*test_functions[])(void),
enum fatal_test_state (*fatal_functions[])(int));
struct named_fatal fatals[]);
#define FATAL_DECL(x) enum fatal_test_state x(int);
#define FATAL_NAMELESS(x) x, /* Were you to want to use the X trick but not name the tests */
/* If a fork() wants to exit(), then this will avoid valgrind leak errors */
#endif