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 8 #include <cstring> 9 10 11 namespace UnitTest { 12 RunAllTests()13 int RunAllTests() 14 { 15 TestReporterStdout reporter; 16 TestRunner runner(reporter); 17 return runner.RunTestsIf(Test::GetTestList(), NULL, True(), 0); 18 } 19 20 TestRunner(TestReporter & reporter)21 TestRunner::TestRunner(TestReporter& reporter) 22 : m_reporter(&reporter) 23 , m_result(new TestResults(&reporter)) 24 , m_timer(new Timer) 25 { 26 m_timer->Start(); 27 } 28 ~TestRunner()29 TestRunner::~TestRunner() 30 { 31 delete m_result; 32 delete m_timer; 33 } 34 GetTestResults()35 TestResults* TestRunner::GetTestResults() 36 { 37 return m_result; 38 } 39 Finish() const40 int TestRunner::Finish() const 41 { 42 float const secondsElapsed = static_cast<float>(m_timer->GetTimeInMs() / 1000.0); 43 m_reporter->ReportSummary(m_result->GetTotalTestCount(), 44 m_result->GetFailedTestCount(), 45 m_result->GetFailureCount(), 46 secondsElapsed); 47 48 return m_result->GetFailureCount(); 49 } 50 IsTestInSuite(const Test * const curTest,char const * suiteName) const51 bool TestRunner::IsTestInSuite(const Test* const curTest, char const* suiteName) const 52 { 53 using namespace std; 54 return (suiteName == NULL) || !strcmp(curTest->m_details.suiteName, suiteName); 55 } 56 RunTest(TestResults * const result,Test * const curTest,int const maxTestTimeInMs) const57 void TestRunner::RunTest(TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const 58 { 59 if (curTest->m_isMockTest == false) 60 CurrentTest::Results() = result; 61 62 Timer testTimer; 63 testTimer.Start(); 64 65 result->OnTestStart(curTest->m_details); 66 67 curTest->Run(); 68 69 double const testTimeInMs = testTimer.GetTimeInMs(); 70 if (maxTestTimeInMs > 0 && testTimeInMs > maxTestTimeInMs && !curTest->m_details.timeConstraintExempt) 71 { 72 MemoryOutStream stream; 73 stream << "Global time constraint failed. Expected under " << maxTestTimeInMs << 74 "ms but took " << testTimeInMs << "ms."; 75 76 result->OnTestFailure(curTest->m_details, stream.GetText()); 77 } 78 79 result->OnTestFinish(curTest->m_details, static_cast< float >(testTimeInMs / 1000.0)); 80 } 81 82 } 83