Skip to content

Commit 6d5f1ae

Browse files
support for allOf hamcrest matcher (#396)
* recipe now supports allOf * Quick polish * Rename recipe * Drop FlattenAllOf for HamcrestOfMatchersToAssertJ --------- Co-authored-by: Tim te Beek <[email protected]>
1 parent c78bbd3 commit 6d5f1ae

File tree

6 files changed

+138
-272
lines changed

6 files changed

+138
-272
lines changed

src/main/java/org/openrewrite/java/testing/hamcrest/FlattenAllOf.java

Lines changed: 0 additions & 98 deletions
This file was deleted.

src/main/java/org/openrewrite/java/testing/hamcrest/HamcrestAnyOfToAssertJ.java renamed to src/main/java/org/openrewrite/java/testing/hamcrest/HamcrestOfMatchersToAssertJ.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import java.util.stream.Collectors;
3434

3535
@SuppressWarnings("NullableProblems")
36-
public class HamcrestAnyOfToAssertJ extends Recipe {
36+
public class HamcrestOfMatchersToAssertJ extends Recipe {
3737
@Override
3838
public String getDisplayName() {
3939
return "Migrate `anyOf` Hamcrest Matcher to AssertJ";
@@ -46,25 +46,29 @@ public String getDescription() {
4646

4747
private static final MethodMatcher ASSERT_THAT_MATCHER = new MethodMatcher("org.hamcrest.MatcherAssert assertThat(..)");
4848
private static final MethodMatcher ANY_OF_MATCHER = new MethodMatcher("org.hamcrest.Matchers anyOf(..)");
49+
private static final MethodMatcher ALL_OF_MATCHER = new MethodMatcher("org.hamcrest.Matchers allOf(..)");
4950

5051
@Override
5152
public TreeVisitor<?, ExecutionContext> getVisitor() {
52-
return Preconditions.check(new UsesMethod<>(ANY_OF_MATCHER), new AnyOfToAssertJVisitor());
53+
return Preconditions.check(Preconditions.or(
54+
new UsesMethod<>(ANY_OF_MATCHER),
55+
new UsesMethod<>(ALL_OF_MATCHER)
56+
), new AnyOfToAssertJVisitor());
5357
}
5458

5559
private static class AnyOfToAssertJVisitor extends JavaIsoVisitor<ExecutionContext> {
56-
5760
@Override
5861
public J.MethodInvocation visitMethodInvocation(J.MethodInvocation methodInvocation, ExecutionContext ctx) {
5962
J.MethodInvocation mi = super.visitMethodInvocation(methodInvocation, ctx);
6063
List<Expression> arguments = mi.getArguments();
61-
Expression anyOfExpression = arguments.get(arguments.size() - 1);
62-
if (!ASSERT_THAT_MATCHER.matches(mi) || !ANY_OF_MATCHER.matches(anyOfExpression)) {
64+
Expression ofExpression = arguments.get(arguments.size() - 1);
65+
boolean allOfMatcherMatches = ALL_OF_MATCHER.matches(ofExpression);
66+
if (!ASSERT_THAT_MATCHER.matches(mi) || !(ANY_OF_MATCHER.matches(ofExpression) || allOfMatcherMatches)) {
6367
return mi;
6468
}
6569

6670
// Skip anyOf(Iterable)
67-
List<Expression> anyOfArguments = ((J.MethodInvocation) anyOfExpression).getArguments();
71+
List<Expression> anyOfArguments = ((J.MethodInvocation) ofExpression).getArguments();
6872
if (TypeUtils.isAssignableTo("java.lang.Iterable", anyOfArguments.get(0).getType())) {
6973
return mi;
7074
}
@@ -82,15 +86,16 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation methodInvocat
8286
parameters.add(arguments.get(0));
8387
}
8488

85-
// .satisfiesAnyOf(...)
86-
template.append(".satisfiesAnyOf(\n");
89+
// .satisfiesAnyOf(...) or .satisfies(...)
90+
template.append(allOfMatcherMatches ? ".satisfies(\n" : ".satisfiesAnyOf(\n");
8791
template.append(anyOfArguments.stream()
8892
.map(arg -> "arg -> assertThat(arg, #{any()})")
8993
.collect(Collectors.joining(",\n")));
9094
parameters.addAll(anyOfArguments);
9195
template.append("\n);");
9296

9397
maybeRemoveImport("org.hamcrest.Matchers.anyOf");
98+
maybeRemoveImport("org.hamcrest.Matchers.allOf");
9499
maybeAddImport("org.assertj.core.api.Assertions", "assertThat");
95100
return JavaTemplate.builder(template.toString())
96101
.contextSensitive()

src/main/resources/META-INF/rewrite/hamcrest.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,11 @@ recipeList:
4242
# First remove wrapping `is(Matcher)` calls such that further recipes will match
4343
- org.openrewrite.java.testing.hamcrest.RemoveIsMatcher
4444

45-
# Then remove calls to `MatcherAssert.assertThat(String, Matcher)`
45+
# Then remove calls to `MatcherAssert.assertThat(String, is(Matcher))`
4646
- org.openrewrite.java.testing.hamcrest.HamcrestIsMatcherToAssertJ
4747

48-
# Flatten calls to `MatcherAssert.assertThat(.., allOf(..))` to easier to migrate individual statements
49-
- org.openrewrite.java.testing.hamcrest.FlattenAllOf
50-
51-
# Then remove calls to `MatcherAssert.assertThat(String, anyOf(..))`
52-
- org.openrewrite.java.testing.hamcrest.HamcrestAnyOfToAssertJ
48+
# Then remove calls to `MatcherAssert.assertThat(String, anyOf(..))` and `allOf(..)`
49+
- org.openrewrite.java.testing.hamcrest.HamcrestOfMatchersToAssertJ
5350

5451
# Then remove calls to `MatcherAssert.assertThat(String, boolean)`
5552
- org.openrewrite.java.testing.hamcrest.AssertThatBooleanToAssertJ

src/test/java/org/openrewrite/java/testing/hamcrest/FlattenAllOfTest.java

Lines changed: 0 additions & 155 deletions
This file was deleted.

0 commit comments

Comments
 (0)