1
#include <cppunit/Test.h>
2
#include <cppunit/TestFailure.h>
3
#include <cppunit/TestListener.h>
4
#include <cppunit/TestResult.h>
5
#include <cppunit/tools/Algorithm.h>
7
#include "DefaultProtector.h"
8
#include "ProtectorChain.h"
9
#include "ProtectorContext.h"
14
TestResult::TestResult( SynchronizationObject *syncObject )
15
: SynchronizedObject( syncObject )
16
, m_protectorChain( new ProtectorChain() )
19
m_protectorChain->push( new DefaultProtector() );
23
TestResult::~TestResult()
25
delete m_protectorChain;
32
ExclusiveZone zone( m_syncObject );
38
TestResult::addError( Test *test,
41
TestFailure failure( test, e, true );
42
addFailure( failure );
47
TestResult::addFailure( Test *test, Exception *e )
49
TestFailure failure( test, e, false );
50
addFailure( failure );
55
TestResult::addFailure( const TestFailure &failure )
57
ExclusiveZone zone( m_syncObject );
58
for ( TestListeners::iterator it = m_listeners.begin();
59
it != m_listeners.end();
61
(*it)->addFailure( failure );
66
TestResult::startTest( Test *test )
68
ExclusiveZone zone( m_syncObject );
69
for ( TestListeners::iterator it = m_listeners.begin();
70
it != m_listeners.end();
72
(*it)->startTest( test );
77
TestResult::endTest( Test *test )
79
ExclusiveZone zone( m_syncObject );
80
for ( TestListeners::iterator it = m_listeners.begin();
81
it != m_listeners.end();
83
(*it)->endTest( test );
88
TestResult::startSuite( Test *test )
90
ExclusiveZone zone( m_syncObject );
91
for ( TestListeners::iterator it = m_listeners.begin();
92
it != m_listeners.end();
94
(*it)->startSuite( test );
99
TestResult::endSuite( Test *test )
101
ExclusiveZone zone( m_syncObject );
102
for ( TestListeners::iterator it = m_listeners.begin();
103
it != m_listeners.end();
105
(*it)->endSuite( test );
110
TestResult::shouldStop() const
112
ExclusiveZone zone( m_syncObject );
120
ExclusiveZone zone( m_syncObject );
126
TestResult::addListener( TestListener *listener )
128
ExclusiveZone zone( m_syncObject );
129
m_listeners.push_back( listener );
134
TestResult::removeListener ( TestListener *listener )
136
ExclusiveZone zone( m_syncObject );
137
removeFromSequence( m_listeners, listener );
142
TestResult::runTest( Test *test )
144
startTestRun( test );
151
TestResult::startTestRun( Test *test )
153
ExclusiveZone zone( m_syncObject );
154
for ( TestListeners::iterator it = m_listeners.begin();
155
it != m_listeners.end();
157
(*it)->startTestRun( test, this );
162
TestResult::endTestRun( Test *test )
164
ExclusiveZone zone( m_syncObject );
165
for ( TestListeners::iterator it = m_listeners.begin();
166
it != m_listeners.end();
168
(*it)->endTestRun( test, this );
173
TestResult::protect( const Functor &functor,
175
const std::string &shortDescription )
177
ProtectorContext context( test, this, shortDescription );
178
return m_protectorChain->protect( functor, context );
183
TestResult::pushProtector( Protector *protector )
185
m_protectorChain->push( protector );
190
TestResult::popProtector()
192
m_protectorChain->pop();