[junit]: IDEA-386891 remove expected/actual from failure details

(cherry picked from commit be14b29bff136432e74978dae719bcc00329f440)

IJ-CR-196065

GitOrigin-RevId: 478c5634b5d0d527721e8f0eddca1647a2e6caaf
This commit is contained in:
Aleksey Dobrynin
2026-03-23 15:11:20 +00:00
committed by intellij-monorepo-bot
parent f6a3540ec9
commit 8343be3497
4 changed files with 15 additions and 16 deletions
@@ -147,12 +147,11 @@ public class TestReporter extends AbstractTestReporter {
}
}
boolean hasComparisonData = failureData != null || ex instanceof MultipleFailuresError;
String trace = includeThrowable ? getTrace(ex) : "";
ComparisonFailureData.registerSMAttributes(failureData, hasComparisonData ? "" : trace, ex.getMessage(), attributes, ex,
"Comparison Failure: ", "expected: <");
if (hasComparisonData && !trace.isEmpty()) {
attributes.put("details", trace);
ComparisonFailureData.registerSMAttributes(failureData, includeThrowable || failureData == null ? getTrace(ex) : "",
ex.getMessage(), attributes, ex, "Comparison Failure: ", "expected: <");
if (ex instanceof MultipleFailuresError) {
attributes.computeIfPresent("message", (k, msq) -> (msq.contains("\n")) ? msq.substring(0, msq.indexOf('\n')) + "..." : msq);
}
}
@@ -55,9 +55,9 @@ public class JUnit5EventsTest {
##TC[rootName name='testClass' location='java:suite://testClass']
##TC[testStarted id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' locationHint='java:test://com.intellij.junit5.testData.MyTestClass/test1' metainfo='']
##TC[testStdOut id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' out='timestamp = ${timestamp}, key1 = value1, stdout = out1|n']
##TC[testFailed id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' message='message1|nComparison Failure: ' expected='expected1' actual='actual1' details='TRACE']
##TC[testFailed id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' message='message2|nComparison Failure: ' expected='expected2' actual='actual2' details='TRACE']
##TC[testFailed id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' message='2 errors (2 failures)|n\torg.opentest4j.AssertionFailedError: message1|n\torg.opentest4j.AssertionFailedError: message2' details='TRACE']
##TC[testFailed id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' message='org.opentest4j.AssertionFailedError: message1' expected='expected1' actual='actual1' details='TRACE']
##TC[testFailed id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' message='org.opentest4j.AssertionFailedError: message2' expected='expected2' actual='actual2' details='TRACE']
##TC[testFailed id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0' message='org.opentest4j.MultipleFailuresError: 2 errors (2 failures)...' details='TRACE']
##TC[testFinished id='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' name='test1()' nodeId='|[engine:engine|]/|[class:testClass|]/|[method:testMethod|]' parentNodeId='0']
""".replace("${timestamp}", reportEntry.getTimestamp().toString()), builder.getNormalizedTestOutput());
}
@@ -175,7 +175,7 @@ public class JUnit5EventsTest {
var selectors = request.getSelectorsByType(DiscoverySelector.class);
Assertions.assertFalse(selectors.isEmpty(), "Selectors should not be empty");
var selector = selectors.get(0);
var selector = selectors.getFirst();
Assertions.assertInstanceOf(ClassSelector.class, selector);
Assertions.assertEquals("com.intellij.junit5.testData.InitStaticField$MyTest", ((ClassSelector)selector).getClassName());
}
@@ -62,9 +62,9 @@ public class JUnit6EventsTest extends AbstractTestFrameworkCompilingIntegrationT
assertEquals("""
##TC[testStarted id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' locationHint='java:test://com.intellij.junit6.testData.MyTestClass/test1' metainfo='org.junit.jupiter.api.TestReporter']
##TC[testStdOut id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' out='timestamp = ##timestamp##, key1 = value1, stdout = out1|n']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='message1 ==> expected: <expected1> but was: <actual1>|nComparison Failure: ' expected='expected1' actual='actual1' details='org.opentest4j.AssertionFailedError: message1 ==> expected: <expected1> but was: <actual1>']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='message2 ==> expected: <expected2> but was: <actual2>|nComparison Failure: ' expected='expected2' actual='actual2' details='org.opentest4j.AssertionFailedError: message2 ==> expected: <expected2> but was: <actual2>']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='2 errors (2 failures)|n org.opentest4j.AssertionFailedError: message1 ==> expected: <expected1> but was: <actual1>|n org.opentest4j.AssertionFailedError: message2 ==> expected: <expected2> but was: <actual2>' details='org.opentest4j.MultipleFailuresError: 2 errors (2 failures)']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='org.opentest4j.AssertionFailedError: message1 ==> ' expected='expected1' actual='actual1' details='at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:<line>)']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='org.opentest4j.AssertionFailedError: message2 ==> ' expected='expected2|nnew line' actual='actual2|nnew line' details='at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:<line>)']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='org.opentest4j.MultipleFailuresError: 2 errors (2 failures)...' details='at org.junit.jupiter.api.AssertAll.assertAll(AssertAll.java:<line>)']
##TC[testFinished id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##']""",
tests);
}
@@ -107,7 +107,7 @@ public class JUnit6EventsTest extends AbstractTestFrameworkCompilingIntegrationT
##TC[testStarted id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' locationHint='java:test://com.intellij.junit6.testData.MyTestClass/test1' metainfo='org.junit.jupiter.api.TestReporter']
##TC[testStdOut id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' out='timestamp = ##timestamp##, key1 = value1, stdout = out1|n']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='##message##' expected='expected1' actual='actual1' details='##details##']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='##message##' expected='expected2' actual='actual2' details='##details##']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='##message##' expected='expected2|nnew line' actual='actual2|nnew line' details='##details##']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##' message='##message##' details='##details##']
##TC[testFinished id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' name='test1(TestReporter)' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[method:test1(org.junit.jupiter.api.TestReporter)|]' parentNodeId='0' duration='##duration##']
##TC[testIgnored id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[test-factory:brokenStreamDisabled()|]' name='brokenStreamDisabled()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.MyTestClass|]/|[test-factory:brokenStreamDisabled()|]' parentNodeId='0' message='##message##']
@@ -206,7 +206,7 @@ public class JUnit6EventsTest extends AbstractTestFrameworkCompilingIntegrationT
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test1()|]' name='test1()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test1()|]' parentNodeId='0' duration='##duration##' message='org.opentest4j.AssertionFailedError: 123' details='at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:<line>)']
##TC[testFinished id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test1()|]' name='test1()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test1()|]' parentNodeId='0' duration='##duration##']
##TC[testStarted id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' name='test2()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' parentNodeId='0' locationHint='java:test://com.intellij.junit6.testData.SimpleFailTest/test2' metainfo='']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' name='test2()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' parentNodeId='0' duration='##duration##' message='expected: <123> but was: <321>|nComparison Failure: ' expected='123' actual='321' details='org.opentest4j.AssertionFailedError: expected: <123> but was: <321>']
##TC[testFailed id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' name='test2()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' parentNodeId='0' duration='##duration##' message='org.opentest4j.AssertionFailedError: ' expected='123' actual='321' details='at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:<line>)']
##TC[testFinished id='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' name='test2()' nodeId='|[engine:junit-jupiter|]/|[class:com.intellij.junit6.testData.SimpleFailTest|]/|[method:test2()|]' parentNodeId='0' duration='##duration##']""",
tests);
}
@@ -24,7 +24,7 @@ public class MyTestClass {
reporter.publishEntry(map);
Assertions.assertAll("2 errors",
() -> Assertions.assertEquals("expected1", "actual1", "message1"),
() -> Assertions.assertEquals("expected2", "actual2", "message2")
() -> Assertions.assertEquals("expected2\nnew line", "actual2\nnew line", "message2")
);
}