- #include "TestRunner.h" 
- #include "TestResults.h" 
- #include "TestReporter.h" 
- #include "TestReporterStdout.h" 
- #include "TimeHelpers.h" 
- #include "MemoryOutStream.h" 
-   
- #include <cstring> 
-   
-   
- namespace UnitTest { 
-   
-    int RunAllTests() 
-    { 
-       TestReporterStdout reporter; 
-       TestRunner runner(reporter); 
-       return runner.RunTestsIf(Test::GetTestList(), NULL, True(), 0); 
-    } 
-   
-   
-    TestRunner::TestRunner(TestReporter& reporter) 
-       : m_reporter(&reporter) 
-       , m_result(new TestResults(&reporter)) 
-       , m_timer(new Timer) 
-    { 
-       m_timer->Start(); 
-    } 
-   
-    TestRunner::~TestRunner() 
-    { 
-       delete m_result; 
-       delete m_timer; 
-    } 
-   
-    TestResults* TestRunner::GetTestResults() 
-    { 
-       return m_result; 
-    } 
-   
-    int TestRunner::Finish() const 
-    { 
-       float const secondsElapsed = static_cast<float>(m_timer->GetTimeInMs() / 1000.0); 
-       m_reporter->ReportSummary(m_result->GetTotalTestCount(), 
-                                 m_result->GetFailedTestCount(), 
-                                 m_result->GetFailureCount(), 
-                                 secondsElapsed); 
-   
-       return m_result->GetFailureCount(); 
-    } 
-   
-    bool TestRunner::IsTestInSuite(const Test* const curTest, char const* suiteName) const 
-    { 
-       using namespace std; 
-       return (suiteName == NULL) || !strcmp(curTest->m_details.suiteName, suiteName); 
-    } 
-   
-    void TestRunner::RunTest(TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const 
-    { 
-       if (curTest->m_isMockTest == false) 
-          CurrentTest::Results() = result; 
-   
-       Timer testTimer; 
-       testTimer.Start(); 
-   
-       result->OnTestStart(curTest->m_details); 
-   
-       curTest->Run(); 
-   
-       double const testTimeInMs = testTimer.GetTimeInMs(); 
-       if (maxTestTimeInMs > 0 && testTimeInMs > maxTestTimeInMs && !curTest->m_details.timeConstraintExempt) 
-       { 
-          MemoryOutStream stream; 
-          stream << "Global time constraint failed. Expected under " << maxTestTimeInMs << 
-             "ms but took " << testTimeInMs << "ms."; 
-   
-          result->OnTestFailure(curTest->m_details, stream.GetText()); 
-       } 
-   
-       result->OnTestFinish(curTest->m_details, static_cast< float >(testTimeInMs / 1000.0)); 
-    } 
-   
- } 
-