| 13892 | } |
| 13893 | |
| 13894 | void JunitReporter::writeAssertion( AssertionStats const& stats ) { |
| 13895 | AssertionResult const& result = stats.assertionResult; |
| 13896 | if( !result.isOk() ) { |
| 13897 | std::string elementName; |
| 13898 | switch( result.getResultType() ) { |
| 13899 | case ResultWas::ThrewException: |
| 13900 | case ResultWas::FatalErrorCondition: |
| 13901 | elementName = "error"; |
| 13902 | break; |
| 13903 | case ResultWas::ExplicitFailure: |
| 13904 | elementName = "failure"; |
| 13905 | break; |
| 13906 | case ResultWas::ExpressionFailed: |
| 13907 | elementName = "failure"; |
| 13908 | break; |
| 13909 | case ResultWas::DidntThrowException: |
| 13910 | elementName = "failure"; |
| 13911 | break; |
| 13912 | |
| 13913 | // We should never see these here: |
| 13914 | case ResultWas::Info: |
| 13915 | case ResultWas::Warning: |
| 13916 | case ResultWas::Ok: |
| 13917 | case ResultWas::Unknown: |
| 13918 | case ResultWas::FailureBit: |
| 13919 | case ResultWas::Exception: |
| 13920 | elementName = "internalError"; |
| 13921 | break; |
| 13922 | } |
| 13923 | |
| 13924 | XmlWriter::ScopedElement e = xml.scopedElement( elementName ); |
| 13925 | |
| 13926 | xml.writeAttribute( "message", result.getExpandedExpression() ); |
| 13927 | xml.writeAttribute( "type", result.getTestMacroName() ); |
| 13928 | |
| 13929 | ReusableStringStream rss; |
| 13930 | if( !result.getMessage().empty() ) |
| 13931 | rss << result.getMessage() << '\n'; |
| 13932 | for( auto const& msg : stats.infoMessages ) |
| 13933 | if( msg.type == ResultWas::Info ) |
| 13934 | rss << msg.message << '\n'; |
| 13935 | |
| 13936 | rss << "at " << result.getSourceInfo(); |
| 13937 | xml.writeText( rss.str(), false ); |
| 13938 | } |
| 13939 | } |
| 13940 | |
| 13941 | CATCH_REGISTER_REPORTER( "junit", JunitReporter ) |
| 13942 |
nothing calls this directly
no test coverage detected