1
#include <cppunit/XmlOutputter.h>
2
#include <cppunit/TestFailure.h>
3
#include <cppunit/XmlOutputter.h>
4
#include <cppunit/XmlOutputterHook.h>
5
#include "OutputSuite.h"
6
#include "XmlOutputterTest.h"
7
#include "XmlUniformiser.h"
10
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( XmlOutputterTest,
14
XmlOutputterTest::XmlOutputterTest()
19
XmlOutputterTest::~XmlOutputterTest()
25
XmlOutputterTest::setUp()
28
m_result = new CPPUNIT_NS::TestResultCollector();
33
XmlOutputterTest::tearDown()
36
for ( unsigned int index =0; index < m_dummyTests.size(); ++index )
37
delete m_dummyTests[index];
43
XmlOutputterTest::testWriteXmlResultWithNoTest()
45
CPPUNIT_NS::OStringStream stream;
46
CPPUNIT_NS::XmlOutputter outputter( m_result, stream );
49
std::string actualXml = stream.str();
50
std::string expectedXml =
52
"<FailedTests></FailedTests>"
53
"<SuccessfulTests></SuccessfulTests>"
56
"<FailuresTotal>0</FailuresTotal>"
58
"<Failures>0</Failures>"
61
CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml );
66
XmlOutputterTest::testWriteXmlResultWithOneFailure()
68
addTestFailure( "test1", "message failure1", CPPUNIT_NS::SourceLine( "test.cpp", 3 ) );
70
CPPUNIT_NS::OStringStream stream;
71
CPPUNIT_NS::XmlOutputter outputter( m_result, stream );
74
std::string actualXml = stream.str();
75
std::string expectedXml =
78
"<FailedTest id=\"1\">"
80
"<FailureType>Assertion</FailureType>"
82
"<File>test.cpp</File>"
85
"<Message>message failure1</Message>"
88
"<SuccessfulTests></SuccessfulTests>"
91
"<FailuresTotal>1</FailuresTotal>"
93
"<Failures>1</Failures>"
96
CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml );
101
XmlOutputterTest::testWriteXmlResultWithOneError()
103
addTestError( "test1", "message error1" );
105
CPPUNIT_NS::OStringStream stream;
106
CPPUNIT_NS::XmlOutputter outputter( m_result, stream );
109
std::string actualXml = stream.str();
110
std::string expectedXml =
113
"<FailedTest id=\"1\">"
115
"<FailureType>Error</FailureType>"
116
"<Message>message error1</Message>"
119
"<SuccessfulTests></SuccessfulTests>"
122
"<FailuresTotal>1</FailuresTotal>"
124
"<Failures>0</Failures>"
127
CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml );
132
XmlOutputterTest::testWriteXmlResultWithOneSuccess()
136
CPPUNIT_NS::OStringStream stream;
137
CPPUNIT_NS::XmlOutputter outputter( m_result, stream );
140
std::string actualXml = stream.str();
141
std::string expectedXml =
143
"<FailedTests></FailedTests>"
151
"<FailuresTotal>0</FailuresTotal>"
153
"<Failures>0</Failures>"
156
CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml );
161
XmlOutputterTest::testWriteXmlResultWithThreeFailureTwoErrorsAndTwoSuccess()
163
addTestFailure( "test1", "failure1" );
164
addTestError( "test2", "error1" );
165
addTestFailure( "test3", "failure2" );
166
addTestFailure( "test4", "failure3" );
168
addTestError( "test6", "error2" );
171
CPPUNIT_NS::OStringStream stream;
172
CPPUNIT_NS::XmlOutputter outputter( m_result, stream );
175
std::string actualXml = stream.str();
176
std::string expectedXml =
179
"<FailedTest id=\"1\">"
181
"<FailureType>Assertion</FailureType>"
182
"<Message>failure1</Message>"
184
"<FailedTest id=\"2\">"
186
"<FailureType>Error</FailureType>"
187
"<Message>error1</Message>"
189
"<FailedTest id=\"3\">"
191
"<FailureType>Assertion</FailureType>"
192
"<Message>failure2</Message>"
194
"<FailedTest id=\"4\">"
196
"<FailureType>Assertion</FailureType>"
197
"<Message>failure3</Message>"
199
"<FailedTest id=\"6\">"
201
"<FailureType>Error</FailureType>"
202
"<Message>error2</Message>"
215
"<FailuresTotal>5</FailuresTotal>"
217
"<Failures>3</Failures>"
220
CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml );
224
class XmlOutputterTest::MockHook : public CPPUNIT_NS::XmlOutputterHook
227
MockHook( int &beginCalls,
229
int &statisticsCalls,
230
int &successfulTestCalls,
231
int &failedTestCalls )
232
: m_successfulTestCalls( successfulTestCalls )
233
, m_failedTestCalls( failedTestCalls )
234
, m_beginCalls( beginCalls )
235
, m_endCalls( endCalls )
236
, m_statisticsCalls( statisticsCalls )
240
void beginDocument( CPPUNIT_NS::XmlDocument *document )
245
void endDocument( CPPUNIT_NS::XmlDocument *document )
250
void failTestAdded( CPPUNIT_NS::XmlDocument *document,
251
CPPUNIT_NS::XmlElement *testElement,
252
CPPUNIT_NS::Test *test,
253
CPPUNIT_NS::TestFailure *failure )
258
void successfulTestAdded( CPPUNIT_NS::XmlDocument *document,
259
CPPUNIT_NS::XmlElement *testElement,
260
CPPUNIT_NS::Test *test )
262
++m_successfulTestCalls;
265
void statisticsAdded( CPPUNIT_NS::XmlDocument *document,
266
CPPUNIT_NS::XmlElement *statisticsElement )
274
int &m_statisticsCalls;
275
int &m_successfulTestCalls;
276
int &m_failedTestCalls;
281
XmlOutputterTest::testHook()
283
int begin =0, end =0, statistics =0, successful =0, failed =0;
284
MockHook hook( begin, end, statistics, successful, failed );
289
addTestFailure( "testfail1", "assertion failed" );
290
addTestError( "testerror1", "exception" );
292
CPPUNIT_NS::OStringStream stream;
293
CPPUNIT_NS::XmlOutputter outputter( m_result, stream );
294
outputter.addHook( &hook );
297
CPPUNIT_ASSERT_EQUAL( 1, begin );
298
CPPUNIT_ASSERT_EQUAL( 1, end );
299
CPPUNIT_ASSERT_EQUAL( 1, statistics );
300
CPPUNIT_ASSERT_EQUAL( 3, successful );
301
CPPUNIT_ASSERT_EQUAL( 2, failed );
306
XmlOutputterTest::addTest( std::string testName )
308
CPPUNIT_NS::Test *test = makeDummyTest( testName );
309
m_result->startTest( test );
310
m_result->endTest( test );
315
XmlOutputterTest::addTestFailure( std::string testName,
317
CPPUNIT_NS::SourceLine sourceLine )
319
addGenericTestFailure( testName, CPPUNIT_NS::Message(message), sourceLine, false );
324
XmlOutputterTest::addTestError( std::string testName,
326
CPPUNIT_NS::SourceLine sourceLine )
328
addGenericTestFailure( testName, CPPUNIT_NS::Message(message), sourceLine, true );
333
XmlOutputterTest::addGenericTestFailure( std::string testName,
334
CPPUNIT_NS::Message message,
335
CPPUNIT_NS::SourceLine sourceLine,
338
CPPUNIT_NS::Test *test = makeDummyTest( testName );
339
m_result->startTest( test );
340
CPPUNIT_NS::TestFailure failure( test,
341
new CPPUNIT_NS::Exception( message, sourceLine ),
343
m_result->addFailure( failure );
344
m_result->endTest( test );
349
XmlOutputterTest::makeDummyTest( std::string testName )
351
CPPUNIT_NS::Test *test = new CPPUNIT_NS::TestCase( testName );
352
m_dummyTests.push_back( test );