- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

# TestRunner.h

    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