00001 #ifndef UNITTEST_TESTRUNNER_H 00002 #define UNITTEST_TESTRUNNER_H 00003 00004 #include "Test.h" 00005 #include "TestList.h" 00006 #include "CurrentTest.h" 00007 00008 namespace UnitTest { 00009 00010 class TestReporter; 00011 class TestResults; 00012 class Timer; 00013 00014 int RunAllTests(); 00015 00016 struct True 00017 { 00018 bool operator()(const Test* const) const 00019 { 00020 return true; 00021 } 00022 }; 00023 00024 class TestRunner 00025 { 00026 public: 00027 explicit TestRunner(TestReporter& reporter); 00028 ~TestRunner(); 00029 00030 template <class Predicate> 00031 int RunTestsIf(TestList const& list, char const* suiteName, 00032 const Predicate& predicate, int maxTestTimeInMs) const 00033 { 00034 Test* curTest = list.GetHead(); 00035 00036 while (curTest != 0) 00037 { 00038 if (IsTestInSuite(curTest, suiteName) && predicate(curTest)) 00039 RunTest(m_result, curTest, maxTestTimeInMs); 00040 00041 curTest = curTest->next; 00042 } 00043 00044 return Finish(); 00045 } 00046 00047 private: 00048 TestReporter* m_reporter; 00049 TestResults* m_result; 00050 Timer* m_timer; 00051 00052 int Finish() const; 00053 bool IsTestInSuite(const Test* const curTest, char const* suiteName) const; 00054 void RunTest(TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const; 00055 }; 00056 00057 } 00058 00059 #endif