Skip to content

Commit 3ed5f73

Browse files
authored
Add a parameter to describe the lambda in a transformedMatch matcher (#122013)
1 parent 8366678 commit 3ed5f73

File tree

3 files changed

+75
-24
lines changed

3 files changed

+75
-24
lines changed

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

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
public class LambdaMatchers {
2525

2626
private static class TransformMatcher<T, U> extends TypeSafeMatcher<T> {
27+
private final String transformDescription;
2728
private final Matcher<U> matcher;
2829
private final Function<T, U> transform;
2930

30-
private TransformMatcher(Matcher<U> matcher, Function<T, U> transform) {
31+
private TransformMatcher(String transformDescription, Matcher<U> matcher, Function<T, U> transform) {
32+
this.transformDescription = transformDescription;
3133
this.matcher = matcher;
3234
this.transform = transform;
3335
}
@@ -53,25 +55,31 @@ protected void describeMismatchSafely(T item, Description description) {
5355
return;
5456
}
5557

56-
description.appendText("transformed value ");
58+
description.appendText(transformDescription).appendText(" ");
5759
matcher.describeMismatch(u, description);
5860
}
5961

6062
@Override
6163
public void describeTo(Description description) {
62-
description.appendText("transformed to match ").appendDescriptionOf(matcher);
64+
description.appendText(transformDescription).appendText(" matches ").appendDescriptionOf(matcher);
6365
}
6466
}
6567

6668
public static <T, U> Matcher<T> transformedMatch(Function<T, U> function, Matcher<U> matcher) {
67-
return new TransformMatcher<>(matcher, function);
69+
return new TransformMatcher<>("transformed value", matcher, function);
70+
}
71+
72+
public static <T, U> Matcher<T> transformedMatch(String description, Function<T, U> function, Matcher<U> matcher) {
73+
return new TransformMatcher<>(description, matcher, function);
6874
}
6975

7076
private static class ListTransformMatcher<T, U> extends TypeSafeMatcher<Iterable<T>> {
77+
private final String transformDescription;
7178
private final Matcher<Iterable<? extends U>> matcher;
7279
private final Function<T, U> transform;
7380

74-
private ListTransformMatcher(Matcher<Iterable<? extends U>> matcher, Function<T, U> transform) {
81+
private ListTransformMatcher(String transformDescription, Matcher<Iterable<? extends U>> matcher, Function<T, U> transform) {
82+
this.transformDescription = transformDescription;
7583
this.matcher = matcher;
7684
this.transform = transform;
7785
}
@@ -107,25 +115,35 @@ protected void describeMismatchSafely(Iterable<T> item, Description description)
107115
}
108116
}
109117

110-
description.appendText("transformed item ");
118+
description.appendText(transformDescription).appendText(" ");
111119
matcher.describeMismatch(us, description);
112120
}
113121

114122
@Override
115123
public void describeTo(Description description) {
116-
description.appendText("iterable with transformed items to match ").appendDescriptionOf(matcher);
124+
description.appendText("iterable with ").appendText(transformDescription).appendText(" matching ").appendDescriptionOf(matcher);
117125
}
118126
}
119127

120128
public static <T, U> Matcher<Iterable<T>> transformedItemsMatch(Function<T, U> function, Matcher<Iterable<? extends U>> matcher) {
121-
return new ListTransformMatcher<>(matcher, function);
129+
return new ListTransformMatcher<>("transformed items", matcher, function);
130+
}
131+
132+
public static <T, U> Matcher<Iterable<T>> transformedItemsMatch(
133+
String transformDescription,
134+
Function<T, U> function,
135+
Matcher<Iterable<? extends U>> matcher
136+
) {
137+
return new ListTransformMatcher<>(transformDescription, matcher, function);
122138
}
123139

124140
private static class ArrayTransformMatcher<T, U> extends TypeSafeMatcher<T[]> {
141+
private final String transformDescription;
125142
private final Matcher<U[]> matcher;
126143
private final Function<T, U> transform;
127144

128-
private ArrayTransformMatcher(Matcher<U[]> matcher, Function<T, U> transform) {
145+
private ArrayTransformMatcher(String transformDescription, Matcher<U[]> matcher, Function<T, U> transform) {
146+
this.transformDescription = transformDescription;
129147
this.matcher = matcher;
130148
this.transform = transform;
131149
}
@@ -174,18 +192,26 @@ protected void describeMismatchSafely(T[] item, Description description) {
174192
us[i] = u;
175193
}
176194

177-
description.appendText("transformed item ");
195+
description.appendText(transformDescription).appendText(" ");
178196
matcher.describeMismatch(us, description);
179197
}
180198

181199
@Override
182200
public void describeTo(Description description) {
183-
description.appendText("array with transformed items to match ").appendDescriptionOf(matcher);
201+
description.appendText("array with ").appendText(transformDescription).appendText(" matching ").appendDescriptionOf(matcher);
184202
}
185203
}
186204

187205
public static <T, U> Matcher<T[]> transformedArrayItemsMatch(Function<T, U> function, Matcher<U[]> matcher) {
188-
return new ArrayTransformMatcher<>(matcher, function);
206+
return new ArrayTransformMatcher<>("transformed items", matcher, function);
207+
}
208+
209+
public static <T, U> Matcher<T[]> transformedArrayItemsMatch(
210+
String transformDescription,
211+
Function<T, U> function,
212+
Matcher<U[]> matcher
213+
) {
214+
return new ArrayTransformMatcher<>(transformDescription, matcher, function);
189215
}
190216

191217
private static class PredicateMatcher<T> extends BaseMatcher<Predicate<? super T>> {

test/framework/src/main/java/org/elasticsearch/test/hamcrest/ElasticsearchAssertions.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public static void assertBlocked(@Nullable final Integer expectedBlockId, Except
257257
assertThat(
258258
"Request should have been blocked by [" + expectedBlockId + "] instead of " + e.blocks(),
259259
e.blocks(),
260-
hasItem(transformedMatch(ClusterBlock::id, equalTo(expectedBlockId)))
260+
hasItem(transformedMatch("ClusterBlock id", ClusterBlock::id, equalTo(expectedBlockId)))
261261
);
262262
}
263263
}
@@ -764,33 +764,39 @@ public static void assertSuggestion(Suggest searchSuggest, int entry, String key
764764
* Assert that an index template is missing
765765
*/
766766
public static void assertIndexTemplateMissing(GetIndexTemplatesResponse templatesResponse, String name) {
767-
assertThat(templatesResponse.getIndexTemplates(), not(hasItem(transformedMatch(IndexTemplateMetadata::name, equalTo(name)))));
767+
assertThat(
768+
templatesResponse.getIndexTemplates(),
769+
not(hasItem(transformedMatch("IndexTemplateMetadata name", IndexTemplateMetadata::name, equalTo(name))))
770+
);
768771
}
769772

770773
/**
771774
* Assert that an index template exists
772775
*/
773776
public static void assertIndexTemplateExists(GetIndexTemplatesResponse templatesResponse, String name) {
774-
assertThat(templatesResponse.getIndexTemplates(), hasItem(transformedMatch(IndexTemplateMetadata::name, equalTo(name))));
777+
assertThat(
778+
templatesResponse.getIndexTemplates(),
779+
hasItem(transformedMatch("IndexTemplateMetadata name", IndexTemplateMetadata::name, equalTo(name)))
780+
);
775781
}
776782

777783
/*
778784
* matchers
779785
*/
780786
public static Matcher<SearchHit> hasId(final String id) {
781-
return transformedMatch(SearchHit::getId, equalTo(id));
787+
return transformedMatch("SearchHit id", SearchHit::getId, equalTo(id));
782788
}
783789

784790
public static Matcher<SearchHit> hasIndex(final String index) {
785-
return transformedMatch(SearchHit::getIndex, equalTo(index));
791+
return transformedMatch("SearchHit index", SearchHit::getIndex, equalTo(index));
786792
}
787793

788794
public static Matcher<SearchHit> hasScore(final float score) {
789-
return transformedMatch(SearchHit::getScore, equalTo(score));
795+
return transformedMatch("SearchHit score", SearchHit::getScore, equalTo(score));
790796
}
791797

792798
public static Matcher<SearchHit> hasRank(final int rank) {
793-
return transformedMatch(SearchHit::getRank, equalTo(rank));
799+
return transformedMatch("SearchHit rank", SearchHit::getRank, equalTo(rank));
794800
}
795801

796802
public static <T extends Query> T assertBooleanSubQuery(Query query, Class<T> subqueryType, int i) {

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

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ public void testTransformMatcher() {
6363
}
6464

6565
public void testTransformDescription() {
66-
assertDescribeTo(transformedMatch((A a) -> a.str, emptyString()), equalTo("transformed to match an empty string"));
66+
assertDescribeTo(transformedMatch((A a) -> a.str, emptyString()), equalTo("transformed value matches an empty string"));
67+
assertDescribeTo(transformedMatch("str field", (A a) -> a.str, emptyString()), equalTo("str field matches an empty string"));
6768
}
6869

6970
public void testListTransformMatcher() {
@@ -74,14 +75,23 @@ public void testListTransformMatcher() {
7475
assertMismatch(
7576
as,
7677
transformedItemsMatch(a -> a.str, containsInAnyOrder("1", "2", "4")),
77-
equalTo("transformed item not matched: \"3\"")
78+
equalTo("transformed items not matched: \"3\"")
79+
);
80+
assertMismatch(
81+
as,
82+
transformedItemsMatch("str field", a -> a.str, containsInAnyOrder("1", "2", "4")),
83+
equalTo("str field not matched: \"3\"")
7884
);
7985
}
8086

8187
public void testListTransformDescription() {
8288
assertDescribeTo(
8389
transformedItemsMatch((A a) -> a.str, containsInAnyOrder("1")),
84-
equalTo("iterable with transformed items to match iterable with items [\"1\"] in any order")
90+
equalTo("iterable with transformed items matching iterable with items [\"1\"] in any order")
91+
);
92+
assertDescribeTo(
93+
transformedItemsMatch("str field", (A a) -> a.str, containsInAnyOrder("1")),
94+
equalTo("iterable with str field matching iterable with items [\"1\"] in any order")
8595
);
8696
}
8797

@@ -92,14 +102,23 @@ public void testArrayTransformMatcher() {
92102
assertMismatch(
93103
as,
94104
transformedArrayItemsMatch(a -> a.str, arrayContainingInAnyOrder("1", "2", "4")),
95-
equalTo("transformed item not matched: \"3\"")
105+
equalTo("transformed items not matched: \"3\"")
106+
);
107+
assertMismatch(
108+
as,
109+
transformedArrayItemsMatch("str field", a -> a.str, arrayContainingInAnyOrder("1", "2", "4")),
110+
equalTo("str field not matched: \"3\"")
96111
);
97112
}
98113

99114
public void testArrayTransformDescription() {
100115
assertDescribeTo(
101116
transformedArrayItemsMatch((A a) -> a.str, arrayContainingInAnyOrder("1")),
102-
equalTo("array with transformed items to match [\"1\"] in any order")
117+
equalTo("array with transformed items matching [\"1\"] in any order")
118+
);
119+
assertDescribeTo(
120+
transformedArrayItemsMatch("str field", (A a) -> a.str, arrayContainingInAnyOrder("1")),
121+
equalTo("array with str field matching [\"1\"] in any order")
103122
);
104123
}
105124

0 commit comments

Comments
 (0)