mirror of
https://github.com/jezhiggins/arabica
synced 2024-12-26 21:58:39 +01:00
76 lines
1.7 KiB
C++
76 lines
1.7 KiB
C++
|
|
#ifndef CPPUNIT_TESTCALLER_H
|
|
#define CPPUNIT_TESTCALLER_H
|
|
|
|
#ifndef CPPUNIT_GUARDS_H
|
|
#include "Guards.h"
|
|
#endif
|
|
|
|
#ifndef CPPUNIT_TESTCASE_H
|
|
#include "TestCase.h"
|
|
#endif
|
|
#include <memory>
|
|
|
|
/*
|
|
* A test caller provides access to a test case method
|
|
* on a test case class. Test callers are useful when
|
|
* you want to run an individual test or add it to a
|
|
* suite.
|
|
*
|
|
* Here is an example:
|
|
*
|
|
* class MathTest : public TestCase {
|
|
* ...
|
|
* public:
|
|
* void setUp ();
|
|
* void tearDown ();
|
|
*
|
|
* void testAdd ();
|
|
* void testSubtract ();
|
|
* };
|
|
*
|
|
* Test *MathTest::suite () {
|
|
* TestSuite *suite = new TestSuite;
|
|
*
|
|
* suite->addTest (new TestCaller<MathTest> ("testAdd", testAdd));
|
|
* return suite;
|
|
* }
|
|
*
|
|
* You can use a TestCaller to bind any test method on a TestCase
|
|
* class, as long as it returns accepts void and returns void.
|
|
*
|
|
* See TestCase
|
|
*/
|
|
|
|
|
|
template <class Fixture> class TestCaller : public TestCase
|
|
{
|
|
REFERENCEOBJECT (TestCaller)
|
|
|
|
typedef void (Fixture::*TestMethod)();
|
|
|
|
public:
|
|
TestCaller (std::string name, TestMethod test)
|
|
: TestCase (name), m_fixture (new Fixture (name)), m_test (test)
|
|
{}
|
|
|
|
protected:
|
|
void runTest ()
|
|
{ (m_fixture.get ()->*m_test)(); }
|
|
|
|
void setUp ()
|
|
{ m_fixture->setUp (); }
|
|
|
|
void tearDown ()
|
|
{ m_fixture->tearDown (); }
|
|
|
|
private:
|
|
std::unique_ptr<Fixture> m_fixture;
|
|
TestMethod m_test;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|