TestDeferredTestReporter.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "../UnitTest++.h"
  2. #include "../DeferredTestReporter.h"
  3. #include "../Config.h"
  4. #include <cstring>
  5. namespace UnitTest
  6. {
  7. namespace
  8. {
  9. #ifdef UNITTEST_USE_CUSTOM_STREAMS
  10. MemoryOutStream& operator <<(MemoryOutStream& lhs, const std::string& rhs)
  11. {
  12. lhs << rhs.c_str();
  13. return lhs;
  14. }
  15. #endif
  16. struct MockDeferredTestReporter : public DeferredTestReporter
  17. {
  18. virtual void ReportSummary(int, int, int, float)
  19. {
  20. }
  21. };
  22. struct DeferredTestReporterFixture
  23. {
  24. DeferredTestReporterFixture()
  25. : testName("UniqueTestName")
  26. , testSuite("UniqueTestSuite")
  27. , fileName("filename.h")
  28. , lineNumber(12)
  29. , details(testName.c_str(), testSuite.c_str(), fileName.c_str(), lineNumber)
  30. {
  31. }
  32. MockDeferredTestReporter reporter;
  33. std::string const testName;
  34. std::string const testSuite;
  35. std::string const fileName;
  36. int const lineNumber;
  37. TestDetails const details;
  38. };
  39. TEST_FIXTURE(DeferredTestReporterFixture, ReportTestStartCreatesANewDeferredTest)
  40. {
  41. reporter.ReportTestStart(details);
  42. CHECK_EQUAL(1, (int)reporter.GetResults().size());
  43. }
  44. TEST_FIXTURE(DeferredTestReporterFixture, ReportTestStartCapturesTestNameAndSuite)
  45. {
  46. reporter.ReportTestStart(details);
  47. DeferredTestResult const& result = reporter.GetResults().at(0);
  48. CHECK_EQUAL(testName.c_str(), result.testName);
  49. CHECK_EQUAL(testSuite.c_str(), result.suiteName);
  50. }
  51. TEST_FIXTURE(DeferredTestReporterFixture, ReportTestEndCapturesTestTime)
  52. {
  53. float const elapsed = 123.45f;
  54. reporter.ReportTestStart(details);
  55. reporter.ReportTestFinish(details, elapsed);
  56. DeferredTestResult const& result = reporter.GetResults().at(0);
  57. CHECK_CLOSE(elapsed, result.timeElapsed, 0.0001f);
  58. }
  59. TEST_FIXTURE(DeferredTestReporterFixture, ReportFailureSavesFailureDetails)
  60. {
  61. char const* failure = "failure";
  62. reporter.ReportTestStart(details);
  63. reporter.ReportFailure(details, failure);
  64. DeferredTestResult const& result = reporter.GetResults().at(0);
  65. CHECK(result.failed == true);
  66. CHECK_EQUAL(fileName.c_str(), result.failureFile);
  67. }
  68. TEST_FIXTURE(DeferredTestReporterFixture, ReportFailureSavesFailureDetailsForMultipleFailures)
  69. {
  70. char const* failure1 = "failure 1";
  71. char const* failure2 = "failure 2";
  72. reporter.ReportTestStart(details);
  73. reporter.ReportFailure(details, failure1);
  74. reporter.ReportFailure(details, failure2);
  75. DeferredTestResult const& result = reporter.GetResults().at(0);
  76. CHECK_EQUAL(2, (int)result.failures.size());
  77. CHECK_EQUAL(failure1, result.failures[0].second);
  78. CHECK_EQUAL(failure2, result.failures[1].second);
  79. }
  80. TEST_FIXTURE(DeferredTestReporterFixture, DeferredTestReporterTakesCopyOfFailureMessage)
  81. {
  82. reporter.ReportTestStart(details);
  83. char failureMessage[128];
  84. char const* goodStr = "Real failure message";
  85. char const* badStr = "Bogus failure message";
  86. using namespace std;
  87. strcpy(failureMessage, goodStr);
  88. reporter.ReportFailure(details, failureMessage);
  89. strcpy(failureMessage, badStr);
  90. DeferredTestResult const& result = reporter.GetResults().at(0);
  91. DeferredTestResult::Failure const& failure = result.failures.at(0);
  92. CHECK_EQUAL(goodStr, failure.second);
  93. }
  94. }}