XmlWriter can specify a stylesheet

Provide an extension point on XmlReporter to be able to supply a stylesheet url in a derived implementation
This commit is contained in:
Phil Nash 2017-02-07 23:09:43 +00:00
parent 1f271c9944
commit 97d8003a71
2 changed files with 13 additions and 2 deletions

View File

@ -201,6 +201,10 @@ namespace Catch {
return *this; return *this;
} }
void writeStylesheetRef( std::string const& url ) {
m_os << "<?xml-stylesheet type=\"text/xsl\" href=\"" << url << "\"?>\n";
}
XmlWriter& writeBlankLine() { XmlWriter& writeBlankLine() {
ensureTagClosed(); ensureTagClosed();
m_os << '\n'; m_os << '\n';
@ -217,14 +221,14 @@ namespace Catch {
void ensureTagClosed() { void ensureTagClosed() {
if( m_tagIsOpen ) { if( m_tagIsOpen ) {
m_os << ">\n"; m_os << ">" << std::endl;
m_tagIsOpen = false; m_tagIsOpen = false;
} }
} }
void newlineIfNecessary() { void newlineIfNecessary() {
if( m_needsNewline ) { if( m_needsNewline ) {
m_os << '\n'; m_os << std::endl;
m_needsNewline = false; m_needsNewline = false;
} }
} }

View File

@ -32,6 +32,10 @@ namespace Catch {
return "Reports test results as an XML document"; return "Reports test results as an XML document";
} }
virtual std::string getStylesheetRef() const {
return std::string();
}
public: // StreamingReporterBase public: // StreamingReporterBase
virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE { virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE {
@ -40,6 +44,9 @@ namespace Catch {
virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE {
StreamingReporterBase::testRunStarting( testInfo ); StreamingReporterBase::testRunStarting( testInfo );
std::string stylesheetRef = getStylesheetRef();
if( !stylesheetRef.empty() )
m_xml.writeStylesheetRef( stylesheetRef );
m_xml.startElement( "Catch" ); m_xml.startElement( "Catch" );
if( !m_config->name().empty() ) if( !m_config->name().empty() )
m_xml.writeAttribute( "name", m_config->name() ); m_xml.writeAttribute( "name", m_config->name() );