?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. #ifndef UNITTEST_TESTRUNNER_H
  2. #define UNITTEST_TESTRUNNER_H
  3.  
  4. #include "Test.h"
  5. #include "TestList.h"
  6. #include "CurrentTest.h"
  7.  
  8. namespace UnitTest {
  9.  
  10.    class TestReporter;
  11.    class TestResults;
  12.    class Timer;
  13.  
  14.    UNITTEST_LINKAGE int RunAllTests();
  15.  
  16.    struct True
  17.    {
  18.       bool operator()(const Test* const) const
  19.       {
  20.          return true;
  21.       }
  22.    };
  23.  
  24.    class UNITTEST_LINKAGE TestRunner
  25.    {
  26.    public:
  27.       explicit TestRunner(TestReporter& reporter);
  28.       ~TestRunner();
  29.  
  30.       template< class Predicate >
  31.       int RunTestsIf(TestList const& list, char const* suiteName,
  32.                      const Predicate& predicate, int maxTestTimeInMs) const
  33.       {
  34.          Test* curTest = list.GetHead();
  35.  
  36.          while (curTest != 0)
  37.          {
  38.             if (IsTestInSuite(curTest, suiteName) && predicate(curTest))
  39.                RunTest(m_result, curTest, maxTestTimeInMs);
  40.  
  41.             curTest = curTest->m_nextTest;
  42.          }
  43.  
  44.          return Finish();
  45.       }
  46.  
  47.       TestResults* GetTestResults();
  48.  
  49.    private:
  50.       TestReporter* m_reporter;
  51.       TestResults* m_result;
  52.       Timer* m_timer;
  53.  
  54.       int Finish() const;
  55.       bool IsTestInSuite(const Test* const curTest, char const* suiteName) const;
  56.       void RunTest(TestResults* const result, Test* const curTest, int const maxTestTimeInMs) const;
  57.    };
  58.  
  59. }
  60.  
  61. #endif
  62.