#include #include #include #include #include #include "OutputSuite.h" #include "XmlOutputterTest.h" #include "XmlUniformiser.h" CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( XmlOutputterTest, outputSuiteName() ); XmlOutputterTest::XmlOutputterTest() { } XmlOutputterTest::~XmlOutputterTest() { } void XmlOutputterTest::setUp() { m_dummyTests.clear(); m_result = new CPPUNIT_NS::TestResultCollector(); } void XmlOutputterTest::tearDown() { delete m_result; for ( unsigned int index =0; index < m_dummyTests.size(); ++index ) delete m_dummyTests[index]; m_dummyTests.clear(); } void XmlOutputterTest::testWriteXmlResultWithNoTest() { CPPUNIT_NS::OStringStream stream; CPPUNIT_NS::XmlOutputter outputter( m_result, stream ); outputter.write(); std::string actualXml = stream.str(); std::string expectedXml = "" "" "" "" "0" "0" "0" "0" "" ""; CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml ); } void XmlOutputterTest::testWriteXmlResultWithOneFailure() { addTestFailure( "test1", "message failure1", CPPUNIT_NS::SourceLine( "test.cpp", 3 ) ); CPPUNIT_NS::OStringStream stream; CPPUNIT_NS::XmlOutputter outputter( m_result, stream ); outputter.write(); std::string actualXml = stream.str(); std::string expectedXml = "" "" "" "test1" "Assertion" "" "test.cpp" "3" "" "message failure1" "" "" "" "" "1" "1" "0" "1" "" ""; CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml ); } void XmlOutputterTest::testWriteXmlResultWithOneError() { addTestError( "test1", "message error1" ); CPPUNIT_NS::OStringStream stream; CPPUNIT_NS::XmlOutputter outputter( m_result, stream ); outputter.write(); std::string actualXml = stream.str(); std::string expectedXml = "" "" "" "test1" "Error" "message error1" "" "" "" "" "1" "1" "1" "0" "" ""; CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml ); } void XmlOutputterTest::testWriteXmlResultWithOneSuccess() { addTest( "test1" ); CPPUNIT_NS::OStringStream stream; CPPUNIT_NS::XmlOutputter outputter( m_result, stream ); outputter.write(); std::string actualXml = stream.str(); std::string expectedXml = "" "" "" "" "test1" "" "" "" "1" "0" "0" "0" "" ""; CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml ); } void XmlOutputterTest::testWriteXmlResultWithThreeFailureTwoErrorsAndTwoSuccess() { addTestFailure( "test1", "failure1" ); addTestError( "test2", "error1" ); addTestFailure( "test3", "failure2" ); addTestFailure( "test4", "failure3" ); addTest( "test5" ); addTestError( "test6", "error2" ); addTest( "test7" ); CPPUNIT_NS::OStringStream stream; CPPUNIT_NS::XmlOutputter outputter( m_result, stream ); outputter.write(); std::string actualXml = stream.str(); std::string expectedXml = "" "" "" "test1" "Assertion" "failure1" "" "" "test2" "Error" "error1" "" "" "test3" "Assertion" "failure2" "" "" "test4" "Assertion" "failure3" "" "" "test6" "Error" "error2" "" "" "" "" "test5" "" "" "test7" "" "" "" "7" "5" "2" "3" "" ""; CPPUNITTEST_ASSERT_XML_EQUAL( expectedXml, actualXml ); } class XmlOutputterTest::MockHook : public CPPUNIT_NS::XmlOutputterHook { public: MockHook( int &beginCalls, int &endCalls, int &statisticsCalls, int &successfulTestCalls, int &failedTestCalls ) : m_beginCalls( beginCalls ) , m_endCalls( endCalls ) , m_statisticsCalls( statisticsCalls ) , m_successfulTestCalls( successfulTestCalls ) , m_failedTestCalls( failedTestCalls ) { } void beginDocument( CPPUNIT_NS::XmlDocument * ) { ++m_beginCalls; } void endDocument( CPPUNIT_NS::XmlDocument * ) { ++m_endCalls; } void failTestAdded( CPPUNIT_NS::XmlDocument *, CPPUNIT_NS::XmlElement *, CPPUNIT_NS::Test *, CPPUNIT_NS::TestFailure * ) { ++m_failedTestCalls; } void successfulTestAdded( CPPUNIT_NS::XmlDocument *, CPPUNIT_NS::XmlElement *, CPPUNIT_NS::Test * ) { ++m_successfulTestCalls; } void statisticsAdded( CPPUNIT_NS::XmlDocument *, CPPUNIT_NS::XmlElement * ) { ++m_statisticsCalls; } private: int &m_beginCalls; int &m_endCalls; int &m_statisticsCalls; int &m_successfulTestCalls; int &m_failedTestCalls; }; void XmlOutputterTest::testHook() { int begin =0, end =0, statistics =0, successful =0, failed =0; MockHook hook( begin, end, statistics, successful, failed ); addTest( "test1" ); addTest( "test2" ); addTest( "test3" ); addTestFailure( "testfail1", "assertion failed" ); addTestError( "testerror1", "exception" ); CPPUNIT_NS::OStringStream stream; CPPUNIT_NS::XmlOutputter outputter( m_result, stream ); outputter.addHook( &hook ); outputter.write(); CPPUNIT_ASSERT_EQUAL( 1, begin ); CPPUNIT_ASSERT_EQUAL( 1, end ); CPPUNIT_ASSERT_EQUAL( 1, statistics ); CPPUNIT_ASSERT_EQUAL( 3, successful ); CPPUNIT_ASSERT_EQUAL( 2, failed ); } void XmlOutputterTest::addTest( std::string testName ) { CPPUNIT_NS::Test *test = makeDummyTest( testName ); m_result->startTest( test ); m_result->endTest( test ); } void XmlOutputterTest::addTestFailure( std::string testName, std::string message, CPPUNIT_NS::SourceLine sourceLine ) { addGenericTestFailure( testName, CPPUNIT_NS::Message(message), sourceLine, false ); } void XmlOutputterTest::addTestError( std::string testName, std::string message, CPPUNIT_NS::SourceLine sourceLine ) { addGenericTestFailure( testName, CPPUNIT_NS::Message(message), sourceLine, true ); } void XmlOutputterTest::addGenericTestFailure( std::string testName, CPPUNIT_NS::Message message, CPPUNIT_NS::SourceLine sourceLine, bool isError ) { CPPUNIT_NS::Test *test = makeDummyTest( testName ); m_result->startTest( test ); CPPUNIT_NS::TestFailure failure( test, new CPPUNIT_NS::Exception( message, sourceLine ), isError ); m_result->addFailure( failure ); m_result->endTest( test ); } CPPUNIT_NS::Test * XmlOutputterTest::makeDummyTest( std::string testName ) { CPPUNIT_NS::Test *test = new CPPUNIT_NS::TestCase( testName ); m_dummyTests.push_back( test ); return test; }