Go to the documentation of this file.00001 #if ! defined(TS_TEST_BOX_HEADER)
00002 #define TS_TEST_BOX_HEADER
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 # include <ts/Regression.h>
00028 
00029 namespace {
00030 
00031 
00032 
00033 
00034   struct TestBox {
00035     typedef TestBox self; 
00036     RegressionTest* _test; 
00037     int* _status; 
00038 
00039 
00040     TestBox(RegressionTest* test, int* status) : _test(test), _status(status) {}
00041 
00042 
00043     TestBox(RegressionTest* test, int* status, int rstatus) : _test(test), _status(status) {
00044       *this = rstatus;
00045     }
00046 
00047 
00048     bool check(bool result, char const* fmt, ...) TS_PRINTFLIKE(3, 4);
00049 
00050 
00051     self& operator = (int status) { *_status = status; return *this; }
00052   };
00053 
00054   bool TestBox::check(bool result, char const* fmt, ...) {
00055     if (!result) {
00056       static size_t const N = 1<<16;
00057       char buffer[N]; 
00058       va_list ap;
00059       va_start(ap, fmt);
00060       vsnprintf(buffer, N, fmt, ap);
00061       va_end(ap);
00062       rprintf(_test, "%s\n", buffer);
00063       *_status = REGRESSION_TEST_FAILED;
00064     }
00065     return result;
00066   }
00067 }
00068 #endif // TS_TEST_BOX_HEADER