Skip to content

Commit fffce17

Browse files
authored
Fix LambdaMatchers.transformedMatch to handle null values (#121371) (#121374)
1 parent ede1e77 commit fffce17

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

test/framework/src/main/java/org/elasticsearch/test/LambdaMatchers.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
public class LambdaMatchers {
2525

26-
private static class TransformMatcher<T, U> extends BaseMatcher<T> {
26+
private static class TransformMatcher<T, U> extends TypeSafeMatcher<T> {
2727
private final Matcher<U> matcher;
2828
private final Function<T, U> transform;
2929

@@ -33,24 +33,21 @@ private TransformMatcher(Matcher<U> matcher, Function<T, U> transform) {
3333
}
3434

3535
@Override
36-
@SuppressWarnings("unchecked")
37-
public boolean matches(Object actual) {
36+
protected boolean matchesSafely(T item) {
3837
U u;
3938
try {
40-
u = transform.apply((T) actual);
39+
u = transform.apply(item);
4140
} catch (ClassCastException e) {
4241
throw new AssertionError(e);
4342
}
44-
4543
return matcher.matches(u);
4644
}
4745

4846
@Override
49-
@SuppressWarnings("unchecked")
50-
public void describeMismatch(Object item, Description description) {
47+
protected void describeMismatchSafely(T item, Description description) {
5148
U u;
5249
try {
53-
u = transform.apply((T) item);
50+
u = transform.apply(item);
5451
} catch (ClassCastException e) {
5552
description.appendValue(item).appendText(" is not of the correct type (").appendText(e.getMessage()).appendText(")");
5653
return;

test/framework/src/test/java/org/elasticsearch/test/LambdaMatchersTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import static org.elasticsearch.test.LambdaMatchers.transformedItemsMatch;
2020
import static org.elasticsearch.test.LambdaMatchers.transformedMatch;
2121
import static org.elasticsearch.test.LambdaMatchers.trueWith;
22+
import static org.hamcrest.Matchers.anything;
2223
import static org.hamcrest.Matchers.arrayContaining;
2324
import static org.hamcrest.Matchers.arrayContainingInAnyOrder;
2425
import static org.hamcrest.Matchers.containsInAnyOrder;
2526
import static org.hamcrest.Matchers.emptyString;
2627
import static org.hamcrest.Matchers.equalTo;
28+
import static org.hamcrest.Matchers.is;
2729
import static org.hamcrest.Matchers.not;
2830

2931
public class LambdaMatchersTests extends ESTestCase {
@@ -56,6 +58,7 @@ public void testTransformMatcher() {
5658
assertThat(new A("1"), transformedMatch(a -> a.str, equalTo("1")));
5759
assertThat(new B("1"), transformedMatch((A a) -> a.str, equalTo("1")));
5860

61+
assertMismatch((A) null, transformedMatch(A::toString, anything()), is("was null"));
5962
assertMismatch(new A("1"), transformedMatch(a -> a.str, emptyString()), equalTo("transformed value was \"1\""));
6063
}
6164

0 commit comments

Comments
 (0)