- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

# CheckMacros.h

    00001 #ifndef UNITTEST_CHECKMACROS_H
    00002 #define UNITTEST_CHECKMACROS_H
    00003
    00004 #include "Checks.h"
    00005 #include "AssertException.h"
    00006 #include "MemoryOutStream.h"
    00007 #include "TestDetails.h"
    00008 #include "CurrentTest.h"
    00009
    00010 #ifdef CHECK
    00011     #error UnitTest++ redefines CHECK
    00012 #endif
    00013
    00014 #ifdef CHECK_EQUAL
    00015         #error UnitTest++ redefines CHECK_EQUAL
    00016 #endif
    00017
    00018 #ifdef CHECK_CLOSE
    00019         #error UnitTest++ redefines CHECK_CLOSE
    00020 #endif
    00021
    00022 #ifdef CHECK_ARRAY_EQUAL
    00023         #error UnitTest++ redefines CHECK_ARRAY_EQUAL
    00024 #endif
    00025
    00026 #ifdef CHECK_ARRAY_CLOSE
    00027         #error UnitTest++ redefines CHECK_ARRAY_CLOSE
    00028 #endif
    00029
    00030 #ifdef CHECK_ARRAY2D_CLOSE
    00031         #error UnitTest++ redefines CHECK_ARRAY2D_CLOSE
    00032 #endif
    00033
    00034 #define CHECK(value) \
    00035     do \
    00036     { \
    00037         try { \
    00038             if (!UnitTest::Check(value)) \
    00039                 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), #value); \
    00040         } \
    00041         catch (...) { \
    00042             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
    00043                     "Unhandled exception in CHECK(" #value ")"); \
    00044         } \
    00045     } while (0)
    00046
    00047 #define CHECK_EQUAL(expected, actual) \
    00048     do \
    00049     { \
    00050         try { \
    00051             UnitTest::CheckEqual(*UnitTest::CurrentTest::Results(), expected, actual, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
    00052         } \
    00053         catch (...) { \
    00054             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
    00055                     "Unhandled exception in CHECK_EQUAL(" #expected ", " #actual ")"); \
    00056         } \
    00057     } while (0)
    00058
    00059 #define CHECK_CLOSE(expected, actual, tolerance) \
    00060     do \
    00061     { \
    00062         try { \
    00063             UnitTest::CheckClose(*UnitTest::CurrentTest::Results(), expected, actual, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
    00064         } \
    00065         catch (...) { \
    00066             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
    00067                     "Unhandled exception in CHECK_CLOSE(" #expected ", " #actual ")"); \
    00068         } \
    00069     } while (0)
    00070
    00071 #define CHECK_ARRAY_EQUAL(expected, actual, count) \
    00072     do \
    00073     { \
    00074         try { \
    00075             UnitTest::CheckArrayEqual(*UnitTest::CurrentTest::Results(), expected, actual, count, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
    00076         } \
    00077         catch (...) { \
    00078             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
    00079                     "Unhandled exception in CHECK_ARRAY_EQUAL(" #expected ", " #actual ")"); \
    00080         } \
    00081     } while (0)
    00082
    00083 #define CHECK_ARRAY_CLOSE(expected, actual, count, tolerance) \
    00084     do \
    00085     { \
    00086         try { \
    00087             UnitTest::CheckArrayClose(*UnitTest::CurrentTest::Results(), expected, actual, count, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
    00088         } \
    00089         catch (...) { \
    00090             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
    00091                     "Unhandled exception in CHECK_ARRAY_CLOSE(" #expected ", " #actual ")"); \
    00092         } \
    00093     } while (0)
    00094
    00095 #define CHECK_ARRAY2D_CLOSE(expected, actual, rows, columns, tolerance) \
    00096     do \
    00097     { \
    00098         try { \
    00099             UnitTest::CheckArray2DClose(*UnitTest::CurrentTest::Results(), expected, actual, rows, columns, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
    00100         } \
    00101         catch (...) { \
    00102             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
    00103                     "Unhandled exception in CHECK_ARRAY_CLOSE(" #expected ", " #actual ")"); \
    00104         } \
    00105     } while (0)
    00106
    00107
    00108 #define CHECK_THROW(expression, ExpectedExceptionType) \
    00109     do \
    00110     { \
    00111         bool caught_ = false; \
    00112         try { expression; } \
    00113         catch (ExpectedExceptionType const&) { caught_ = true; } \
    00114         catch (...) {} \
    00115         if (!caught_) \
    00116             UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), "Expected exception: \"" #ExpectedExceptionType "\" not thrown"); \
    00117     } while(0)
    00118
    00119 #define CHECK_ASSERT(expression) \
    00120     CHECK_THROW(expression, UnitTest::AssertException);
    00121
    00122 #endif