Skip to content

Commit dae77f2

Browse files
Fix HamcrestMatcherToAssertJ when applied to arrays (#366)
Fixes: #364
1 parent 4c4c5fd commit dae77f2

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,16 @@ private J.MethodInvocation handleThreeArgumentCase(J.MethodInvocation mi, Execut
143143
}
144144

145145
private String typeToIndicator(JavaType type) {
146-
String str = type instanceof JavaType.Primitive || type.toString().startsWith("java.") ?
147-
type.toString().replaceAll("<.*>", "") : "java.lang.Object";
148-
return String.format("#{any(%s)}", str);
146+
if (type instanceof JavaType.Array) {
147+
type = ((JavaType.Array) type).getElemType();
148+
String str = type instanceof JavaType.Primitive || type.toString().startsWith("java.") ?
149+
type.toString().replaceAll("<.*>", "") : "java.lang.Object";
150+
return String.format("#{anyArray(%s)}", str);
151+
} else {
152+
String str = type instanceof JavaType.Primitive || type.toString().startsWith("java.") ?
153+
type.toString().replaceAll("<.*>", "") : "java.lang.Object";
154+
return String.format("#{any(%s)}", str);
155+
}
149156
}
150157
}
151158
}

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,49 @@ void test() {
323323
""")
324324
);
325325
}
326+
327+
@SuppressWarnings("DataFlowIssue")
328+
@Test
329+
void containsInAnyOrderWithArray() {
330+
rewriteRun(
331+
spec -> spec.recipe(new HamcrestMatcherToAssertJ("containsInAnyOrder", "containsExactlyInAnyOrder")),
332+
//language=java
333+
java("""
334+
import org.junit.jupiter.api.Test;
335+
336+
import java.util.ArrayList;
337+
import java.util.List;
338+
import static org.hamcrest.MatcherAssert.assertThat;
339+
import static org.hamcrest.Matchers.containsInAnyOrder;
340+
341+
class ATest {
342+
@Test
343+
void test() {
344+
List<String> list = new ArrayList<>();
345+
List<String> states = null;
346+
assertThat(list, containsInAnyOrder(states.toArray()));
347+
}
348+
}
349+
""",
350+
"""
351+
import org.junit.jupiter.api.Test;
352+
353+
import java.util.ArrayList;
354+
import java.util.List;
355+
356+
import static org.assertj.core.api.Assertions.assertThat;
357+
358+
class ATest {
359+
@Test
360+
void test() {
361+
List<String> list = new ArrayList<>();
362+
List<String> states = null;
363+
assertThat(list).containsExactlyInAnyOrder(states.toArray());
364+
}
365+
}
366+
""")
367+
);
368+
}
326369
}
327370

328371
@Nested

0 commit comments

Comments
 (0)