#ifndef CPPUNIT_REPEATEDTEST_H #define CPPUNIT_REPEATEDTEST_H #ifndef CPPUNIT_GUARDS_H #include "Guards.h" #endif #ifndef CPPUNIT_TESTDECORATOR_H #include "TestDecorator.h" #endif class Test; class TestResult; /* * A decorator that runs a test repeatedly. * Does not assume ownership of the test it decorates * */ class RepeatedTest : public TestDecorator { REFERENCEOBJECT (RepeatedTest) public: RepeatedTest (Test *test, int timesRepeat) : TestDecorator (test), m_timesRepeat (timesRepeat) {} int countTestCases (); std::string toString (); void run (TestResult *result); private: const int m_timesRepeat; }; // Counts the number of test cases that will be run by this test. inline RepeatedTest::countTestCases () { return TestDecorator::countTestCases () * m_timesRepeat; } // Returns the name of the test instance. inline std::string RepeatedTest::toString () { return TestDecorator::toString () + " (repeated)"; } // Runs a repeated test inline void RepeatedTest::run (TestResult *result) { for (int n = 0; n < m_timesRepeat; n++) { if (result->shouldStop ()) break; TestDecorator::run (result); } } #endif