summaryrefslogtreecommitdiff
path: root/include/cppunit/extensions/Orthodox.h
diff options
context:
space:
mode:
authorBastiaan Bakker <bastiaan.bakker@lifeline.nl>2001-04-22 22:09:57 +0000
committerBastiaan Bakker <bastiaan.bakker@lifeline.nl>2001-04-22 22:09:57 +0000
commitc910c4cc5cde77b7ef034c50058d8d5f11bd4b71 (patch)
treeb6150386cb0a000c96ac573ac161e262231ba42e /include/cppunit/extensions/Orthodox.h
parent788f81ef8dac04bb5fd0b88cc6d0ef150c4c5a6f (diff)
downloadcppunit-c910c4cc5cde77b7ef034c50058d8d5f11bd4b71.tar.gz
Merged extension headers back in from Micheal Feathers version.
Diffstat (limited to 'include/cppunit/extensions/Orthodox.h')
-rw-r--r--include/cppunit/extensions/Orthodox.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/include/cppunit/extensions/Orthodox.h b/include/cppunit/extensions/Orthodox.h
new file mode 100644
index 0000000..a7778e3
--- /dev/null
+++ b/include/cppunit/extensions/Orthodox.h
@@ -0,0 +1,95 @@
+
+#ifndef CPPUNIT_ORTHODOX_H
+#define CPPUNIT_ORTHODOX_H
+
+#ifndef CPPUNIT_TESTCASE_H
+#include "TestCase.h"
+#endif
+
+namespace CppUnit {
+
+/*
+ * Orthodox performs a simple set of tests on an arbitary
+ * class to make sure that it supports at least the
+ * following operations:
+ *
+ * default construction - constructor
+ * equality/inequality - operator== && operator!=
+ * assignment - operator=
+ * negation - operator!
+ * safe passage - copy construction
+ *
+ * If operations for each of these are not declared
+ * the template will not instantiate. If it does
+ * instantiate, tests are performed to make sure
+ * that the operations have correct semantics.
+ *
+ * Adding an orthodox test to a suite is very
+ * easy:
+ *
+ * public: Test *suite () {
+ * TestSuite *suiteOfTests = new TestSuite;
+ * suiteOfTests->addTest (new ComplexNumberTest ("testAdd");
+ * suiteOfTests->addTest (new TestCaller<Orthodox<Complex> > ());
+ * return suiteOfTests;
+ * }
+ *
+ * Templated test cases be very useful when you are want to
+ * make sure that a group of classes have the same form.
+ *
+ * see TestSuite
+ */
+
+
+template <class ClassUnderTest> class Orthodox : public TestCase
+{
+public:
+ Orthodox () : TestCase ("Orthodox") {}
+
+protected:
+ ClassUnderTest call (ClassUnderTest object);
+ void runTest ();
+
+
+};
+
+
+// Run an orthodoxy test
+template <class ClassUnderTest> void Orthodox<ClassUnderTest>::runTest ()
+{
+ // make sure we have a default constructor
+ ClassUnderTest a, b, c;
+
+ // make sure we have an equality operator
+ assert (a == b);
+
+ // check the inverse
+ b.operator= (a.operator! ());
+ assert (a != b);
+
+ // double inversion
+ b = !!a;
+ assert (a == b);
+
+ // invert again
+ b = !a;
+
+ // check calls
+ c = a;
+ assert (c == call (a));
+
+ c = b;
+ assert (c == call (b));
+
+}
+
+
+// Exercise a call
+template <class ClassUnderTest> ClassUnderTest Orthodox<ClassUnderTest>::call (ClassUnderTest object)
+{
+ return object;
+}
+
+} // namespace CppUnit
+
+#endif \ No newline at end of file