From 52ee83cf21e1d27dd5fd0f5667f0ba3d314897ac Mon Sep 17 00:00:00 2001 From: "M.P. Korstanje" Date: Sat, 23 Mar 2024 18:54:32 +0100 Subject: [PATCH] Include value from Exception.stacktrace if available --- CHANGELOG.md | 3 +++ java/pom.xml | 2 +- .../junitxmlformatter/XmlReportWriter.java | 22 ++++++++++++++----- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 167f8a9..7b2d9be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Include value from Exception.stacktrace if available ([#30](https://github.com/cucumber/cucumber-junit-xml-formatter/pull/30), M.P. Korstanje) + ### Fixed - Do not overwrite results of retried tests ([#29](https://github.com/cucumber/cucumber-junit-xml-formatter/pull/29), M.P. Korstanje) diff --git a/java/pom.xml b/java/pom.xml index 3a65c1f..7c3f628 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -51,7 +51,7 @@ io.cucumber messages - [21.0.1,25.0.0) + [24.0.0,25.0.0) diff --git a/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java b/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java index 9f7de61..ae3db98 100644 --- a/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java +++ b/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java @@ -100,8 +100,10 @@ private void writeNonPassedElement(EscapingXmlStreamWriter writer, TestCaseStart Optional message = result.getMessage(); Optional exceptionType = result.getException().map(Exception::getType); Optional exceptionMessage = result.getException().flatMap(Exception::getMessage); + Optional exceptionStackTrace = result.getException().flatMap(Exception::getStackTrace); - if (message.isPresent()) { + boolean hasMessageOrStackTrace = message.isPresent() || exceptionStackTrace.isPresent(); + if (hasMessageOrStackTrace) { writer.writeStartElement(elementName); } else { writer.writeEmptyElement(elementName); @@ -113,13 +115,21 @@ private void writeNonPassedElement(EscapingXmlStreamWriter writer, TestCaseStart if (exceptionMessage.isPresent()) { writer.writeAttribute("message", exceptionMessage.get()); } - if (message.isPresent()) { - writer.newLine(); - writer.writeCData(message.get()); - writer.newLine(); + if (hasMessageOrStackTrace) { + if (exceptionStackTrace.isPresent()) { + writer.newLine(); + writer.writeCData(exceptionStackTrace.get()); + writer.newLine(); + } else { + // Fall back to message for older implementations + // that put the stack trace in the message + writer.newLine(); + writer.writeCData(message.get()); + writer.newLine(); + } } - if (message.isPresent()) { + if (hasMessageOrStackTrace) { writer.writeEndElement(); } writer.newLine();