CppUnit project page
FAQ
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
include
cppunit
extensions
Orthodox.h
Go to the documentation of this file.
1
#ifndef CPPUNIT_EXTENSIONS_ORTHODOX_H
2
#define CPPUNIT_EXTENSIONS_ORTHODOX_H
3
4
#include <
cppunit/TestCase.h
>
5
6
CPPUNIT_NS_BEGIN
7
8
9
/*
10
* Orthodox performs a simple set of tests on an arbitary
11
* class to make sure that it supports at least the
12
* following operations:
13
*
14
* default construction - constructor
15
* equality/inequality - operator== && operator!=
16
* assignment - operator=
17
* negation - operator!
18
* safe passage - copy construction
19
*
20
* If operations for each of these are not declared
21
* the template will not instantiate. If it does
22
* instantiate, tests are performed to make sure
23
* that the operations have correct semantics.
24
*
25
* Adding an orthodox test to a suite is very
26
* easy:
27
*
28
* public: Test *suite () {
29
* TestSuite *suiteOfTests = new TestSuite;
30
* suiteOfTests->addTest (new ComplexNumberTest ("testAdd");
31
* suiteOfTests->addTest (new TestCaller<Orthodox<Complex> > ());
32
* return suiteOfTests;
33
* }
34
*
35
* Templated test cases be very useful when you are want to
36
* make sure that a group of classes have the same form.
37
*
38
* see TestSuite
39
*/
40
41
42
template
<
class
ClassUnderTest>
class
Orthodox
:
public
TestCase
43
{
44
public
:
45
Orthodox
() :
TestCase
(
"Orthodox"
) {}
46
47
protected
:
48
ClassUnderTest
call
(ClassUnderTest
object
);
49
void
runTest
();
50
51
52
};
53
54
55
// Run an orthodoxy test
56
template
<
class
ClassUnderTest>
void
Orthodox<ClassUnderTest>::runTest
()
57
{
58
// make sure we have a default constructor
59
ClassUnderTest a, b, c;
60
61
// make sure we have an equality operator
62
CPPUNIT_ASSERT
(a == b);
63
64
// check the inverse
65
b.operator= (a.operator! ());
66
CPPUNIT_ASSERT
(a != b);
67
68
// double inversion
69
b = !!a;
70
CPPUNIT_ASSERT
(a == b);
71
72
// invert again
73
b = !a;
74
75
// check calls
76
c = a;
77
CPPUNIT_ASSERT
(c == call (a));
78
79
c = b;
80
CPPUNIT_ASSERT
(c == call (b));
81
82
}
83
84
85
// Exercise a call
86
template
<
class
ClassUnderTest>
87
ClassUnderTest
Orthodox<ClassUnderTest>::call
(ClassUnderTest
object
)
88
{
89
return
object;
90
}
91
92
93
CPPUNIT_NS_END
94
95
#endif
Send comments to:
CppUnit Developers