TestRunner.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "TestRunner.h"
  2. #include "TestResults.h"
  3. #include "TestReporter.h"
  4. #include "TestReporterStdout.h"
  5. #include "TimeHelpers.h"
  6. #include "MemoryOutStream.h"
  7. #include <cstring>
  8. namespace UnitTest {
  9. int RunAllTests()
  10. {
  11. TestReporterStdout reporter;
  12. TestRunner runner(reporter);
  13. return runner.RunTestsIf(Test::GetTestList(), NULL, True(), 0);
  14. }
  15. TestRunner::TestRunner(TestReporter& reporter)
  16. : m_reporter(&reporter)
  17. , m_result(new TestResults(&reporter))
  18. , m_timer(new Timer)
  19. {
  20. m_timer->Start();
  21. }
  22. TestRunner::~TestRunner()
  23. {
  24. delete m_result;
  25. delete m_timer;
  26. }
  27. int TestRunner::Finish() const
  28. {
  29. float const secondsElapsed = static_cast<float>(m_timer->GetTimeInMs() / 1000.0);
  30. m_reporter->ReportSummary(m_result->GetTotalTestCount(),
  31. m_result->GetFailedTestCount(),
  32. m_result->GetFailureCount(),
  33. secondsElapsed);
  34. return m_result->GetFailureCount();
  35. }
  36. bool TestRunner::IsTestInSuite(const Test* const curTest, char const* suiteName) const
  37. {
  38. using namespace std;
  39. return (suiteName == NULL) || !strcmp(curTest->m_details.suiteName, suiteName);
  40. }
  41. void TestRunner::RunTest(TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const
  42. {
  43. CurrentTest::Results() = result;
  44. Timer testTimer;
  45. testTimer.Start();
  46. result->OnTestStart(curTest->m_details);
  47. curTest->Run();
  48. double const testTimeInMs = testTimer.GetTimeInMs();
  49. if (maxTestTimeInMs > 0 && testTimeInMs > maxTestTimeInMs && !curTest->m_timeConstraintExempt)
  50. {
  51. MemoryOutStream stream;
  52. stream << "Global time constraint failed. Expected under " << maxTestTimeInMs <<
  53. "ms but took " << testTimeInMs << "ms.";
  54. result->OnTestFailure(curTest->m_details, stream.GetText());
  55. }
  56. result->OnTestFinish(curTest->m_details, static_cast<float>(testTimeInMs/1000.0));
  57. }
  58. }