| #include "UnitTest++/Config.h" |
| |
| #ifndef UNITTEST_NO_DEFERRED_REPORTER |
| |
| #include "UnitTest++/UnitTestPP.h" |
| #include "UnitTest++/DeferredTestReporter.h" |
| #include <cstring> |
| |
| namespace UnitTest |
| { |
| |
| namespace |
| { |
| |
| #ifndef UNITTEST_MEMORYOUTSTREAM_IS_STD_OSTRINGSTREAM |
| MemoryOutStream& operator <<(MemoryOutStream& lhs, const std::string& rhs) |
| { |
| lhs << rhs.c_str(); |
| return lhs; |
| } |
| #endif |
| |
| struct MockDeferredTestReporter : public DeferredTestReporter |
| { |
| virtual void ReportSummary(int, int, int, float) |
| { |
| } |
| }; |
| |
| struct DeferredTestReporterFixture |
| { |
| DeferredTestReporterFixture() |
| : testName("UniqueTestName") |
| , testSuite("UniqueTestSuite") |
| , fileName("filename.h") |
| , lineNumber(12) |
| , details(testName.c_str(), testSuite.c_str(), fileName.c_str(), lineNumber) |
| { |
| } |
| |
| MockDeferredTestReporter reporter; |
| std::string const testName; |
| std::string const testSuite; |
| std::string const fileName; |
| int const lineNumber; |
| TestDetails const details; |
| }; |
| |
| TEST_FIXTURE(DeferredTestReporterFixture, ReportTestStartCreatesANewDeferredTest) |
| { |
| reporter.ReportTestStart(details); |
| CHECK_EQUAL(1, (int)reporter.GetResults().size()); |
| } |
| |
| TEST_FIXTURE(DeferredTestReporterFixture, ReportTestStartCapturesTestNameAndSuite) |
| { |
| reporter.ReportTestStart(details); |
| |
| DeferredTestResult const& result = reporter.GetResults().at(0); |
| CHECK_EQUAL(testName.c_str(), result.testName.c_str()); |
| CHECK_EQUAL(testSuite.c_str(), result.suiteName.c_str()); |
| } |
| |
| TEST_FIXTURE(DeferredTestReporterFixture, ReportTestEndCapturesTestTime) |
| { |
| float const elapsed = 123.45f; |
| reporter.ReportTestStart(details); |
| reporter.ReportTestFinish(details, elapsed); |
| |
| DeferredTestResult const& result = reporter.GetResults().at(0); |
| CHECK_CLOSE(elapsed, result.timeElapsed, 0.0001f); |
| } |
| |
| TEST_FIXTURE(DeferredTestReporterFixture, ReportFailureSavesFailureDetails) |
| { |
| char const* failure = "failure"; |
| |
| reporter.ReportTestStart(details); |
| reporter.ReportFailure(details, failure); |
| |
| DeferredTestResult const& result = reporter.GetResults().at(0); |
| CHECK(result.failed == true); |
| CHECK_EQUAL(fileName.c_str(), result.failureFile.c_str()); |
| } |
| |
| TEST_FIXTURE(DeferredTestReporterFixture, ReportFailureSavesFailureDetailsForMultipleFailures) |
| { |
| char const* failure1 = "failure 1"; |
| char const* failure2 = "failure 2"; |
| |
| reporter.ReportTestStart(details); |
| reporter.ReportFailure(details, failure1); |
| reporter.ReportFailure(details, failure2); |
| |
| DeferredTestResult const& result = reporter.GetResults().at(0); |
| CHECK_EQUAL(2, (int)result.failures.size()); |
| CHECK_EQUAL(failure1, result.failures[0].failureStr); |
| CHECK_EQUAL(failure2, result.failures[1].failureStr); |
| } |
| |
| TEST_FIXTURE(DeferredTestReporterFixture, DeferredTestReporterTakesCopyOfFailureMessage) |
| { |
| reporter.ReportTestStart(details); |
| |
| char failureMessage[128]; |
| char const* goodStr = "Real failure message"; |
| char const* badStr = "Bogus failure message"; |
| |
| using namespace std; |
| |
| strcpy(failureMessage, goodStr); |
| reporter.ReportFailure(details, failureMessage); |
| strcpy(failureMessage, badStr); |
| |
| DeferredTestResult const& result = reporter.GetResults().at(0); |
| DeferredTestFailure const& failure = result.failures.at(0); |
| CHECK_EQUAL(goodStr, failure.failureStr); |
| } |
| |
| }} |
| |
| #endif |