Skip to content

Commit 0a923da

Browse files
alb-i986kcooney
authored andcommitted
Fix ResultMatchers#hasFailureContaining (junit-team#1292)
ResultMatchers.hasFailureContaining() should not match when the given PrintableResult has no failures.
1 parent 2cd912f commit 0a923da

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/main/java/org/junit/experimental/results/ResultMatchers.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ public void describeTo(Description description) {
6666
* contains {@code string}
6767
*/
6868
public static Matcher<PrintableResult> hasFailureContaining(final String string) {
69-
return new BaseMatcher<PrintableResult>() {
70-
public boolean matches(Object item) {
71-
return item.toString().contains(string);
69+
return new TypeSafeMatcher<PrintableResult>() {
70+
public boolean matchesSafely(PrintableResult item) {
71+
return item.failureCount() > 0 && item.toString().contains(string);
7272
}
7373

7474
public void describeTo(Description description) {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package org.junit.tests.experimental.results;
22

3-
import static org.hamcrest.CoreMatchers.containsString;
4-
import static org.hamcrest.CoreMatchers.is;
5-
import static org.junit.Assert.assertThat;
6-
73
import org.junit.Test;
4+
import org.junit.experimental.results.PrintableResult;
85
import org.junit.experimental.results.ResultMatchers;
96
import org.junit.experimental.theories.Theory;
7+
import org.junit.runner.Description;
8+
import org.junit.runner.notification.Failure;
9+
10+
import java.util.ArrayList;
11+
import java.util.Collections;
12+
13+
import static org.hamcrest.CoreMatchers.containsString;
14+
import static org.hamcrest.CoreMatchers.is;
15+
import static org.junit.Assert.assertThat;
1016

1117
public class ResultMatchersTest {
18+
1219
@Test
1320
public void hasFailuresHasGoodDescription() {
1421
assertThat(ResultMatchers.failureCountIs(3).toString(),
@@ -20,4 +27,20 @@ public void hasFailuresDescriptionReflectsInput(int i) {
2027
assertThat(ResultMatchers.failureCountIs(i).toString(),
2128
containsString("" + i));
2229
}
30+
31+
@Test
32+
public void hasFailureContaining_givenResultWithNoFailures() {
33+
PrintableResult resultWithNoFailures = new PrintableResult(new ArrayList<Failure>());
34+
35+
assertThat(ResultMatchers.hasFailureContaining("").matches(resultWithNoFailures), is(false));
36+
}
37+
38+
@Test
39+
public void hasFailureContaining_givenResultWithOneFailure() {
40+
PrintableResult resultWithOneFailure = new PrintableResult(Collections.singletonList(
41+
new Failure(Description.EMPTY, new RuntimeException("my failure"))));
42+
43+
assertThat(ResultMatchers.hasFailureContaining("my failure").matches(resultWithOneFailure), is(true));
44+
assertThat(ResultMatchers.hasFailureContaining("his failure").matches(resultWithOneFailure), is(false));
45+
}
2346
}

0 commit comments

Comments
 (0)