fork

Fork of cpputest by Rohit Grover

Committer:
Kojto
Date:
Wed May 13 13:20:35 2015 +0000
Revision:
3:9e8c8907d9ee
Parent:
1:4769360130ed
Rename console to mbed_cpputest_console (as in mbed testrunner)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:0b799af9d58e 1 /*
rgrover1 0:0b799af9d58e 2 * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde
rgrover1 0:0b799af9d58e 3 * All rights reserved.
rgrover1 0:0b799af9d58e 4 *
rgrover1 0:0b799af9d58e 5 * Redistribution and use in source and binary forms, with or without
rgrover1 0:0b799af9d58e 6 * modification, are permitted provided that the following conditions are met:
rgrover1 0:0b799af9d58e 7 * * Redistributions of source code must retain the above copyright
rgrover1 0:0b799af9d58e 8 * notice, this list of conditions and the following disclaimer.
rgrover1 0:0b799af9d58e 9 * * Redistributions in binary form must reproduce the above copyright
rgrover1 0:0b799af9d58e 10 * notice, this list of conditions and the following disclaimer in the
rgrover1 0:0b799af9d58e 11 * documentation and/or other materials provided with the distribution.
rgrover1 0:0b799af9d58e 12 * * Neither the name of the <organization> nor the
rgrover1 0:0b799af9d58e 13 * names of its contributors may be used to endorse or promote products
rgrover1 0:0b799af9d58e 14 * derived from this software without specific prior written permission.
rgrover1 0:0b799af9d58e 15 *
rgrover1 0:0b799af9d58e 16 * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY
rgrover1 0:0b799af9d58e 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
rgrover1 0:0b799af9d58e 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rgrover1 0:0b799af9d58e 19 * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
rgrover1 0:0b799af9d58e 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
rgrover1 0:0b799af9d58e 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
rgrover1 0:0b799af9d58e 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
rgrover1 0:0b799af9d58e 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
rgrover1 0:0b799af9d58e 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
rgrover1 0:0b799af9d58e 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rgrover1 0:0b799af9d58e 26 */
rgrover1 0:0b799af9d58e 27
rgrover1 0:0b799af9d58e 28 #ifndef D_UTestMacros_h
rgrover1 0:0b799af9d58e 29 #define D_UTestMacros_h
rgrover1 0:0b799af9d58e 30
rgrover1 0:0b799af9d58e 31 /*! \brief Define a group of tests
rgrover1 0:0b799af9d58e 32 *
rgrover1 0:0b799af9d58e 33 * All tests in a TEST_GROUP share the same setup()
rgrover1 0:0b799af9d58e 34 * and teardown(). setup() is run before the opening
rgrover1 0:0b799af9d58e 35 * curly brace of each TEST and teardown() is
rgrover1 0:0b799af9d58e 36 * called after the closing curly brace of TEST.
rgrover1 0:0b799af9d58e 37 *
rgrover1 0:0b799af9d58e 38 */
rgrover1 0:0b799af9d58e 39
rgrover1 0:0b799af9d58e 40
rgrover1 0:0b799af9d58e 41 #define TEST_GROUP_BASE(testGroup, baseclass) \
rgrover1 0:0b799af9d58e 42 extern int externTestGroup##testGroup; \
rgrover1 0:0b799af9d58e 43 int externTestGroup##testGroup = 0; \
rgrover1 0:0b799af9d58e 44 struct TEST_GROUP_##CppUTestGroup##testGroup : public baseclass
rgrover1 0:0b799af9d58e 45
rgrover1 0:0b799af9d58e 46 #define TEST_BASE(testBaseClass) \
rgrover1 0:0b799af9d58e 47 struct testBaseClass : public Utest
rgrover1 0:0b799af9d58e 48
rgrover1 0:0b799af9d58e 49 #define TEST_GROUP(testGroup) \
rgrover1 0:0b799af9d58e 50 TEST_GROUP_BASE(testGroup, Utest)
rgrover1 0:0b799af9d58e 51
rgrover1 0:0b799af9d58e 52 #define TEST_SETUP() \
rgrover1 0:0b799af9d58e 53 virtual void setup()
rgrover1 0:0b799af9d58e 54
rgrover1 0:0b799af9d58e 55 #define TEST_TEARDOWN() \
rgrover1 0:0b799af9d58e 56 virtual void teardown()
rgrover1 0:0b799af9d58e 57
rgrover1 0:0b799af9d58e 58 #define TEST(testGroup, testName) \
rgrover1 0:0b799af9d58e 59 /* External declarations for strict compilers */ \
rgrover1 0:0b799af9d58e 60 class TEST_##testGroup##_##testName##_TestShell; \
rgrover1 0:0b799af9d58e 61 extern TEST_##testGroup##_##testName##_TestShell TEST_##testGroup##_##testName##_TestShell_instance; \
rgrover1 0:0b799af9d58e 62 \
rgrover1 0:0b799af9d58e 63 class TEST_##testGroup##_##testName##_Test : public TEST_GROUP_##CppUTestGroup##testGroup \
rgrover1 0:0b799af9d58e 64 { public: TEST_##testGroup##_##testName##_Test () : TEST_GROUP_##CppUTestGroup##testGroup () {} \
rgrover1 0:0b799af9d58e 65 void testBody(); }; \
rgrover1 0:0b799af9d58e 66 class TEST_##testGroup##_##testName##_TestShell : public UtestShell { \
rgrover1 0:0b799af9d58e 67 virtual Utest* createTest() _override { return new TEST_##testGroup##_##testName##_Test; } \
rgrover1 0:0b799af9d58e 68 } TEST_##testGroup##_##testName##_TestShell_instance; \
rgrover1 0:0b799af9d58e 69 static TestInstaller TEST_##testGroup##_##testName##_Installer(TEST_##testGroup##_##testName##_TestShell_instance, #testGroup, #testName, __FILE__,__LINE__); \
rgrover1 0:0b799af9d58e 70 void TEST_##testGroup##_##testName##_Test::testBody()
rgrover1 0:0b799af9d58e 71
rgrover1 0:0b799af9d58e 72 #define IGNORE_TEST(testGroup, testName)\
rgrover1 0:0b799af9d58e 73 /* External declarations for strict compilers */ \
rgrover1 0:0b799af9d58e 74 class IGNORE##testGroup##_##testName##_TestShell; \
rgrover1 0:0b799af9d58e 75 extern IGNORE##testGroup##_##testName##_TestShell IGNORE##testGroup##_##testName##_TestShell_instance; \
rgrover1 0:0b799af9d58e 76 \
rgrover1 0:0b799af9d58e 77 class IGNORE##testGroup##_##testName##_Test : public TEST_GROUP_##CppUTestGroup##testGroup \
rgrover1 0:0b799af9d58e 78 { public: IGNORE##testGroup##_##testName##_Test () : TEST_GROUP_##CppUTestGroup##testGroup () {} \
rgrover1 0:0b799af9d58e 79 public: void testBodyThatNeverRuns (); }; \
rgrover1 0:0b799af9d58e 80 class IGNORE##testGroup##_##testName##_TestShell : public IgnoredUtestShell { \
rgrover1 0:0b799af9d58e 81 virtual Utest* createTest() _override { return new IGNORE##testGroup##_##testName##_Test; } \
rgrover1 0:0b799af9d58e 82 } IGNORE##testGroup##_##testName##_TestShell_instance; \
rgrover1 0:0b799af9d58e 83 static TestInstaller TEST_##testGroup##testName##_Installer(IGNORE##testGroup##_##testName##_TestShell_instance, #testGroup, #testName, __FILE__,__LINE__); \
rgrover1 0:0b799af9d58e 84 void IGNORE##testGroup##_##testName##_Test::testBodyThatNeverRuns ()
rgrover1 0:0b799af9d58e 85
rgrover1 0:0b799af9d58e 86 #define IMPORT_TEST_GROUP(testGroup) \
rgrover1 0:0b799af9d58e 87 extern int externTestGroup##testGroup;\
rgrover1 0:0b799af9d58e 88 extern int* p##testGroup; \
rgrover1 0:0b799af9d58e 89 int* p##testGroup = &externTestGroup##testGroup
rgrover1 0:0b799af9d58e 90
rgrover1 0:0b799af9d58e 91 // Different checking macros
rgrover1 0:0b799af9d58e 92
rgrover1 0:0b799af9d58e 93 #define CHECK(condition)\
rgrover1 0:0b799af9d58e 94 CHECK_LOCATION_TRUE(condition, "CHECK", #condition, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 95
rgrover1 0:0b799af9d58e 96 #define CHECK_TEXT(condition, text) \
rgrover1 0:0b799af9d58e 97 CHECK_LOCATION_TEXT(condition, "CHECK", #condition, text, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 98
rgrover1 0:0b799af9d58e 99 #define CHECK_TRUE(condition)\
rgrover1 0:0b799af9d58e 100 CHECK_LOCATION_TRUE(condition, "CHECK_TRUE", #condition, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 101
rgrover1 0:0b799af9d58e 102 #define CHECK_FALSE(condition)\
rgrover1 0:0b799af9d58e 103 CHECK_LOCATION_FALSE(condition, "CHECK_FALSE", #condition, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 104
rgrover1 0:0b799af9d58e 105 #define CHECK_LOCATION_TEXT(condition, checkString, conditionString, text, file, line) \
rgrover1 0:0b799af9d58e 106 { UtestShell::getCurrent()->assertTrueText((condition) != 0, checkString, conditionString, text, file, line); }
rgrover1 0:0b799af9d58e 107
rgrover1 0:0b799af9d58e 108 #define CHECK_LOCATION_TRUE(condition, checkString, conditionString, file, line)\
rgrover1 0:0b799af9d58e 109 { UtestShell::getCurrent()->assertTrue((condition) != 0, checkString, conditionString, file, line); }
rgrover1 0:0b799af9d58e 110
rgrover1 0:0b799af9d58e 111 #define CHECK_LOCATION_FALSE(condition, checkString, conditionString, file, line)\
rgrover1 0:0b799af9d58e 112 { UtestShell::getCurrent()->assertTrue((condition) == 0, checkString, conditionString, file, line); }
rgrover1 0:0b799af9d58e 113
rgrover1 0:0b799af9d58e 114 //This check needs the operator!=(), and a StringFrom(YourType) function
rgrover1 0:0b799af9d58e 115 #define CHECK_EQUAL(expected,actual)\
rgrover1 0:0b799af9d58e 116 CHECK_EQUAL_LOCATION(expected, actual, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 117
rgrover1 0:0b799af9d58e 118 #define CHECK_EQUAL_LOCATION(expected,actual, file, line)\
rgrover1 0:0b799af9d58e 119 { if ((expected) != (actual)) { \
rgrover1 0:0b799af9d58e 120 if ((actual) != (actual)) \
rgrover1 0:0b799af9d58e 121 UtestShell::getCurrent()->print("WARNING:\n\tThe \"Actual Parameter\" parameter is evaluated multiple times resulting in different values.\n\tThus the value in the error message is probably incorrect.", file, line); \
rgrover1 0:0b799af9d58e 122 if ((expected) != (expected)) \
rgrover1 0:0b799af9d58e 123 UtestShell::getCurrent()->print("WARNING:\n\tThe \"Expected Parameter\" parameter is evaluated multiple times resulting in different values.\n\tThus the value in the error message is probably incorrect.", file, line); \
rgrover1 0:0b799af9d58e 124 UtestShell::getCurrent()->assertEquals(true, StringFrom(expected).asCharString(), StringFrom(actual).asCharString(), file, line); \
Rohit Grover 1:4769360130ed 125 } \
Rohit Grover 1:4769360130ed 126 else \
Rohit Grover 1:4769360130ed 127 { \
Rohit Grover 1:4769360130ed 128 UtestShell::getCurrent()->assertLongsEqual((long)0, (long)0, file, line); \
rgrover1 0:0b799af9d58e 129 } }
rgrover1 0:0b799af9d58e 130
rgrover1 0:0b799af9d58e 131 //This check checks for char* string equality using strcmp.
rgrover1 0:0b799af9d58e 132 //This makes up for the fact that CHECK_EQUAL only compares the pointers to char*'s
rgrover1 0:0b799af9d58e 133 #define STRCMP_EQUAL(expected,actual)\
rgrover1 0:0b799af9d58e 134 STRCMP_EQUAL_LOCATION(expected, actual, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 135
rgrover1 0:0b799af9d58e 136 #define STRCMP_EQUAL_LOCATION(expected,actual, file, line)\
rgrover1 0:0b799af9d58e 137 { UtestShell::getCurrent()->assertCstrEqual(expected, actual, file, line); }
rgrover1 0:0b799af9d58e 138
rgrover1 0:0b799af9d58e 139 #define STRCMP_NOCASE_EQUAL(expected,actual)\
rgrover1 0:0b799af9d58e 140 STRCMP_NOCASE_EQUAL_LOCATION(expected, actual, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 141
rgrover1 0:0b799af9d58e 142 #define STRCMP_NOCASE_EQUAL_LOCATION(expected,actual, file, line)\
rgrover1 0:0b799af9d58e 143 { UtestShell::getCurrent()->assertCstrNoCaseEqual(expected, actual, file, line); }
rgrover1 0:0b799af9d58e 144
rgrover1 0:0b799af9d58e 145 #define STRCMP_CONTAINS(expected,actual)\
rgrover1 0:0b799af9d58e 146 STRCMP_CONTAINS_LOCATION(expected, actual, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 147
rgrover1 0:0b799af9d58e 148 #define STRCMP_CONTAINS_LOCATION(expected,actual, file, line)\
rgrover1 0:0b799af9d58e 149 { UtestShell::getCurrent()->assertCstrContains(expected, actual, file, line); }
rgrover1 0:0b799af9d58e 150
rgrover1 0:0b799af9d58e 151 #define STRCMP_NOCASE_CONTAINS(expected,actual)\
rgrover1 0:0b799af9d58e 152 STRCMP_NOCASE_CONTAINS_LOCATION(expected, actual, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 153
rgrover1 0:0b799af9d58e 154 #define STRCMP_NOCASE_CONTAINS_LOCATION(expected,actual, file, line)\
rgrover1 0:0b799af9d58e 155 { UtestShell::getCurrent()->assertCstrNoCaseContains(expected, actual, file, line); }
rgrover1 0:0b799af9d58e 156
rgrover1 0:0b799af9d58e 157 //Check two long integers for equality
rgrover1 0:0b799af9d58e 158 #define LONGS_EQUAL(expected,actual)\
rgrover1 0:0b799af9d58e 159 LONGS_EQUAL_LOCATION(expected,actual,__FILE__, __LINE__)
rgrover1 0:0b799af9d58e 160
Rohit Grover 1:4769360130ed 161 #define UNSIGNED_LONGS_EQUAL(expected,actual)\
Rohit Grover 1:4769360130ed 162 UNSIGNED_LONGS_EQUAL_LOCATION(expected,actual,__FILE__, __LINE__)
Rohit Grover 1:4769360130ed 163
rgrover1 0:0b799af9d58e 164 #define LONGS_EQUAL_LOCATION(expected,actual,file,line)\
rgrover1 0:0b799af9d58e 165 { UtestShell::getCurrent()->assertLongsEqual((long)expected, (long)actual, file, line); }
rgrover1 0:0b799af9d58e 166
Rohit Grover 1:4769360130ed 167 #define UNSIGNED_LONGS_EQUAL_LOCATION(expected,actual,file,line)\
Rohit Grover 1:4769360130ed 168 { UtestShell::getCurrent()->assertUnsignedLongsEqual((unsigned long)expected, (unsigned long)actual, file, line); }
Rohit Grover 1:4769360130ed 169
rgrover1 0:0b799af9d58e 170 #define BYTES_EQUAL(expected, actual)\
rgrover1 0:0b799af9d58e 171 LONGS_EQUAL((expected) & 0xff,(actual) & 0xff)
rgrover1 0:0b799af9d58e 172
rgrover1 0:0b799af9d58e 173 #define POINTERS_EQUAL(expected, actual)\
rgrover1 0:0b799af9d58e 174 POINTERS_EQUAL_LOCATION((expected),(actual), __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 175
rgrover1 0:0b799af9d58e 176 #define POINTERS_EQUAL_LOCATION(expected,actual,file,line)\
rgrover1 0:0b799af9d58e 177 { UtestShell::getCurrent()->assertPointersEqual((void *)expected, (void *)actual, file, line); }
rgrover1 0:0b799af9d58e 178
rgrover1 0:0b799af9d58e 179 //Check two doubles for equality within a tolerance threshold
rgrover1 0:0b799af9d58e 180 #define DOUBLES_EQUAL(expected,actual,threshold)\
rgrover1 0:0b799af9d58e 181 DOUBLES_EQUAL_LOCATION(expected,actual,threshold,__FILE__,__LINE__)
rgrover1 0:0b799af9d58e 182
rgrover1 0:0b799af9d58e 183 #define DOUBLES_EQUAL_LOCATION(expected,actual,threshold,file,line)\
rgrover1 0:0b799af9d58e 184 { UtestShell::getCurrent()->assertDoublesEqual(expected, actual, threshold, file, line); }
rgrover1 0:0b799af9d58e 185
rgrover1 0:0b799af9d58e 186 //Fail if you get to this macro
rgrover1 0:0b799af9d58e 187 //The macro FAIL may already be taken, so allow FAIL_TEST too
rgrover1 0:0b799af9d58e 188 #ifndef FAIL
rgrover1 0:0b799af9d58e 189 #define FAIL(text)\
rgrover1 0:0b799af9d58e 190 FAIL_LOCATION(text, __FILE__,__LINE__)
rgrover1 0:0b799af9d58e 191
rgrover1 0:0b799af9d58e 192 #define FAIL_LOCATION(text, file, line)\
rgrover1 0:0b799af9d58e 193 { UtestShell::getCurrent()->fail(text, file, line); }
rgrover1 0:0b799af9d58e 194 #endif
rgrover1 0:0b799af9d58e 195
rgrover1 0:0b799af9d58e 196 #define FAIL_TEST(text)\
rgrover1 0:0b799af9d58e 197 FAIL_TEST_LOCATION(text, __FILE__,__LINE__)
rgrover1 0:0b799af9d58e 198
rgrover1 0:0b799af9d58e 199 #define FAIL_TEST_LOCATION(text, file,line)\
rgrover1 0:0b799af9d58e 200 { UtestShell::getCurrent()->fail(text, file, line); }
rgrover1 0:0b799af9d58e 201
rgrover1 0:0b799af9d58e 202 #define UT_PRINT_LOCATION(text, file, line) \
rgrover1 0:0b799af9d58e 203 { UtestShell::getCurrent()->print(text, file, line); }
rgrover1 0:0b799af9d58e 204
rgrover1 0:0b799af9d58e 205 #define UT_PRINT(text) \
rgrover1 0:0b799af9d58e 206 UT_PRINT_LOCATION(text, __FILE__, __LINE__)
rgrover1 0:0b799af9d58e 207
rgrover1 0:0b799af9d58e 208 #if CPPUTEST_USE_STD_CPP_LIB
rgrover1 0:0b799af9d58e 209 #define CHECK_THROWS(expected, expression) \
rgrover1 0:0b799af9d58e 210 { \
rgrover1 0:0b799af9d58e 211 SimpleString msg("expected to throw "#expected "\nbut threw nothing"); \
rgrover1 0:0b799af9d58e 212 bool caught_expected = false; \
rgrover1 0:0b799af9d58e 213 try { \
rgrover1 0:0b799af9d58e 214 (expression); \
rgrover1 0:0b799af9d58e 215 } catch(const expected &) { \
rgrover1 0:0b799af9d58e 216 caught_expected = true; \
rgrover1 0:0b799af9d58e 217 } catch(...) { \
rgrover1 0:0b799af9d58e 218 msg = "expected to throw " #expected "\nbut threw a different type"; \
rgrover1 0:0b799af9d58e 219 } \
rgrover1 0:0b799af9d58e 220 if (!caught_expected) { \
rgrover1 0:0b799af9d58e 221 UtestShell::getCurrent()->fail(msg.asCharString(), __FILE__, __LINE__); \
rgrover1 0:0b799af9d58e 222 } \
rgrover1 0:0b799af9d58e 223 }
rgrover1 0:0b799af9d58e 224 #endif /* CPPUTEST_USE_STD_CPP_LIB */
rgrover1 0:0b799af9d58e 225
rgrover1 0:0b799af9d58e 226 #define UT_CRASH() { UtestShell::crash(); }
rgrover1 0:0b799af9d58e 227 #define RUN_ALL_TESTS(ac, av) CommandLineTestRunner::RunAllTests(ac, av)
rgrover1 0:0b799af9d58e 228
rgrover1 0:0b799af9d58e 229 #endif /*D_UTestMacros_h*/