| 12250 | } |
| 12251 | |
| 12252 | void JunitReporter::writeAssertion(AssertionStats const &stats) { |
| 12253 | AssertionResult const &result = stats.assertionResult; |
| 12254 | if (!result.isOk()) { |
| 12255 | std::string elementName; |
| 12256 | switch (result.getResultType()) { |
| 12257 | case ResultWas::ThrewException: |
| 12258 | case ResultWas::FatalErrorCondition: |
| 12259 | elementName = "error"; |
| 12260 | break; |
| 12261 | case ResultWas::ExplicitFailure: |
| 12262 | elementName = "failure"; |
| 12263 | break; |
| 12264 | case ResultWas::ExpressionFailed: |
| 12265 | elementName = "failure"; |
| 12266 | break; |
| 12267 | case ResultWas::DidntThrowException: |
| 12268 | elementName = "failure"; |
| 12269 | break; |
| 12270 | |
| 12271 | // We should never see these here: |
| 12272 | case ResultWas::Info: |
| 12273 | case ResultWas::Warning: |
| 12274 | case ResultWas::Ok: |
| 12275 | case ResultWas::Unknown: |
| 12276 | case ResultWas::FailureBit: |
| 12277 | case ResultWas::Exception: |
| 12278 | elementName = "internalError"; |
| 12279 | break; |
| 12280 | } |
| 12281 | |
| 12282 | XmlWriter::ScopedElement e = xml.scopedElement(elementName); |
| 12283 | |
| 12284 | xml.writeAttribute("message", result.getExpandedExpression()); |
| 12285 | xml.writeAttribute("type", result.getTestMacroName()); |
| 12286 | |
| 12287 | ReusableStringStream rss; |
| 12288 | if (!result.getMessage().empty()) |
| 12289 | rss << result.getMessage() << '\n'; |
| 12290 | for (auto const &msg : stats.infoMessages) |
| 12291 | if (msg.type == ResultWas::Info) |
| 12292 | rss << msg.message << '\n'; |
| 12293 | |
| 12294 | rss << "at " << result.getSourceInfo(); |
| 12295 | xml.writeText(rss.str(), false); |
| 12296 | } |
| 12297 | } |
| 12298 | |
| 12299 | CATCH_REGISTER_REPORTER("junit", JunitReporter) |
| 12300 |
nothing calls this directly
no test coverage detected