/[escript]/trunk/tools/CppUnitTest/src/TestResult.h
ViewVC logotype

Contents of /trunk/tools/CppUnitTest/src/TestResult.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 155 - (show annotations)
Wed Nov 9 02:02:19 2005 UTC (14 years, 3 months ago) by jgs
Original Path: trunk/tools/CppUnitTest/inc/CppUnitTest/TestResult.h
File MIME type: text/plain
File size: 5502 byte(s)
move all directories from trunk/esys2 into trunk and remove esys2

1
2 #ifndef CPPUNIT_TESTRESULT_H
3 #define CPPUNIT_TESTRESULT_H
4
5 #include <vector>
6
7 #include "CppUnitTest/Guards.h"
8 #include "CppUnitTest/TestFailure.h"
9
10 #include "CppUnitTest/CppUnitTestNamespace.h"
11 BEGIN_NAMESPACE_CPPUNITTEST
12
13 class CppUnitException;
14 class Test;
15
16
17 /*
18 * A TestResult collects the results of executing a test case. It is an
19 * instance of the Collecting Parameter pattern.
20 *
21 * The test framework distinguishes between failures and errors.
22 * A failure is anticipated and checked for with assertions. Errors are
23 * unanticipated problems signified by exceptions that are not generated
24 * by the framework.
25 *
26 * TestResult supplies a template method 'setSynchronizationObject ()'
27 * so that subclasses can provide mutual exclusion in the face of multiple
28 * threads. This can be useful when tests execute in one thread and
29 * they fill a subclass of TestResult which effects change in another
30 * thread. To have mutual exclusion, override setSynchronizationObject ()
31 * and make sure that you create an instance of ExclusiveZone at the
32 * beginning of each method.
33 *
34 * see Test
35 */
36
37 class TestResult
38 {
39 REFERENCEOBJECT (TestResult)
40
41 public:
42 TestResult ();
43 virtual ~TestResult ();
44
45 virtual void addError (Test *test, CppUnitException *e);
46 virtual void addFailure (Test *test, CppUnitException *e);
47 virtual void startTest (Test *test);
48 virtual void endTest (Test *test);
49 virtual int runTests ();
50 virtual int testErrors ();
51 virtual int testFailures ();
52 virtual bool wasSuccessful ();
53 virtual bool shouldStop ();
54 virtual void stop ();
55
56 virtual std::vector<TestFailure *>& errors ();
57 virtual std::vector<TestFailure *>& failures ();
58
59
60 class SynchronizationObject
61 {
62 public:
63 SynchronizationObject () {}
64 virtual ~SynchronizationObject () {}
65
66 virtual void lock () {}
67 virtual void unlock () {}
68 };
69
70 class ExclusiveZone
71 {
72 SynchronizationObject *m_syncObject;
73
74 public:
75 ExclusiveZone (SynchronizationObject *syncObject)
76 : m_syncObject (syncObject)
77 { m_syncObject->lock (); }
78
79 ~ExclusiveZone ()
80 { m_syncObject->unlock (); }
81 };
82
83 protected:
84 virtual void setSynchronizationObject (SynchronizationObject *syncObject);
85
86 std::vector<TestFailure *> m_errors;
87 std::vector<TestFailure *> m_failures;
88 int m_runTests;
89 bool m_stop;
90 SynchronizationObject *m_syncObject;
91
92 };
93
94
95
96 // Construct a TestResult
97 inline TestResult::TestResult ()
98 : m_syncObject (new SynchronizationObject ())
99 { m_runTests = 0; m_stop = false; }
100
101
102 // Adds an error to the list of errors. The passed in exception
103 // caused the error
104 inline void TestResult::addError (Test *test, CppUnitException *e)
105 { ExclusiveZone zone (m_syncObject); m_errors.push_back (new TestFailure (test, e)); }
106
107
108 // Adds a failure to the list of failures. The passed in exception
109 // caused the failure.
110 inline void TestResult::addFailure (Test *test, CppUnitException *e)
111 { ExclusiveZone zone (m_syncObject); m_failures.push_back (new TestFailure (test, e)); }
112
113
114 // Informs the result that a test will be started.
115 inline void TestResult::startTest (Test *test)
116 { ExclusiveZone zone (m_syncObject); m_runTests++; }
117
118
119 // Informs the result that a test was completed.
120 inline void TestResult::endTest (Test *test)
121 { ExclusiveZone zone (m_syncObject); }
122
123
124 // Gets the number of run tests.
125 inline int TestResult::runTests ()
126 { ExclusiveZone zone (m_syncObject); return m_runTests; }
127
128
129 // Gets the number of detected errors.
130 inline int TestResult::testErrors ()
131 { ExclusiveZone zone (m_syncObject); return m_errors.size (); }
132
133
134 // Gets the number of detected failures.
135 inline int TestResult::testFailures ()
136 { ExclusiveZone zone (m_syncObject); return m_failures.size (); }
137
138
139 // Returns whether the entire test was successful or not.
140 inline bool TestResult::wasSuccessful ()
141 { ExclusiveZone zone (m_syncObject); return m_failures.size () == 0 && m_errors.size () == 0; }
142
143
144 // Returns a vector of the errors.
145 inline std::vector<TestFailure *>& TestResult::errors ()
146 { ExclusiveZone zone (m_syncObject); return m_errors; }
147
148
149 // Returns a vector of the failures.
150 inline std::vector<TestFailure *>& TestResult::failures ()
151 { ExclusiveZone zone (m_syncObject); return m_failures; }
152
153
154 // Returns whether testing should be stopped
155 inline bool TestResult::shouldStop ()
156 { ExclusiveZone zone (m_syncObject); return m_stop; }
157
158
159 // Stop testing
160 inline void TestResult::stop ()
161 { ExclusiveZone zone (m_syncObject); m_stop = true; }
162
163
164 // Accept a new synchronization object for protection of this instance
165 // TestResult assumes ownership of the object
166 inline void TestResult::setSynchronizationObject (SynchronizationObject *syncObject)
167 { delete m_syncObject; m_syncObject = syncObject; }
168
169 END_NAMESPACE_CPPUNITTEST
170
171 #endif
172
173
174
175
176
177
178
179

Properties

Name Value
svn:eol-style native
svn:executable *
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26