| #include "UnitTest++/Config.h" |
| #ifndef UNITTEST_NO_EXCEPTIONS |
| |
| #include "UnitTest++/UnitTestPP.h" |
| #include "UnitTest++/CurrentTest.h" |
| #include "RecordingReporter.h" |
| #include "ScopedCurrentTest.h" |
| |
| #include <stdexcept> |
| |
| using namespace std; |
| |
| namespace { |
| |
| int ThrowingFunction() |
| { |
| throw "Doh"; |
| } |
| |
| int ThrowingStdExceptionFunction() |
| { |
| throw std::logic_error("Doh"); |
| } |
| |
| SUITE(CheckExceptionTests) |
| { |
| struct CheckFixture |
| { |
| CheckFixture() |
| : reporter() |
| , testResults(&reporter) |
| { |
| } |
| |
| void PerformCheckWithNonStdThrow() |
| { |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK(ThrowingFunction() == 1); |
| } |
| |
| void PerformCheckWithStdThrow() |
| { |
| ScopedCurrentTest scopedResults(testResults); |
| CHECK(ThrowingStdExceptionFunction() == 1); |
| } |
| |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults; |
| }; |
| |
| TEST_FIXTURE(CheckFixture, CheckFailsOnException) |
| { |
| PerformCheckWithNonStdThrow(); |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckFixture, CheckFailsOnStdException) |
| { |
| PerformCheckWithStdThrow(); |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckFixture, CheckFailureBecauseOfExceptionIncludesCheckContents) |
| { |
| PerformCheckWithNonStdThrow(); |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingFunction() == 1")); |
| } |
| |
| TEST_FIXTURE(CheckFixture, CheckFailureBecauseOfStdExceptionIncludesCheckContents) |
| { |
| PerformCheckWithStdThrow(); |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingStdExceptionFunction() == 1")); |
| } |
| |
| TEST_FIXTURE(CheckFixture, CheckFailureBecauseOfStandardExceptionIncludesWhat) |
| { |
| PerformCheckWithStdThrow(); |
| CHECK(strstr(reporter.lastFailedMessage, "exception (Doh)")); |
| } |
| } |
| |
| SUITE(CheckEqualExceptionTests) |
| { |
| struct CheckEqualFixture |
| { |
| CheckEqualFixture() |
| : reporter() |
| , testResults(&reporter) |
| , line(-1) |
| { |
| } |
| |
| void PerformCheckWithNonStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("testName", "suiteName", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| CHECK_EQUAL(ThrowingFunction(), 123); line = __LINE__; |
| } |
| |
| void PerformCheckWithStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("testName", "suiteName", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| CHECK_EQUAL(ThrowingStdExceptionFunction(), 123); line = __LINE__; |
| } |
| |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults; |
| int line; |
| }; |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailsOnException) |
| { |
| PerformCheckWithNonStdThrow(); |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailsOnStdException) |
| { |
| PerformCheckWithStdThrow(); |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailureBecauseOfExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK_EQUAL("testName", reporter.lastFailedTest); |
| CHECK_EQUAL("suiteName", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailureBecauseOfStdExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK_EQUAL("testName", reporter.lastFailedTest); |
| CHECK_EQUAL("suiteName", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailureBecauseOfExceptionIncludesCheckContents) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingFunction()")); |
| CHECK(strstr(reporter.lastFailedMessage, "123")); |
| } |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailureBecauseOfStdExceptionIncludesCheckContents) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingStdExceptionFunction()")); |
| CHECK(strstr(reporter.lastFailedMessage, "123")); |
| } |
| |
| TEST_FIXTURE(CheckEqualFixture, CheckEqualFailureBecauseOfStandardExceptionIncludesWhat) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "exception (Doh)")); |
| } |
| } |
| |
| SUITE(CheckCloseExceptionTests) |
| { |
| struct CheckCloseFixture |
| { |
| CheckCloseFixture() |
| : reporter() |
| , testResults(&reporter) |
| , line(-1) |
| { |
| } |
| |
| void PerformCheckWithNonStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("closeTest", "closeSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| CHECK_CLOSE(static_cast<float>(ThrowingFunction()), 1.0001f, 0.1f); line = __LINE__; |
| } |
| |
| void PerformCheckWithStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("closeTest", "closeSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| CHECK_CLOSE(static_cast<float>(ThrowingStdExceptionFunction()), 1.0001f, 0.1f); line = __LINE__; |
| } |
| |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults; |
| int line; |
| }; |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailsOnException) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailsOnStdException) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailureBecauseOfExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK_EQUAL("closeTest", reporter.lastFailedTest); |
| CHECK_EQUAL("closeSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailureBecauseOfStdExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK_EQUAL("closeTest", reporter.lastFailedTest); |
| CHECK_EQUAL("closeSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailureBecauseOfExceptionIncludesCheckContents) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "static_cast<float>(ThrowingFunction())")); |
| CHECK(strstr(reporter.lastFailedMessage, "1.0001f")); |
| } |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailureBecauseOfStdExceptionIncludesCheckContents) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "static_cast<float>(ThrowingStdExceptionFunction())")); |
| CHECK(strstr(reporter.lastFailedMessage, "1.0001f")); |
| } |
| |
| TEST_FIXTURE(CheckCloseFixture, CheckCloseFailureBecauseOfStandardExceptionIncludesWhat) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "exception (Doh)")); |
| } |
| } |
| |
| class ThrowingObject |
| { |
| public: |
| float operator[](int) const |
| { |
| throw "Test throw"; |
| } |
| }; |
| |
| class StdThrowingObject |
| { |
| public: |
| float operator[](int) const |
| { |
| throw std::runtime_error("Test throw"); |
| } |
| }; |
| |
| SUITE(CheckArrayCloseExceptionTests) |
| { |
| struct CheckArrayCloseFixture |
| { |
| CheckArrayCloseFixture() |
| : reporter() |
| , testResults(&reporter) |
| , line(-1) |
| { |
| } |
| |
| void PerformCheckWithNonStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("arrayCloseTest", "arrayCloseSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| int const data[4] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_CLOSE(data, ThrowingObject(), 4, 0.01f); line = __LINE__; |
| } |
| |
| void PerformCheckWithStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("arrayCloseTest", "arrayCloseSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| int const data[4] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_CLOSE(data, StdThrowingObject(), 4, 0.01f); line = __LINE__; |
| } |
| |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults; |
| int line; |
| }; |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailureBecauseOfExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK_EQUAL("arrayCloseTest", reporter.lastFailedTest); |
| CHECK_EQUAL("arrayCloseSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailureBecauseOfStdExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK_EQUAL("arrayCloseTest", reporter.lastFailedTest); |
| CHECK_EQUAL("arrayCloseSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailsOnException) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailsOnStdException) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailureOnExceptionIncludesCheckContents) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "data")); |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingObject()")); |
| } |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailureOnStdExceptionIncludesCheckContents) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "data")); |
| CHECK(strstr(reporter.lastFailedMessage, "StdThrowingObject()")); |
| } |
| |
| TEST_FIXTURE(CheckArrayCloseFixture, CheckFailureOnStdExceptionIncludesWhat) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "exception (Test throw)")); |
| } |
| } |
| |
| SUITE(CheckArrayEqualExceptionTests) |
| { |
| struct CheckArrayEqualFixture |
| { |
| CheckArrayEqualFixture() |
| : reporter() |
| , testResults(&reporter) |
| , line(-1) |
| { |
| } |
| |
| void PerformCheckWithNonStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("arrayEqualTest", "arrayEqualSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| int const data[4] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_EQUAL(data, ThrowingObject(), 4); line = __LINE__; |
| } |
| |
| void PerformCheckWithStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("arrayEqualTest", "arrayEqualSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| int const data[4] = { 0, 1, 2, 3 }; |
| CHECK_ARRAY_EQUAL(data, StdThrowingObject(), 4); line = __LINE__; |
| } |
| |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults; |
| int line; |
| }; |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailureBecauseOfExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK_EQUAL("arrayEqualTest", reporter.lastFailedTest); |
| CHECK_EQUAL("arrayEqualSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailureBecauseOfStdExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK_EQUAL("arrayEqualTest", reporter.lastFailedTest); |
| CHECK_EQUAL("arrayEqualSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailsOnException) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailsOnStdException) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailureOnExceptionIncludesCheckContents) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "data")); |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingObject()")); |
| } |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailureOnStdExceptionIncludesCheckContents) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "data")); |
| CHECK(strstr(reporter.lastFailedMessage, "StdThrowingObject()")); |
| } |
| |
| TEST_FIXTURE(CheckArrayEqualFixture, CheckFailureOnStdExceptionIncludesWhat) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "exception (Test throw)")); |
| } |
| } |
| |
| SUITE(CheckArray2DExceptionTests) |
| { |
| class ThrowingObject2D |
| { |
| public: |
| float* operator[](int) const |
| { |
| throw "Test throw"; |
| } |
| }; |
| |
| class StdThrowingObject2D |
| { |
| public: |
| float* operator[](int) const |
| { |
| throw std::runtime_error("Test throw"); |
| } |
| }; |
| |
| struct CheckArray2DCloseFixture |
| { |
| CheckArray2DCloseFixture() |
| : reporter() |
| , testResults(&reporter) |
| , line(-1) |
| { |
| } |
| |
| void PerformCheckWithNonStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("array2DCloseTest", "array2DCloseSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| const float data[2][2] = { {0, 1}, {2, 3} }; |
| CHECK_ARRAY2D_CLOSE(data, ThrowingObject2D(), 2, 2, 0.01f); line = __LINE__; |
| } |
| |
| void PerformCheckWithStdThrow() |
| { |
| UnitTest::TestDetails const testDetails("array2DCloseTest", "array2DCloseSuite", "filename", -1); |
| ScopedCurrentTest scopedResults(testResults, &testDetails); |
| const float data[2][2] = { {0, 1}, {2, 3} }; |
| CHECK_ARRAY2D_CLOSE(data, StdThrowingObject2D(), 2, 2, 0.01f); line = __LINE__; |
| } |
| |
| RecordingReporter reporter; |
| UnitTest::TestResults testResults; |
| int line; |
| }; |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailureBecauseOfExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK_EQUAL("array2DCloseTest", reporter.lastFailedTest); |
| CHECK_EQUAL("array2DCloseSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailureBecauseOfStdExceptionContainsCorrectDetails) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK_EQUAL("array2DCloseTest", reporter.lastFailedTest); |
| CHECK_EQUAL("array2DCloseSuite", reporter.lastFailedSuite); |
| CHECK_EQUAL("filename", reporter.lastFailedFile); |
| CHECK_EQUAL(line, reporter.lastFailedLine); |
| } |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailsOnException) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailsOnStdException) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(testResults.GetFailureCount() > 0); |
| } |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailureOnExceptionIncludesCheckContents) |
| { |
| PerformCheckWithNonStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "data")); |
| CHECK(strstr(reporter.lastFailedMessage, "ThrowingObject2D()")); |
| } |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailureOnStdExceptionIncludesCheckContents) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "data")); |
| CHECK(strstr(reporter.lastFailedMessage, "StdThrowingObject2D()")); |
| } |
| |
| TEST_FIXTURE(CheckArray2DCloseFixture, CheckFailureOnStdExceptionIncludesWhat) |
| { |
| PerformCheckWithStdThrow(); |
| |
| CHECK(strstr(reporter.lastFailedMessage, "exception (Test throw)")); |
| } |
| } |
| } |
| |
| #endif |