7 #ifndef ELM_UTIL_TEST_H
8 #define ELM_UTIL_TEST_H
10 #include <elm/string.h>
12 #include <elm/util/Initializer.h>
13 #include <elm/genstruct/SLList.h>
33 CString text,
const T& result,
const T& reference);
37 inline bool hasFailed(
void)
const {
return errors; }
65 const T& result,
const T& reference) {
66 check(file, line, text, result == reference);
67 if(result != reference)
68 cout <<
'\t' << result <<
" != " << reference <<
"\n";
74 #define ELM_CHECK_BEGIN(name) { elm::TestCase __case(name); __case.prepare();
75 #define ELM_CHECK(tst) __case.check(__FILE__, __LINE__, #tst, tst)
76 #define ELM_CHECK_MSG(msg, res) __case.check(__FILE__, __LINE__, msg, res)
77 #define ELM_CHECK_END __case.complete(); }
78 #define ELM_REQUIRE(tst, action) if(!__case.require(__FILE__, __LINE__, #tst, tst)) action
79 #define ELM_CHECK_EQUAL(res, ref) __case.check_equal(__FILE__, __LINE__, #res " == " #ref, res, ref)
80 #define ELM_CHECK_EXCEPTION(exn, stat) { __case.test(__FILE__, __LINE__, #stat); \
81 try { stat; __case.failed(); } catch(exn) { __case.succeeded(); } }
82 #define ELM_FAIL_ON_EXCEPTION(exn, stat) { __case.test(__FILE__, __LINE__, #stat); \
83 try { stat; __case.succeeded(); } \
84 catch(exn& e) { __case.failed(); cerr << "exception = " << e.message() << elm::io::endl; } }
85 #define ELM_TEST_BEGIN(name) \
86 static class name##Test: public elm::TestCase { \
88 name##Test(void): elm::TestCase(#name) { } \
90 virtual void execute(void) {
91 #define ELM_TEST_END \
96 #ifndef ELM_NO_SHORTCUT
97 # define CHECK_BEGIN(name) ELM_CHECK_BEGIN(name)
98 # define CHECK(tst) ELM_CHECK(tst)
99 # define CHECK_MSG(msg, res) ELM_CHECK_MSG(msg, res)
100 # define REQUIRE(tst, action) ELM_REQUIRE(tst, action)
101 # define CHECK_EQUAL(res, ref) ELM_CHECK_EQUAL(res, ref)
102 # define CHECK_END ELM_CHECK_END
103 # define CHECK_EXCEPTION(exn, stat) ELM_CHECK_EXCEPTION(exn, stat)
104 # define FAIL_ON_EXCEPTION(exn, stat) ELM_FAIL_ON_EXCEPTION(exn, stat)
105 # define TEST_BEGIN(name) ELM_TEST_BEGIN(name)
106 # define TEST_END ELM_TEST_END
111 #endif // ELM_UTIL_TEST_H
TestCase & __case
Definition: test.h:40
void perform(void)
Definition: util_test.cpp:288
cstring name(void)
Definition: test.h:26
void set(T *target, int size, const T &v)
Definition: array.h:63
void test(CString file, int line, CString text)
Definition: util_test.cpp:155
void check_equal(CString file, int line, CString text, const T &result, const T &reference)
Definition: test.h:64
virtual ~TestCase(void)
Definition: util_test.cpp:273
Iterator(const TestSet &set)
Definition: test.h:51
static TestSet def
Definition: test.h:45
void failed(void)
Definition: util_test.cpp:164
void check(CString file, int line, CString text, bool result)
Definition: util_test.cpp:193
void prepare(void)
Definition: util_test.cpp:140
Definition: Initializer.h:14
friend class SLList
Definition: SLList.h:79
Iterator(const Iterator &iter)
Definition: test.h:52
void perform(void)
Definition: util_test.cpp:262
void succeeded(void)
Definition: util_test.cpp:177
TestCase(CString name)
Definition: util_test.cpp:132
void initialize(void)
Definition: util_test.cpp:206
void complete(void)
Definition: util_test.cpp:214
virtual void execute(void)
Definition: util_test.cpp:255
bool require(CString file, int line, CString text, bool result)
Definition: util_test.cpp:240
bool hasFailed(void) const
Definition: test.h:37