Skip to content

Commit da2996d

Browse files
authored
Add a parameter to describe the lambda in a transformedMatch matcher (#122013) (#122065)
1 parent f8ac218 commit da2996d

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 BaseMatcher<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
}
@@ -56,25 +58,31 @@ public void describeMismatch(Object item, Description description) {
5658
return;
5759
}
5860

59-
description.appendText("transformed value ");
61+
description.appendText(transformDescription).appendText(" ");
6062
matcher.describeMismatch(u, description);
6163
}
6264

6365
@Override
6466
public void describeTo(Description description) {
65-
description.appendText("transformed to match ").appendDescriptionOf(matcher);
67+
description.appendText(transformDescription).appendText(" matches ").appendDescriptionOf(matcher);
6668
}
6769
}
6870

6971
public static <T, U> Matcher<T> transformedMatch(Function<T, U> function, Matcher<U> matcher) {
70-
return new TransformMatcher<>(matcher, function);
72+
return new TransformMatcher<>("transformed value", matcher, function);
73+
}
74+
75+
public static <T, U> Matcher<T> transformedMatch(String description, Function<T, U> function, Matcher<U> matcher) {
76+
return new TransformMatcher<>(description, matcher, function);
7177
}
7278

7379
private static class ListTransformMatcher<T, U> extends TypeSafeMatcher<Iterable<T>> {
80+
private final String transformDescription;
7481
private final Matcher<Iterable<? extends U>> matcher;
7582
private final Function<T, U> transform;
7683

77-
private ListTransformMatcher(Matcher<Iterable<? extends U>> matcher, Function<T, U> transform) {
84+
private ListTransformMatcher(String transformDescription, Matcher<Iterable<? extends U>> matcher, Function<T, U> transform) {
85+
this.transformDescription = transformDescription;
7886
this.matcher = matcher;
7987
this.transform = transform;
8088
}
@@ -110,25 +118,35 @@ protected void describeMismatchSafely(Iterable<T> item, Description description)
110118
}
111119
}
112120

113-
description.appendText("transformed item ");
121+
description.appendText(transformDescription).appendText(" ");
114122
matcher.describeMismatch(us, description);
115123
}
116124

117125
@Override
118126
public void describeTo(Description description) {
119-
description.appendText("iterable with transformed items to match ").appendDescriptionOf(matcher);
127+
description.appendText("iterable with ").appendText(transformDescription).appendText(" matching ").appendDescriptionOf(matcher);
120128
}
121129
}
122130

123131
public static <T, U> Matcher<Iterable<T>> transformedItemsMatch(Function<T, U> function, Matcher<Iterable<? extends U>> matcher) {
124-
return new ListTransformMatcher<>(matcher, function);
132+
return new ListTransformMatcher<>("transformed items", matcher, function);
133+
}
134+
135+
public static <T, U> Matcher<Iterable<T>> transformedItemsMatch(
136+
String transformDescription,
137+
Function<T, U> function,
138+
Matcher<Iterable<? extends U>> matcher
139+
) {
140+
return new ListTransformMatcher<>(transformDescription, matcher, function);
125141
}
126142

127143
private static class ArrayTransformMatcher<T, U> extends TypeSafeMatcher<T[]> {
144+
private final String transformDescription;
128145
private final Matcher<U[]> matcher;
129146
private final Function<T, U> transform;
130147

131-
private ArrayTransformMatcher(Matcher<U[]> matcher, Function<T, U> transform) {
148+
private ArrayTransformMatcher(String transformDescription, Matcher<U[]> matcher, Function<T, U> transform) {
149+
this.transformDescription = transformDescription;
132150
this.matcher = matcher;
133151
this.transform = transform;
134152
}
@@ -177,18 +195,26 @@ protected void describeMismatchSafely(T[] item, Description description) {
177195
us[i] = u;
178196
}
179197

180-
description.appendText("transformed item ");
198+
description.appendText(transformDescription).appendText(" ");
181199
matcher.describeMismatch(us, description);
182200
}
183201

184202
@Override
185203
public void describeTo(Description description) {
186-
description.appendText("array with transformed items to match ").appendDescriptionOf(matcher);
204+
description.appendText("array with ").appendText(transformDescription).appendText(" matching ").appendDescriptionOf(matcher);
187205
}
188206
}
189207

190208
public static <T, U> Matcher<T[]> transformedArrayItemsMatch(Function<T, U> function, Matcher<U[]> matcher) {
191-
return new ArrayTransformMatcher<>(matcher, function);
209+
return new ArrayTransformMatcher<>("transformed items", matcher, function);
210+
}
211+
212+
public static <T, U> Matcher<T[]> transformedArrayItemsMatch(
213+
String transformDescription,
214+
Function<T, U> function,
215+
Matcher<U[]> matcher
216+
) {
217+
return new ArrayTransformMatcher<>(transformDescription, matcher, function);
192218
}
193219

194220
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
@@ -255,7 +255,7 @@ public static void assertBlocked(@Nullable final Integer expectedBlockId, Except
255255
assertThat(
256256
"Request should have been blocked by [" + expectedBlockId + "] instead of " + e.blocks(),
257257
e.blocks(),
258-
hasItem(transformedMatch(ClusterBlock::id, equalTo(expectedBlockId)))
258+
hasItem(transformedMatch("ClusterBlock id", ClusterBlock::id, equalTo(expectedBlockId)))
259259
);
260260
}
261261
}
@@ -762,33 +762,39 @@ public static void assertSuggestion(Suggest searchSuggest, int entry, String key
762762
* Assert that an index template is missing
763763
*/
764764
public static void assertIndexTemplateMissing(GetIndexTemplatesResponse templatesResponse, String name) {
765-
assertThat(templatesResponse.getIndexTemplates(), not(hasItem(transformedMatch(IndexTemplateMetadata::name, equalTo(name)))));
765+
assertThat(
766+
templatesResponse.getIndexTemplates(),
767+
not(hasItem(transformedMatch("IndexTemplateMetadata name", IndexTemplateMetadata::name, equalTo(name))))
768+
);
766769
}
767770

768771
/**
769772
* Assert that an index template exists
770773
*/
771774
public static void assertIndexTemplateExists(GetIndexTemplatesResponse templatesResponse, String name) {
772-
assertThat(templatesResponse.getIndexTemplates(), hasItem(transformedMatch(IndexTemplateMetadata::name, equalTo(name))));
775+
assertThat(
776+
templatesResponse.getIndexTemplates(),
777+
hasItem(transformedMatch("IndexTemplateMetadata name", IndexTemplateMetadata::name, equalTo(name)))
778+
);
773779
}
774780

775781
/*
776782
* matchers
777783
*/
778784
public static Matcher<SearchHit> hasId(final String id) {
779-
return transformedMatch(SearchHit::getId, equalTo(id));
785+
return transformedMatch("SearchHit id", SearchHit::getId, equalTo(id));
780786
}
781787

782788
public static Matcher<SearchHit> hasIndex(final String index) {
783-
return transformedMatch(SearchHit::getIndex, equalTo(index));
789+
return transformedMatch("SearchHit index", SearchHit::getIndex, equalTo(index));
784790
}
785791

786792
public static Matcher<SearchHit> hasScore(final float score) {
787-
return transformedMatch(SearchHit::getScore, equalTo(score));
793+
return transformedMatch("SearchHit score", SearchHit::getScore, equalTo(score));
788794
}
789795

790796
public static Matcher<SearchHit> hasRank(final int rank) {
791-
return transformedMatch(SearchHit::getRank, equalTo(rank));
797+
return transformedMatch("SearchHit rank", SearchHit::getRank, equalTo(rank));
792798
}
793799

794800
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
@@ -60,7 +60,8 @@ public void testTransformMatcher() {
6060
}
6161

6262
public void testTransformDescription() {
63-
assertDescribeTo(transformedMatch((A a) -> a.str, emptyString()), equalTo("transformed to match an empty string"));
63+
assertDescribeTo(transformedMatch((A a) -> a.str, emptyString()), equalTo("transformed value matches an empty string"));
64+
assertDescribeTo(transformedMatch("str field", (A a) -> a.str, emptyString()), equalTo("str field matches an empty string"));
6465
}
6566

6667
public void testListTransformMatcher() {
@@ -71,14 +72,23 @@ public void testListTransformMatcher() {
7172
assertMismatch(
7273
as,
7374
transformedItemsMatch(a -> a.str, containsInAnyOrder("1", "2", "4")),
74-
equalTo("transformed item not matched: \"3\"")
75+
equalTo("transformed items not matched: \"3\"")
76+
);
77+
assertMismatch(
78+
as,
79+
transformedItemsMatch("str field", a -> a.str, containsInAnyOrder("1", "2", "4")),
80+
equalTo("str field not matched: \"3\"")
7581
);
7682
}
7783

7884
public void testListTransformDescription() {
7985
assertDescribeTo(
8086
transformedItemsMatch((A a) -> a.str, containsInAnyOrder("1")),
81-
equalTo("iterable with transformed items to match iterable with items [\"1\"] in any order")
87+
equalTo("iterable with transformed items matching iterable with items [\"1\"] in any order")
88+
);
89+
assertDescribeTo(
90+
transformedItemsMatch("str field", (A a) -> a.str, containsInAnyOrder("1")),
91+
equalTo("iterable with str field matching iterable with items [\"1\"] in any order")
8292
);
8393
}
8494

@@ -89,14 +99,23 @@ public void testArrayTransformMatcher() {
8999
assertMismatch(
90100
as,
91101
transformedArrayItemsMatch(a -> a.str, arrayContainingInAnyOrder("1", "2", "4")),
92-
equalTo("transformed item not matched: \"3\"")
102+
equalTo("transformed items not matched: \"3\"")
103+
);
104+
assertMismatch(
105+
as,
106+
transformedArrayItemsMatch("str field", a -> a.str, arrayContainingInAnyOrder("1", "2", "4")),
107+
equalTo("str field not matched: \"3\"")
93108
);
94109
}
95110

96111
public void testArrayTransformDescription() {
97112
assertDescribeTo(
98113
transformedArrayItemsMatch((A a) -> a.str, arrayContainingInAnyOrder("1")),
99-
equalTo("array with transformed items to match [\"1\"] in any order")
114+
equalTo("array with transformed items matching [\"1\"] in any order")
115+
);
116+
assertDescribeTo(
117+
transformedArrayItemsMatch("str field", (A a) -> a.str, arrayContainingInAnyOrder("1")),
118+
equalTo("array with str field matching [\"1\"] in any order")
100119
);
101120
}
102121

0 commit comments

Comments
 (0)