From e151c10e76d86fbe38bc5c77064b8c91db6b650f Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Sat, 24 Oct 2026 14:48:21 +0200 Subject: [PATCH] Only convert Java sources in `UseAssertSame` In Kotlin (and Groovy) `==` calls `equals`, so turning `assertTrue(listOf(1) == listOf(1))` into `assertSame(listOf(1), listOf(1))` changed a passing equality check into a failing identity check. Kotlin tests reach this recipe through `JupiterBestPractices`, so restrict it to Java compilation units with a `JavaFileChecker` precondition. --- .../java/testing/junit5/UseAssertSame.java | 10 +++++--- .../testing/junit5/UseAssertSameTest.java | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/junit5/UseAssertSame.java b/src/main/java/org/openrewrite/java/testing/junit5/UseAssertSame.java index 9eb95e482..7f051d7b9 100644 --- a/src/main/java/org/openrewrite/java/testing/junit5/UseAssertSame.java +++ b/src/main/java/org/openrewrite/java/testing/junit5/UseAssertSame.java @@ -26,6 +26,7 @@ import org.openrewrite.java.tree.Expression; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.JavaType; +import org.openrewrite.staticanalysis.java.JavaFileChecker; import java.util.ArrayList; import java.util.List; @@ -106,10 +107,13 @@ private JavaType.Method assertSameMethodType(J.MethodInvocation mi, String newMe return assertTrue.withName(newMethodName); } }; + // Kotlin and Groovy `==` calls `equals`, so only Java's `==` means `assertSame` return Preconditions.check( - Preconditions.or( - new UsesMethod<>(ASSERT_TRUE_MATCHER), - new UsesMethod<>(ASSERT_FALSE_MATCHER)), + Preconditions.and( + new JavaFileChecker<>(), + Preconditions.or( + new UsesMethod<>(ASSERT_TRUE_MATCHER), + new UsesMethod<>(ASSERT_FALSE_MATCHER))), visitor); } diff --git a/src/test/java/org/openrewrite/java/testing/junit5/UseAssertSameTest.java b/src/test/java/org/openrewrite/java/testing/junit5/UseAssertSameTest.java index fb97e918c..50431fd8d 100644 --- a/src/test/java/org/openrewrite/java/testing/junit5/UseAssertSameTest.java +++ b/src/test/java/org/openrewrite/java/testing/junit5/UseAssertSameTest.java @@ -19,10 +19,12 @@ import org.openrewrite.DocumentExample; import org.openrewrite.InMemoryExecutionContext; import org.openrewrite.java.JavaParser; +import org.openrewrite.kotlin.KotlinParser; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; import static org.openrewrite.java.Assertions.java; +import static org.openrewrite.kotlin.Assertions.kotlin; class UseAssertSameTest implements RewriteTest { @Override @@ -256,6 +258,28 @@ public void test(Object obj) { ); } + @Test + void kotlinEqualityIsNotIdentity() { + rewriteRun( + spec -> spec.parser(KotlinParser.builder() + .classpathFromResources(new InMemoryExecutionContext(), "junit-jupiter-api-5")), + //language=kotlin + kotlin( + """ + import org.junit.jupiter.api.Assertions.assertTrue + import org.junit.jupiter.api.Test + + class MyTest { + @Test + fun test() { + assertTrue(listOf(1) == listOf(1)) + } + } + """ + ) + ); + } + @Test void onlyConvertsReferenceComparisons() { // Wrappers are reference types so == is reference equality (assertSame).