Skip to content

Commit 14ba37a

Browse files
committed
Update FailureDetectingExternalResource to suppress post-test failures if the test fails
1 parent ca5f5ae commit 14ba37a

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

modules/junit-vintage/src/main/java/org/testcontainers/junit/vintage/FailureDetectingExternalResource.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.ArrayList;
1010
import java.util.List;
11+
import java.util.Optional;
1112

1213
/**
1314
* {@link TestRule} which is called before and after each test, and also is notified on success/failure.
@@ -23,18 +24,20 @@ public final Statement apply(Statement base, Description description) {
2324
@Override
2425
public void evaluate() throws Throwable {
2526
List<Throwable> errors = new ArrayList<Throwable>();
27+
Optional<Throwable> failure = Optional.empty();
2628

2729
try {
2830
starting(description);
2931
base.evaluate();
3032
notifySucceeded(description, errors);
3133
} catch (org.junit.internal.AssumptionViolatedException e) {
32-
// Do nothing.
34+
failure = Optional.of(e);
3335
} catch (Throwable e) {
36+
failure = Optional.of(e);
3437
errors.add(e);
35-
notifyFailed(e, description, errors);
38+
notifyFailed(e, description);
3639
} finally {
37-
notifyFinished(description, errors);
40+
notifyFinished(failure, description, errors);
3841
}
3942

4043
MultipleFailureException.assertEmpty(errors);
@@ -58,19 +61,22 @@ private void notifySucceeded(Description description, List<Throwable> errors) {
5861
}
5962
}
6063

61-
private void notifyFailed(Throwable failure, Description description, List<Throwable> errors) {
64+
private void notifyFailed(Throwable failure, Description description) {
6265
try {
6366
failed(failure, description);
6467
} catch (Throwable e) {
65-
errors.add(e);
68+
failure.addSuppressed(e);
6669
}
6770
}
6871

69-
private void notifyFinished(Description description, List<Throwable> errors) {
72+
private void notifyFinished(Optional<Throwable> failure, Description description, List<Throwable> errors) {
7073
try {
7174
finished(description, errors);
7275
} catch (Throwable e) {
73-
errors.add(e);
76+
failure.ifPresent(f -> f.addSuppressed(e)); // ifPresentOrElse() requires Java 9
77+
if (!failure.isPresent()) {
78+
errors.add(e);
79+
}
7480
}
7581
}
7682

0 commit comments

Comments
 (0)