| 14197 | } |
| 14198 | |
| 14199 | void JunitReporter::writeAssertion( AssertionStats const& stats ) { |
| 14200 | AssertionResult const& result = stats.assertionResult; |
| 14201 | if( !result.isOk() ) { |
| 14202 | std::string elementName; |
| 14203 | switch( result.getResultType() ) { |
| 14204 | case ResultWas::ThrewException: |
| 14205 | case ResultWas::FatalErrorCondition: |
| 14206 | elementName = "error"; |
| 14207 | break; |
| 14208 | case ResultWas::ExplicitFailure: |
| 14209 | elementName = "failure"; |
| 14210 | break; |
| 14211 | case ResultWas::ExpressionFailed: |
| 14212 | elementName = "failure"; |
| 14213 | break; |
| 14214 | case ResultWas::DidntThrowException: |
| 14215 | elementName = "failure"; |
| 14216 | break; |
| 14217 | |
| 14218 | // We should never see these here: |
| 14219 | case ResultWas::Info: |
| 14220 | case ResultWas::Warning: |
| 14221 | case ResultWas::Ok: |
| 14222 | case ResultWas::Unknown: |
| 14223 | case ResultWas::FailureBit: |
| 14224 | case ResultWas::Exception: |
| 14225 | elementName = "internalError"; |
| 14226 | break; |
| 14227 | } |
| 14228 | |
| 14229 | XmlWriter::ScopedElement e = xml.scopedElement( elementName ); |
| 14230 | |
| 14231 | xml.writeAttribute( "message", result.getExpandedExpression() ); |
| 14232 | xml.writeAttribute( "type", result.getTestMacroName() ); |
| 14233 | |
| 14234 | ReusableStringStream rss; |
| 14235 | if( !result.getMessage().empty() ) |
| 14236 | rss << result.getMessage() << '\n'; |
| 14237 | for( auto const& msg : stats.infoMessages ) |
| 14238 | if( msg.type == ResultWas::Info ) |
| 14239 | rss << msg.message << '\n'; |
| 14240 | |
| 14241 | rss << "at " << result.getSourceInfo(); |
| 14242 | xml.writeText( rss.str(), false ); |
| 14243 | } |
| 14244 | } |
| 14245 | |
| 14246 | CATCH_REGISTER_REPORTER( "junit", JunitReporter ) |
| 14247 |
nothing calls this directly
no test coverage detected