| #include "UnitTest++/UnitTestPP.h" |
| #include "UnitTest++/CurrentTest.h" |
| #include "RecordingReporter.h" |
| #include "ScopedCurrentTest.h" |
| |
| using namespace std; |
| |
| namespace { |
| |
| TEST(CheckSucceedsOnTrue) |
| { |
| bool failure = true; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK(true); |
| |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(!failure); |
| } |
| |
| TEST(CheckFailsOnFalse) |
| { |
| bool failure = false; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK(false); |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(failure); |
| } |
| |
| TEST(FailureReportsCorrectTestName) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK(false); |
| } |
| |
| CHECK_EQUAL(m_details.testName, reporter.lastFailedTest); |
| } |
| |
| TEST(CheckFailureIncludesCheckContents) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| const bool yaddayadda = false; |
| CHECK(yaddayadda); |
| } |
| |
| CHECK(strstr(reporter.lastFailedMessage, "yaddayadda")); |
| } |
| |
| TEST(CheckEqualSucceedsOnEqual) |
| { |
| bool failure = true; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_EQUAL(1, 1); |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(!failure); |
| } |
| |
| TEST(CheckEqualFailsOnNotEqual) |
| { |
| bool failure = false; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_EQUAL(1, 2); |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(failure); |
| } |
| |
| TEST(CheckEqualFailureContainsCorrectDetails) |
| { |
| int line = 0; |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| UnitTest::TestDetails const testDetails("testName", "suiteName", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| |
| CHECK_EQUAL(1, 123); line = __LINE__; |
| } |
| |
| CHECK_EQUAL("testName", reporter.lastFailedTest); |
| CHECK_EQUAL("suiteName", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| int g_sideEffect = 0; |
| int FunctionWithSideEffects() |
| { |
| ++g_sideEffect; |
| return 1; |
| } |
| |
| TEST(CheckEqualDoesNotHaveSideEffectsWhenPassing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_EQUAL(1, FunctionWithSideEffects()); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| TEST(CheckEqualDoesNotHaveSideEffectsWhenFailing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_EQUAL(2, FunctionWithSideEffects()); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| |
| TEST(CheckCloseSucceedsOnEqual) |
| { |
| bool failure = true; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_CLOSE (1.0f, 1.001f, 0.01f); |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(!failure); |
| } |
| |
| TEST(CheckCloseFailsOnNotEqual) |
| { |
| bool failure = false; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_CLOSE (1.0f, 1.1f, 0.01f); |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(failure); |
| } |
| |
| TEST(CheckCloseFailureContainsCorrectDetails) |
| { |
| int line = 0; |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| UnitTest::TestDetails testDetails("test", "suite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| |
| CHECK_CLOSE (1.0f, 1.1f, 0.01f); line = __LINE__; |
| } |
| |
| CHECK_EQUAL("test", reporter.lastFailedTest); |
| CHECK_EQUAL("suite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST(CheckCloseDoesNotHaveSideEffectsWhenPassing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_CLOSE (1, FunctionWithSideEffects(), 0.1f); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| TEST(CheckCloseDoesNotHaveSideEffectsWhenFailing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK_CLOSE (2, FunctionWithSideEffects(), 0.1f); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| TEST(CheckArrayCloseSucceedsOnEqual) |
| { |
| bool failure = true; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| const float data[4] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_CLOSE (data, data, 4, 0.01f); |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(!failure); |
| } |
| |
| TEST(CheckArrayCloseFailsOnNotEqual) |
| { |
| bool failure = false; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[4] = { 0, 1, 2, 3 }; |
| int const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f); |
| |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(failure); |
| } |
| |
| TEST(CheckArrayCloseFailureIncludesCheckExpectedAndActual) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[4] = { 0, 1, 2, 3 }; |
| int const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f); |
| } |
| |
| CHECK(strstr(reporter.lastFailedMessage, "xpected [ 0 1 2 3 ]")); |
| CHECK(strstr(reporter.lastFailedMessage, "was [ 0 1 3 3 ]")); |
| } |
| |
| TEST(CheckArrayCloseFailureContainsCorrectDetails) |
| { |
| int line = 0; |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| UnitTest::TestDetails testDetails("arrayCloseTest", "arrayCloseSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| |
| int const data1[4] = { 0, 1, 2, 3 }; |
| int const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f); line = __LINE__; |
| } |
| |
| CHECK_EQUAL("arrayCloseTest", reporter.lastFailedTest); |
| CHECK_EQUAL("arrayCloseSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST(CheckArrayCloseFailureIncludesTolerance) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| float const data1[4] = { 0, 1, 2, 3 }; |
| float const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_CLOSE (data1, data2, 4, 0.01f); |
| } |
| |
| CHECK(strstr(reporter.lastFailedMessage, "0.01")); |
| } |
| |
| TEST(CheckArrayEqualSuceedsOnEqual) |
| { |
| bool failure = true; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| const float data[4] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_EQUAL (data, data, 4); |
| |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(!failure); |
| } |
| |
| TEST(CheckArrayEqualFailsOnNotEqual) |
| { |
| bool failure = false; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[4] = { 0, 1, 2, 3 }; |
| int const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_EQUAL (data1, data2, 4); |
| |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(failure); |
| } |
| |
| TEST(CheckArrayEqualFailureIncludesCheckExpectedAndActual) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[4] = { 0, 1, 2, 3 }; |
| int const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_EQUAL (data1, data2, 4); |
| } |
| |
| CHECK(strstr(reporter.lastFailedMessage, "xpected [ 0 1 2 3 ]")); |
| CHECK(strstr(reporter.lastFailedMessage, "was [ 0 1 3 3 ]")); |
| } |
| |
| TEST(CheckArrayEqualFailureContainsCorrectInfo) |
| { |
| int line = 0; |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[4] = { 0, 1, 2, 3 }; |
| int const data2[4] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_EQUAL (data1, data2, 4); line = __LINE__; |
| } |
| |
| CHECK_EQUAL("CheckArrayEqualFailureContainsCorrectInfo", reporter.lastFailedTest); |
| CHECK_EQUAL(__FILE__, reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| float const* FunctionWithSideEffects2() |
| { |
| ++g_sideEffect; |
| static float const data[] = {1,2,3,4}; |
| return data; |
| } |
| |
| TEST(CheckArrayCloseDoesNotHaveSideEffectsWhenPassing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| |
| const float data[] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_CLOSE (data, FunctionWithSideEffects2(), 4, 0.01f); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| TEST(CheckArrayCloseDoesNotHaveSideEffectsWhenFailing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| |
| const float data[] = { 0, 1, 3, 3 }; |
| CHECK_ARRAY_CLOSE (data, FunctionWithSideEffects2(), 4, 0.01f); |
| } |
| |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| TEST(CheckArray2DCloseSucceedsOnEqual) |
| { |
| bool failure = true; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| const float data[2][2] = { {0, 1}, {2, 3} }; |
| CHECK_ARRAY2D_CLOSE (data, data, 2, 2, 0.01f); |
| |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(!failure); |
| } |
| |
| TEST(CheckArray2DCloseFailsOnNotEqual) |
| { |
| bool failure = false; |
| { |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[2][2] = { {0, 1}, {2, 3} }; |
| int const data2[2][2] = { {0, 1}, {3, 3} }; |
| CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f); |
| |
| failure = (testResults.GetFailureCount() > 0); |
| } |
| |
| CHECK(failure); |
| } |
| |
| TEST(CheckArray2DCloseFailureIncludesCheckExpectedAndActual) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| int const data1[2][2] = { {0, 1}, {2, 3} }; |
| int const data2[2][2] = { {0, 1}, {3, 3} }; |
| |
| CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f); |
| } |
| |
| CHECK(strstr(reporter.lastFailedMessage, "xpected [ [ 0 1 ] [ 2 3 ] ]")); |
| CHECK(strstr(reporter.lastFailedMessage, "was [ [ 0 1 ] [ 3 3 ] ]")); |
| } |
| |
| TEST(CheckArray2DCloseFailureContainsCorrectDetails) |
| { |
| int line = 0; |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| UnitTest::TestDetails testDetails("array2DCloseTest", "array2DCloseSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| |
| int const data1[2][2] = { {0, 1}, {2, 3} }; |
| int const data2[2][2] = { {0, 1}, {3, 3} }; |
| CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f); line = __LINE__; |
| } |
| |
| CHECK_EQUAL("array2DCloseTest", reporter.lastFailedTest); |
| CHECK_EQUAL("array2DCloseSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST(CheckArray2DCloseFailureIncludesTolerance) |
| { |
| RecordingReporter reporter; |
| { |
| UnitTest::TestResults testResults(&reporter); |
| ScopedCurrentTest scopedResults(testResults); |
| |
| float const data1[2][2] = { {0, 1}, {2, 3} }; |
| float const data2[2][2] = { {0, 1}, {3, 3} }; |
| CHECK_ARRAY2D_CLOSE (data1, data2, 2, 2, 0.01f); |
| } |
| |
| CHECK(strstr(reporter.lastFailedMessage, "0.01")); |
| } |
| |
| float const* const* FunctionWithSideEffects3() |
| { |
| ++g_sideEffect; |
| static float const data1[] = {0,1}; |
| static float const data2[] = {2,3}; |
| static const float* const data[] = {data1, data2}; |
| return data; |
| } |
| |
| TEST(CheckArray2DCloseDoesNotHaveSideEffectsWhenPassing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| |
| const float data[2][2] = { {0, 1}, {2, 3} }; |
| CHECK_ARRAY2D_CLOSE (data, FunctionWithSideEffects3(), 2, 2, 0.01f); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| TEST(CheckArray2DCloseDoesNotHaveSideEffectsWhenFailing) |
| { |
| g_sideEffect = 0; |
| { |
| UnitTest::TestResults testResults; |
| ScopedCurrentTest scopedResults(testResults); |
| |
| const float data[2][2] = { {0, 1}, {3, 3} }; |
| CHECK_ARRAY2D_CLOSE (data, FunctionWithSideEffects3(), 2, 2, 0.01f); |
| } |
| CHECK_EQUAL(1, g_sideEffect); |
| } |
| |
| } |