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

Annotation of /trunk/tools/CppUnitTest/inc/CppUnitTest/TestResult.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 155 - (hide annotations)
Wed Nov 9 02:02:19 2005 UTC (17 years, 4 months ago) by jgs
File MIME type: text/plain
File size: 5502 byte(s)
move all directories from trunk/esys2 into trunk and remove esys2

1 jgs 82
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