Skip to content

Commit c42d091

Browse files
author
Tim te Beek
authored
fix: Avoid reserved keywords when stripping prefix from test methods (#244)
1 parent 37fb56a commit c42d091

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

src/main/java/org/openrewrite/java/testing/cleanup/RemoveTestPrefix.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package org.openrewrite.java.testing.cleanup;
1717

1818
import java.time.Duration;
19+
import java.util.Arrays;
20+
import java.util.List;
1921

2022
import org.openrewrite.ExecutionContext;
2123
import org.openrewrite.Recipe;
@@ -32,6 +34,13 @@
3234

3335
public class RemoveTestPrefix extends Recipe {
3436

37+
private static final List<String> RESERVED_KEYWORDS = Arrays.asList("abstract", "continue", "for", "new", "switch",
38+
"assert", "default", "if", "package", "synchronized", "boolean", "do", "goto", "private", "this", "break",
39+
"double", "implements", "protected", "throw", "byte", "else", "import", "public", "throws", "case", "enum",
40+
"instanceof", "return", "transient", "catch", "extends", "int", "short", "try", "char", "final",
41+
"interface", "static", "void", "class", "finally", "long", "strictfp", "volatile", "const", "float",
42+
"native", "super", "while", "null");
43+
3544
@Override
3645
public String getDisplayName() {
3746
return "Remove `test` prefix from JUnit5 tests";
@@ -48,6 +57,7 @@ public String getDescription() {
4857
@Override
4958
public J visitJavaSourceFile(JavaSourceFile cu, ExecutionContext executionContext) {
5059
doAfterVisit(new UsesType<>("org.junit.jupiter.api.Test"));
60+
doAfterVisit(new UsesType<>("org.junit.jupiter.api.TestTemplate"));
5161
doAfterVisit(new UsesType<>("org.junit.jupiter.api.RepeatedTest"));
5262
doAfterVisit(new UsesType<>("org.junit.jupiter.params.ParameterizedTest"));
5363
doAfterVisit(new UsesType<>("org.junit.jupiter.api.TestFactory"));
@@ -78,6 +88,9 @@ public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration method, Ex
7888
&& Boolean.FALSE.equals(TypeUtils.isOverride(method.getMethodType()))
7989
&& hasJUnit5MethodAnnotation(m)) {
8090
String newMethodName = Character.toLowerCase(simpleName.charAt(4)) + simpleName.substring(5);
91+
if (RESERVED_KEYWORDS.contains(newMethodName)) {
92+
return m;
93+
}
8194
JavaType.Method type = m.getMethodType();
8295
if (type != null) {
8396
type = type.withName(newMethodName);
@@ -92,6 +105,7 @@ && hasJUnit5MethodAnnotation(m)) {
92105
private static boolean hasJUnit5MethodAnnotation(MethodDeclaration method) {
93106
for (J.Annotation a : method.getLeadingAnnotations()) {
94107
if (TypeUtils.isOfClassType(a.getType(), "org.junit.jupiter.api.Test")
108+
|| TypeUtils.isOfClassType(a.getType(), "org.junit.jupiter.api.TestTemplate")
95109
|| TypeUtils.isOfClassType(a.getType(), "org.junit.jupiter.api.RepeatedTest")
96110
|| TypeUtils.isOfClassType(a.getType(), "org.junit.jupiter.params.ParameterizedTest")
97111
|| TypeUtils.isOfClassType(a.getType(), "org.junit.jupiter.api.TestFactory")) {

src/test/kotlin/org/openrewrite/java/testing/cleanup/RemoveTestPrefixTest.kt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,45 @@ class RemoveTestPrefixTest : JavaRecipeTest {
126126
"""
127127
)
128128

129+
@Test
130+
fun ignoreKeyword() = assertUnchanged(
131+
before = """
132+
import org.junit.jupiter.api.Test;
133+
134+
class ATest {
135+
@Test
136+
void testSwitch() {
137+
}
138+
}
139+
"""
140+
)
141+
142+
@Test
143+
fun ignoreNull() = assertUnchanged(
144+
before = """
145+
import org.junit.jupiter.api.Test;
146+
147+
class ATest {
148+
@Test
149+
void testNull() {
150+
}
151+
}
152+
"""
153+
)
154+
155+
@Test
156+
fun ignoreUnderscore() = assertUnchanged(
157+
before = """
158+
import org.junit.jupiter.api.Test;
159+
160+
class ATest {
161+
@Test
162+
void test_() {
163+
}
164+
}
165+
"""
166+
)
167+
129168
@Test
130169
fun ignoreNotAnnotatedMethods() = assertUnchanged(
131170
before = """

0 commit comments

Comments
 (0)