/
jiteman
/
jsd-foreign-libreoffice-cppunit
Обзор
Документация
Войти
/
jiteman
/
jsd-foreign-libreoffice-cppunit
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
examples/cppunittest/XmlOutputterTest.cpp
355 строк
9 KB
jiteman
initial commit has been done
14 апр 2024, 15:49
14 апр 2024, 15:49
4c53812
Код
Авторство
О чём код?
#include <cppunit/config/SourcePrefix.h> #include <cppunit/XmlOutputter.h> #include <cppunit/TestFailure.h> #include <cppunit/XmlOutputter.h> #include <cppunit/XmlOutputterHook.h> #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 = "<TestRun>" "<FailedTests></FailedTests>" "<SuccessfulTests></SuccessfulTests>" "<Statistics>" "<Tests>0</Tests>" "<FailuresTotal>0</FailuresTotal>" "<Errors>0</Errors>" "<Failures>0</Failures>" "</Statistics>" "</TestRun>"; 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 = "<TestRun>" "<FailedTests>" "<FailedTest id=\"1\">" "<Name>test1</Name>" "<FailureType>Assertion</FailureType>" "<Location>" "<File>test.cpp</File>" "<Line>3</Line>" "</Location>" "<Message>message failure1</Message>" "</FailedTest>" "</FailedTests>" "<SuccessfulTests></SuccessfulTests>" "<Statistics>" "<Tests>1</Tests>" "<FailuresTotal>1</FailuresTotal>" "<Errors>0</Errors>" "<Failures>1</Failures>" "</Statistics>" "</TestRun>"; 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 = "<TestRun>" "<FailedTests>" "<FailedTest id=\"1\">" "<Name>test1</Name>" "<FailureType>Error</FailureType>" "<Message>message error1</Message>" "</FailedTest>" "</FailedTests>" "<SuccessfulTests></SuccessfulTests>" "<Statistics>" "<Tests>1</Tests>" "<FailuresTotal>1</FailuresTotal>" "<Errors>1</Errors>" "<Failures>0</Failures>" "</Statistics>" "</TestRun>"; 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 = "<TestRun>" "<FailedTests></FailedTests>" "<SuccessfulTests>" "<Test id=\"1\">" "<Name>test1</Name>" "</Test>" "</SuccessfulTests>" "<Statistics>" "<Tests>1</Tests>" "<FailuresTotal>0</FailuresTotal>" "<Errors>0</Errors>" "<Failures>0</Failures>" "</Statistics>" "</TestRun>"; 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 = "<TestRun>" "<FailedTests>" "<FailedTest id=\"1\">" "<Name>test1</Name>" "<FailureType>Assertion</FailureType>" "<Message>failure1</Message>" "</FailedTest>" "<FailedTest id=\"2\">" "<Name>test2</Name>" "<FailureType>Error</FailureType>" "<Message>error1</Message>" "</FailedTest>" "<FailedTest id=\"3\">" "<Name>test3</Name>" "<FailureType>Assertion</FailureType>" "<Message>failure2</Message>" "</FailedTest>" "<FailedTest id=\"4\">" "<Name>test4</Name>" "<FailureType>Assertion</FailureType>" "<Message>failure3</Message>" "</FailedTest>" "<FailedTest id=\"6\">" "<Name>test6</Name>" "<FailureType>Error</FailureType>" "<Message>error2</Message>" "</FailedTest>" "</FailedTests>" "<SuccessfulTests>" "<Test id=\"5\">" "<Name>test5</Name>" "</Test>" "<Test id=\"7\">" "<Name>test7</Name>" "</Test>" "</SuccessfulTests>" "<Statistics>" "<Tests>7</Tests>" "<FailuresTotal>5</FailuresTotal>" "<Errors>2</Errors>" "<Failures>3</Failures>" "</Statistics>" "</TestRun>"; 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; }