| 16154 | } |
| 16155 | |
| 16156 | void JunitReporter::writeAssertion( AssertionStats const& stats ) { |
| 16157 | AssertionResult const& result = stats.assertionResult; |
| 16158 | if( !result.isOk() ) { |
| 16159 | std::string elementName; |
| 16160 | switch( result.getResultType() ) { |
| 16161 | case ResultWas::ThrewException: |
| 16162 | case ResultWas::FatalErrorCondition: |
| 16163 | elementName = "error"; |
| 16164 | break; |
| 16165 | case ResultWas::ExplicitFailure: |
| 16166 | elementName = "failure"; |
| 16167 | break; |
| 16168 | case ResultWas::ExpressionFailed: |
| 16169 | elementName = "failure"; |
| 16170 | break; |
| 16171 | case ResultWas::DidntThrowException: |
| 16172 | elementName = "failure"; |
| 16173 | break; |
| 16174 | |
| 16175 | // We should never see these here: |
| 16176 | case ResultWas::Info: |
| 16177 | case ResultWas::Warning: |
| 16178 | case ResultWas::Ok: |
| 16179 | case ResultWas::Unknown: |
| 16180 | case ResultWas::FailureBit: |
| 16181 | case ResultWas::Exception: |
| 16182 | elementName = "internalError"; |
| 16183 | break; |
| 16184 | } |
| 16185 | |
| 16186 | XmlWriter::ScopedElement e = xml.scopedElement( elementName ); |
| 16187 | |
| 16188 | xml.writeAttribute( "message", result.getExpandedExpression() ); |
| 16189 | xml.writeAttribute( "type", result.getTestMacroName() ); |
| 16190 | |
| 16191 | ReusableStringStream rss; |
| 16192 | if( !result.getMessage().empty() ) |
| 16193 | rss << result.getMessage() << '\n'; |
| 16194 | for( auto const& msg : stats.infoMessages ) |
| 16195 | if( msg.type == ResultWas::Info ) |
| 16196 | rss << msg.message << '\n'; |
| 16197 | |
| 16198 | rss << "at " << result.getSourceInfo(); |
| 16199 | xml.writeText( rss.str(), false ); |
| 16200 | } |
| 16201 | } |
| 16202 | |
| 16203 | CATCH_REGISTER_REPORTER( "junit", JunitReporter ) |
| 16204 |
nothing calls this directly
no test coverage detected