Skip to content

Commit 745837f

Browse files
committed
Cover trimming boundaries
1 parent 9e04b51 commit 745837f

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* Copyright 2015-2025 the original author or authors.
3+
*
4+
* All rights reserved. This program and the accompanying materials are
5+
* made available under the terms of the Eclipse Public License v2.0 which
6+
* accompanies this distribution and is available at
7+
*
8+
* https://www.eclipse.org/legal/epl-v20.html
9+
*/
10+
11+
package org.junit.jupiter.api;
12+
13+
import static java.util.concurrent.Executors.newSingleThreadExecutor;
14+
import static org.assertj.core.api.Assertions.assertThat;
15+
import static org.junit.jupiter.api.AssertionFailureBuilder.assertionFailure;
16+
import static org.junit.jupiter.api.Assertions.assertLinesMatch;
17+
18+
import java.util.Arrays;
19+
import java.util.List;
20+
import java.util.concurrent.ExecutionException;
21+
import java.util.concurrent.ExecutorService;
22+
23+
import org.opentest4j.AssertionFailedError;
24+
25+
class AssertionFailureBuilderTest {
26+
27+
@Test
28+
void doesNotTrimByDefault() {
29+
var error = AssertionsFacade.fail();
30+
assertStackTraceMatch(error,
31+
"""
32+
\\Qorg.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:\\E.+
33+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest$AssertionsFacade.fail(AssertionFailureBuilderTest.java:\\E.+
34+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest.doesNotTrimByDefault(AssertionFailureBuilderTest.java:\\E.+
35+
>>>>
36+
""");
37+
}
38+
39+
@Test
40+
void trimsUpToAssertionsFacade() {
41+
var error = AssertionsFacade.failWithTrimmedStacktrace(AssertionsFacade.class);
42+
assertStackTraceMatch(error,
43+
"""
44+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest.trimsUpToAssertionsFacade(AssertionFailureBuilderTest.java:\\E.+
45+
>>>>
46+
""");
47+
}
48+
49+
@Test
50+
void trimsUpToAssertionFailureBuilder() {
51+
var error = AssertionsFacade.failWithTrimmedStacktrace(AssertionFailureBuilder.class);
52+
assertStackTraceMatch(error,
53+
"""
54+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest$AssertionsFacade.failWithTrimmedStacktrace(AssertionFailureBuilderTest.java:\\E.+
55+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest.trimsUpToAssertionFailureBuilder(AssertionFailureBuilderTest.java:\\E.+
56+
>>>>
57+
""");
58+
}
59+
60+
@Test
61+
void ignoresClassNotInStackTrace() {
62+
var error = AssertionsFacade.failWithTrimmedStacktrace(String.class);
63+
assertStackTraceMatch(error,
64+
"""
65+
\\Qorg.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:\\E.+
66+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest$AssertionsFacade.failWithTrimmedStacktrace(AssertionFailureBuilderTest.java:\\E.+
67+
\\Qorg.junit.jupiter.api.AssertionFailureBuilderTest.ignoresClassNotInStackTrace(AssertionFailureBuilderTest.java:\\E.+
68+
>>>>
69+
""");
70+
}
71+
72+
@Test
73+
void canTrimToEmptyStacktrace() throws ExecutionException, InterruptedException {
74+
try (ExecutorService service = newSingleThreadExecutor()) {
75+
// Ensure that the stacktrace starts at Thread.
76+
var error = service.submit(() -> AssertionsFacade.failWithTrimmedStacktrace(Thread.class)).get();
77+
assertThat(error.getStackTrace()).isEmpty();
78+
}
79+
}
80+
81+
private static void assertStackTraceMatch(AssertionFailedError assertionFailedError, String expectedLines) {
82+
List<String> stackStraceAsLines = Arrays.stream(assertionFailedError.getStackTrace()) //
83+
.map(StackTraceElement::toString) //
84+
.toList();
85+
assertLinesMatch(expectedLines.lines().toList(), stackStraceAsLines);
86+
}
87+
88+
static class AssertionsFacade {
89+
static AssertionFailedError fail() {
90+
return assertionFailure().build();
91+
}
92+
93+
static AssertionFailedError failWithTrimmedStacktrace(Class<?> testCaseClass) {
94+
return assertionFailure().trimStacktrace(testCaseClass).build();
95+
}
96+
97+
}
98+
}

0 commit comments

Comments
 (0)