1#include <cppunit/TestFailure.h>
2#include <cppunit/TestResultCollector.h>
3
4
5namespace CppUnit
6{
7
8
9TestResultCollector::TestResultCollector( SynchronizationObject *syncObject )
10    : TestSucessListener( syncObject )
11{
12  reset();
13}
14
15
16TestResultCollector::~TestResultCollector()
17{
18  TestFailures::iterator itFailure = m_failures.begin();
19  while ( itFailure != m_failures.end() )
20    delete *itFailure++;
21}
22
23
24void
25TestResultCollector::reset()
26{
27  TestSucessListener::reset();
28
29  ExclusiveZone zone( m_syncObject );
30  m_testErrors = 0;
31  m_tests.clear();
32  m_failures.clear();
33}
34
35
36void
37TestResultCollector::startTest( Test *test )
38{
39  ExclusiveZone zone (m_syncObject);
40  m_tests.push_back( test );
41}
42
43
44void
45TestResultCollector::addFailure( const TestFailure &failure )
46{
47  TestSucessListener::addFailure( failure );
48
49  ExclusiveZone zone( m_syncObject );
50  if ( failure.isError() )
51    ++m_testErrors;
52  m_failures.push_back( failure.clone() );
53}
54
55
56/// Gets the number of run tests.
57int
58TestResultCollector::runTests() const
59{
60  ExclusiveZone zone( m_syncObject );
61  return m_tests.size();
62}
63
64
65/// Gets the number of detected errors (uncaught exception).
66int
67TestResultCollector::testErrors() const
68{
69  ExclusiveZone zone( m_syncObject );
70  return m_testErrors;
71}
72
73
74/// Gets the number of detected failures (failed assertion).
75int
76TestResultCollector::testFailures() const
77{
78  ExclusiveZone zone( m_syncObject );
79  return m_failures.size() - m_testErrors;
80}
81
82
83/// Gets the total number of detected failures.
84int
85TestResultCollector::testFailuresTotal() const
86{
87  ExclusiveZone zone( m_syncObject );
88  return m_failures.size();
89}
90
91
92/// Returns a the list failures (random access collection).
93const TestResultCollector::TestFailures &
94TestResultCollector::failures() const
95{
96  ExclusiveZone zone( m_syncObject );
97  return m_failures;
98}
99
100
101const TestResultCollector::Tests &
102TestResultCollector::tests() const
103{
104  ExclusiveZone zone( m_syncObject );
105  return m_tests;
106}
107
108
109} //  namespace CppUnit
110
111