From 76fe8e94ade0a4ad0f8ba4ae2fd5ee22ca766164 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Fri, 8 Dec 2023 22:40:37 +0100 Subject: [PATCH] Also swap assertNull and assertNotNull argument order (#440) * Also swap assertNull and assertNotNull argument order * Use wildcard * Fix argument matcher --- .../cleanup/AssertionsArgumentOrder.java | 9 +++- .../cleanup/AssertionsArgumentOrderTest.java | 43 ++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrder.java b/src/main/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrder.java index 0f7f0adaf..5ab08f4ef 100644 --- a/src/main/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrder.java +++ b/src/main/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrder.java @@ -42,6 +42,9 @@ public class AssertionsArgumentOrder extends Recipe { }; private static final MethodMatcher jupiterAssertIterableEqualsMatcher = new MethodMatcher("org.junit.jupiter.api.Assertions assertIterableEquals(..)"); + // `assertNull("message", result())` should be `assertNull(result(), "message")` + private static final MethodMatcher jupiterAssertNullMatcher = new MethodMatcher("org.junit.jupiter.api.Assertions assert*Null(Object, String)"); + private static final MethodMatcher[] testNgMatcher = new MethodMatcher[]{ new MethodMatcher("org.testng.Assert assertSame(..)"), new MethodMatcher("org.testng.Assert assertNotSame(..)"), @@ -54,6 +57,7 @@ public class AssertionsArgumentOrder extends Recipe { static { List matchers = new ArrayList<>(Arrays.asList(jupiterAssertionMatchers)); matchers.add(jupiterAssertIterableEqualsMatcher); + matchers.add(jupiterAssertNullMatcher); matchers.addAll(Arrays.asList(testNgMatcher)); //noinspection unchecked precondition = Preconditions.or(matchers.stream().map(UsesMethod::new).toArray(TreeVisitor[]::new)); @@ -117,6 +121,9 @@ public J.MethodInvocation visitMethodInvocation(J.MethodInvocation method, Execu } private boolean isCorrectOrder(Expression expected, Expression actual, J.MethodInvocation mi) { + if (jupiterAssertNullMatcher.matches(mi)) { + return isConstant(actual, mi) || !isConstant(expected, mi); + } return isConstant(expected, mi) || !isConstant(actual, mi); } @@ -156,7 +163,7 @@ private boolean isJupiterAssertion(J.MethodInvocation mi) { return true; } } - return jupiterAssertIterableEqualsMatcher.matches(mi); + return jupiterAssertIterableEqualsMatcher.matches(mi) || jupiterAssertNullMatcher.matches(mi); } private boolean isTestNgAssertion(J.MethodInvocation mi) { diff --git a/src/test/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrderTest.java b/src/test/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrderTest.java index d32c138c6..cb57ab304 100644 --- a/src/test/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrderTest.java +++ b/src/test/java/org/openrewrite/java/testing/cleanup/AssertionsArgumentOrderTest.java @@ -25,7 +25,7 @@ import static org.openrewrite.java.Assertions.java; -public class AssertionsArgumentOrderTest implements RewriteTest { +class AssertionsArgumentOrderTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { spec.recipe(new AssertionsArgumentOrder()) @@ -71,6 +71,47 @@ String result() { ); } + @Test + void junitAssertNullAndAssertNotNull() { + rewriteRun( + //language=java + java( + """ + import static org.junit.jupiter.api.Assertions.assertNotNull; + import static org.junit.jupiter.api.Assertions.assertNull; + + class MyTest { + void someMethod() { + assertNull(result(), "message"); + assertNull("message", result()); + assertNotNull(result(), "message"); + assertNotNull("message", result()); + } + String result() { + return "result"; + } + } + """, + """ + import static org.junit.jupiter.api.Assertions.assertNotNull; + import static org.junit.jupiter.api.Assertions.assertNull; + + class MyTest { + void someMethod() { + assertNull(result(), "message"); + assertNull(result(), "message"); + assertNotNull(result(), "message"); + assertNotNull(result(), "message"); + } + String result() { + return "result"; + } + } + """ + ) + ); + } + @Test void jupiterAssertSameNotSame() { rewriteRun(