Blame include/cppunit/extensions/Orthodox.h

Packit Service e31359
#ifndef CPPUNIT_EXTENSIONS_ORTHODOX_H
Packit Service e31359
#define CPPUNIT_EXTENSIONS_ORTHODOX_H
Packit Service e31359
Packit Service e31359
#include <cppunit/TestCase.h>
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_BEGIN
Packit Service e31359
Packit Service e31359
Packit Service e31359
/*
Packit Service e31359
 * Orthodox performs a simple set of tests on an arbitary
Packit Service e31359
 * class to make sure that it supports at least the
Packit Service e31359
 * following operations:
Packit Service e31359
 *
Packit Service e31359
 *      default construction    - constructor
Packit Service e31359
 *      equality/inequality     - operator== && operator!=
Packit Service e31359
 *      assignment              - operator=
Packit Service e31359
 *      negation                - operator!
Packit Service e31359
 *      safe passage            - copy construction
Packit Service e31359
 *
Packit Service e31359
 * If operations for each of these are not declared
Packit Service e31359
 * the template will not instantiate.  If it does 
Packit Service e31359
 * instantiate, tests are performed to make sure
Packit Service e31359
 * that the operations have correct semantics.
Packit Service e31359
 *      
Packit Service e31359
 * Adding an orthodox test to a suite is very 
Packit Service e31359
 * easy: 
Packit Service e31359
 * 
Packit Service e31359
 * public: Test *suite ()  {
Packit Service e31359
 *     TestSuite *suiteOfTests = new TestSuite;
Packit Service e31359
 *     suiteOfTests->addTest (new ComplexNumberTest ("testAdd");
Packit Service e31359
 *     suiteOfTests->addTest (new TestCaller<Orthodox<Complex> > ());
Packit Service e31359
 *     return suiteOfTests;
Packit Service e31359
 *  }
Packit Service e31359
 *
Packit Service e31359
 * Templated test cases be very useful when you are want to
Packit Service e31359
 * make sure that a group of classes have the same form.
Packit Service e31359
 *
Packit Service e31359
 * see TestSuite
Packit Service e31359
 */
Packit Service e31359
Packit Service e31359
Packit Service e31359
template <class ClassUnderTest> class Orthodox : public TestCase
Packit Service e31359
{
Packit Service e31359
public:
Packit Service e31359
                    Orthodox () : TestCase ("Orthodox") {}
Packit Service e31359
Packit Service e31359
protected:
Packit Service e31359
    ClassUnderTest  call (ClassUnderTest object);
Packit Service e31359
    void            runTest ();
Packit Service e31359
Packit Service e31359
Packit Service e31359
};
Packit Service e31359
Packit Service e31359
Packit Service e31359
// Run an orthodoxy test
Packit Service e31359
template <class ClassUnderTest> void Orthodox<ClassUnderTest>::runTest ()
Packit Service e31359
{
Packit Service e31359
    // make sure we have a default constructor
Packit Service e31359
    ClassUnderTest   a, b, c;
Packit Service e31359
Packit Service e31359
    // make sure we have an equality operator
Packit Service e31359
    CPPUNIT_ASSERT (a == b);
Packit Service e31359
Packit Service e31359
    // check the inverse
Packit Service e31359
    b.operator= (a.operator! ());
Packit Service e31359
    CPPUNIT_ASSERT (a != b);
Packit Service e31359
Packit Service e31359
    // double inversion
Packit Service e31359
    b = !!a;
Packit Service e31359
    CPPUNIT_ASSERT (a == b);
Packit Service e31359
Packit Service e31359
    // invert again
Packit Service e31359
    b = !a;
Packit Service e31359
Packit Service e31359
    // check calls
Packit Service e31359
    c = a;
Packit Service e31359
    CPPUNIT_ASSERT (c == call (a));
Packit Service e31359
Packit Service e31359
    c = b;
Packit Service e31359
    CPPUNIT_ASSERT (c == call (b));
Packit Service e31359
Packit Service e31359
}
Packit Service e31359
Packit Service e31359
Packit Service e31359
// Exercise a call
Packit Service e31359
template <class ClassUnderTest> 
Packit Service e31359
ClassUnderTest Orthodox<ClassUnderTest>::call (ClassUnderTest object)
Packit Service e31359
{
Packit Service e31359
    return object;
Packit Service e31359
}
Packit Service e31359
Packit Service e31359
Packit Service e31359
CPPUNIT_NS_END
Packit Service e31359
Packit Service e31359
#endif