From f8509884700811a69fd5b4ded71cd3ed078dc2ed Mon Sep 17 00:00:00 2001 From: "Jean Pierre Mandujano G." Date: Fri, 4 Sep 2026 03:32:47 -0500 Subject: [PATCH] Add junit-jupiter when only junit.framework.TestCase is used --- .../junit5/AddJupiterDependencies.java | 19 ++++- .../junit5/AddJupiterDependenciesTest.java | 71 +++++++++++++++++++ .../testing/junit5/JUnit5MigrationTest.java | 52 ++++++++++++++ 3 files changed, 140 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/testing/junit5/AddJupiterDependencies.java b/src/main/java/org/openrewrite/java/testing/junit5/AddJupiterDependencies.java index f58831036..3c8573329 100644 --- a/src/main/java/org/openrewrite/java/testing/junit5/AddJupiterDependencies.java +++ b/src/main/java/org/openrewrite/java/testing/junit5/AddJupiterDependencies.java @@ -47,7 +47,18 @@ public AddDependency.Accumulator getInitialValue(ExecutionContext ctx) { @Override public TreeVisitor getScanner(AddDependency.Accumulator acc) { - return addJupiterDependency().getScanner(acc); + // The scanner sees the sources before `MigrateJUnitTestCase` rewrites them, so a + // codebase of `junit.framework.TestCase` subclasses uses no `org.junit` type yet. + TreeVisitor usesJUnit4 = addJupiterDependency("org.junit..*").getScanner(acc); + TreeVisitor usesJUnit3 = addJupiterDependency("junit.framework..*").getScanner(acc); + return new TreeVisitor() { + @Override + public @Nullable Tree visit(@Nullable Tree tree, ExecutionContext ctx) { + usesJUnit4.visit(tree, ctx); + usesJUnit3.visit(tree, ctx); + return tree; + } + }; } @Override @@ -73,8 +84,12 @@ public TreeVisitor getVisitor(AddDependency.Accumulator acc } private static AddDependency addJupiterDependency() { + return addJupiterDependency("org.junit..*"); + } + + private static AddDependency addJupiterDependency(String onlyIfUsing) { return new AddDependency("org.junit.jupiter", "junit-jupiter", "5.x", null, - "org.junit..*", null, null, null, null, null, + onlyIfUsing, null, null, null, null, null, null, null, null, null); } diff --git a/src/test/java/org/openrewrite/java/testing/junit5/AddJupiterDependenciesTest.java b/src/test/java/org/openrewrite/java/testing/junit5/AddJupiterDependenciesTest.java index 7032ddce9..626901739 100644 --- a/src/test/java/org/openrewrite/java/testing/junit5/AddJupiterDependenciesTest.java +++ b/src/test/java/org/openrewrite/java/testing/junit5/AddJupiterDependenciesTest.java @@ -99,4 +99,75 @@ void addToCompileScope() { ) ); } + + @Test + void doNotAddWithoutJUnit() { + rewriteRun( + mavenProject("project", + srcTestJava( + //language=java + java( + """ + public class NotATest { + public void addition() { + assert 4 == 2 + 2; + } + } + """ + ) + ), + pomXml( + //language=xml + """ + + 4.0.0 + org.example + project + 0.0.1 + + """ + ) + ) + ); + } + + @Issue("https://github.com/openrewrite/rewrite-testing-frameworks/issues/1113") + @Test + void addWhenOnlyJUnit3TestCaseIsUsed() { + rewriteRun( + spec -> spec.parser(JavaParser.fromJavaVersion().classpathFromResources(new InMemoryExecutionContext(), "junit-4")), + mavenProject("project", + srcTestJava( + //language=java + java( + """ + import junit.framework.TestCase; + + public class LegacyTest extends TestCase { + public void testAddition() { + assertEquals(4, 2 + 2); + } + } + """ + ) + ), + pomXml( + //language=xml + """ + + 4.0.0 + org.example + project + 0.0.1 + + """, + spec -> spec.after(pom -> { + return assertThat(pom) + .contains("junit-jupiter") + .contains("test").actual(); + }) + ) + ) + ); + } } diff --git a/src/test/java/org/openrewrite/java/testing/junit5/JUnit5MigrationTest.java b/src/test/java/org/openrewrite/java/testing/junit5/JUnit5MigrationTest.java index 879d967dd..1cedebcc5 100644 --- a/src/test/java/org/openrewrite/java/testing/junit5/JUnit5MigrationTest.java +++ b/src/test/java/org/openrewrite/java/testing/junit5/JUnit5MigrationTest.java @@ -228,6 +228,58 @@ void excludeJunit4Dependency() { ); } + @Issue("https://github.com/openrewrite/rewrite-testing-frameworks/issues/1113") + @Test + void addJupiterWhenOnlyTestCaseIsUsed() { + rewriteRun( + mavenProject("project", + srcTestJava( + //language=java + java( + """ + import junit.framework.TestCase; + + public class LegacyTest extends TestCase { + public void testAddition() { + assertEquals(4, 2 + 2); + } + } + """, + spec -> spec.after(src -> { + return assertThat(src) + .contains("import org.junit.jupiter.api.Test;") + .doesNotContain("junit.framework").actual(); + }) + ) + ), + pomXml( + //language=xml + """ + + 4.0.0 + org.example + project + 0.0.1 + + + junit + junit + 4.13.2 + test + + + + """, + spec -> spec.after(pom -> { + return assertThat(pom) + .contains("junit-jupiter") + .doesNotContain("junit").actual(); + }) + ) + ) + ); + } + @Issue("https://github.com/openrewrite/rewrite-testing-frameworks/issues/429") @Issue("https://github.com/openrewrite/rewrite-testing-frameworks/issues/850") @Test