Skip to content

Commit e3d13cf

Browse files
sormurasmarcphilipp
authored andcommitted
Fix regression when creating human-readable test names
Prior to this commit Arrays.copyOf() was used without specifying the resulting array type in order to create a human-readable names for parameterized tests. Now, type `Object[]` is passed as an argument to ensure the resulting array may contain any valid instance, here an instance of `String`. Fixes #1836
1 parent 30126c5 commit e3d13cf

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

junit-jupiter-params/src/main/java/org/junit/jupiter/params/ParameterizedTestNameFormatter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ private String prepareMessageFormatPattern(int invocationIndex, Object[] argumen
7373

7474
private Object[] makeReadable(MessageFormat format, Object[] arguments) {
7575
Format[] formats = format.getFormatsByArgumentIndex();
76-
Object[] result = Arrays.copyOf(arguments, Math.min(arguments.length, formats.length));
76+
Object[] result = Arrays.copyOf(arguments, Math.min(arguments.length, formats.length), Object[].class);
7777
for (int i = 0; i < result.length; i++) {
7878
if (formats[i] == null) {
7979
result[i] = StringUtils.nullSafeToString(arguments[i]);

junit-jupiter-params/src/test/java/org/junit/jupiter/params/ParameterizedTestNameFormatterTests.java

+8
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ void formatDoesNotAlterArgumentsArray() {
115115
assertArrayEquals(expected, actual);
116116
}
117117

118+
@Test
119+
void formatDoesNotRaiseAnArrayStoreException() {
120+
ParameterizedTestNameFormatter formatter = new ParameterizedTestNameFormatter("{0} -> {1}", "enigma");
121+
122+
Object[] arguments = new Number[] { 1, 2 };
123+
assertEquals("1 -> 2", formatter.format(1, arguments));
124+
}
125+
118126
@Test
119127
void throwsReadableExceptionForInvalidPattern() {
120128
ParameterizedTestNameFormatter formatter = new ParameterizedTestNameFormatter("{index", "enigma");

junit-jupiter-params/src/test/kotlin/org/junit/jupiter/params/aggregator/DisplayNameTests.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ object DisplayNameTests {
2222
fun data() = arrayOf(
2323
arrayOf("A", 1),
2424
arrayOf("B", 2),
25-
arrayOf("C", 3)
25+
arrayOf("C", 3),
26+
arrayOf("", 4), // empty is okay
27+
arrayOf(null, 5) // null was the problem
2628
)
2729

2830
@ParameterizedTest
2931
@MethodSource("data")
30-
fun test(char: String, number: Int, info: TestInfo) {
32+
fun test(char: String?, number: Int, info: TestInfo) {
3133
assertEquals("[$number] $char, $number", info.displayName)
3234
}
3335
}

0 commit comments

Comments
 (0)