| 12366 | } |
| 12367 | |
| 12368 | void JunitReporter::writeAssertion( AssertionStats const& stats ) { |
| 12369 | AssertionResult const& result = stats.assertionResult; |
| 12370 | if( !result.isOk() ) { |
| 12371 | std::string elementName; |
| 12372 | switch( result.getResultType() ) { |
| 12373 | case ResultWas::ThrewException: |
| 12374 | case ResultWas::FatalErrorCondition: |
| 12375 | elementName = "error"; |
| 12376 | break; |
| 12377 | case ResultWas::ExplicitFailure: |
| 12378 | elementName = "failure"; |
| 12379 | break; |
| 12380 | case ResultWas::ExpressionFailed: |
| 12381 | elementName = "failure"; |
| 12382 | break; |
| 12383 | case ResultWas::DidntThrowException: |
| 12384 | elementName = "failure"; |
| 12385 | break; |
| 12386 | |
| 12387 | // We should never see these here: |
| 12388 | case ResultWas::Info: |
| 12389 | case ResultWas::Warning: |
| 12390 | case ResultWas::Ok: |
| 12391 | case ResultWas::Unknown: |
| 12392 | case ResultWas::FailureBit: |
| 12393 | case ResultWas::Exception: |
| 12394 | elementName = "internalError"; |
| 12395 | break; |
| 12396 | } |
| 12397 | |
| 12398 | XmlWriter::ScopedElement e = xml.scopedElement( elementName ); |
| 12399 | |
| 12400 | xml.writeAttribute( "message", result.getExpandedExpression() ); |
| 12401 | xml.writeAttribute( "type", result.getTestMacroName() ); |
| 12402 | |
| 12403 | ReusableStringStream rss; |
| 12404 | if( !result.getMessage().empty() ) |
| 12405 | rss << result.getMessage() << '\n'; |
| 12406 | for( auto const& msg : stats.infoMessages ) |
| 12407 | if( msg.type == ResultWas::Info ) |
| 12408 | rss << msg.message << '\n'; |
| 12409 | |
| 12410 | rss << "at " << result.getSourceInfo(); |
| 12411 | xml.writeText( rss.str(), false ); |
| 12412 | } |
| 12413 | } |
| 12414 | |
| 12415 | CATCH_REGISTER_REPORTER( "junit", JunitReporter ) |
| 12416 |
nothing calls this directly
no test coverage detected