@@ -294,6 +294,50 @@ public void testVarargsInvocation03() {
294
294
evaluate ("aVarargsMethod3('foo', 'bar,baz')" , "foo-bar,baz" , String .class );
295
295
}
296
296
297
+ @ Test // gh-33013
298
+ void testVarargsWithObjectArrayType () {
299
+ // Calling 'public String formatObjectVarargs(String format, Object... args)' -> String.format(format, args)
300
+
301
+ // No var-args and no conversion necessary
302
+ evaluate ("formatObjectVarargs('x')" , "x" , String .class );
303
+
304
+ // No var-args but conversion necessary
305
+ evaluate ("formatObjectVarargs(9)" , "9" , String .class );
306
+
307
+ // No conversion necessary
308
+ evaluate ("formatObjectVarargs('x -> %s', '')" , "x -> " , String .class );
309
+ evaluate ("formatObjectVarargs('x -> %s', ' ')" , "x -> " , String .class );
310
+ evaluate ("formatObjectVarargs('x -> %s', 'a')" , "x -> a" , String .class );
311
+ evaluate ("formatObjectVarargs('x -> %s %s %s', 'a', 'b', 'c')" , "x -> a b c" , String .class );
312
+ evaluate ("formatObjectVarargs('x -> %s', new Object[]{''})" , "x -> " , String .class );
313
+ evaluate ("formatObjectVarargs('x -> %s', new Object[]{' '})" , "x -> " , String .class );
314
+ evaluate ("formatObjectVarargs('x -> %s', new Object[]{'a'})" , "x -> a" , String .class );
315
+ evaluate ("formatObjectVarargs('x -> %s %s %s', new Object[]{'a', 'b', 'c'})" , "x -> a b c" , String .class );
316
+
317
+ // The following assertions were cherry-picked from 6.1.x; however, they are expected
318
+ // to fail on 6.0.x and 5.3.x, since gh-32704 (Support varargs invocations in SpEL for
319
+ // varargs array subtype) was not backported.
320
+ // evaluate("formatObjectVarargs('x -> %s', new String[]{''})", "x -> ", String.class);
321
+ // evaluate("formatObjectVarargs('x -> %s', new String[]{' '})", "x -> ", String.class);
322
+ // evaluate("formatObjectVarargs('x -> %s', new String[]{'a'})", "x -> a", String.class);
323
+ // evaluate("formatObjectVarargs('x -> %s %s %s', new String[]{'a', 'b', 'c'})", "x -> a b c", String.class);
324
+
325
+ // Conversion necessary
326
+ evaluate ("formatObjectVarargs('x -> %s %s', 2, 3)" , "x -> 2 3" , String .class );
327
+ evaluate ("formatObjectVarargs('x -> %s %s', 'a', 3.0d)" , "x -> a 3.0" , String .class );
328
+
329
+ // Individual string contains a comma with multiple varargs arguments
330
+ evaluate ("formatObjectVarargs('foo -> %s %s', ',', 'baz')" , "foo -> , baz" , String .class );
331
+ evaluate ("formatObjectVarargs('foo -> %s %s', 'bar', ',baz')" , "foo -> bar ,baz" , String .class );
332
+ evaluate ("formatObjectVarargs('foo -> %s %s', 'bar,', 'baz')" , "foo -> bar, baz" , String .class );
333
+
334
+ // Individual string contains a comma with single varargs argument.
335
+ evaluate ("formatObjectVarargs('foo -> %s', ',')" , "foo -> ," , String .class );
336
+ evaluate ("formatObjectVarargs('foo -> %s', ',bar')" , "foo -> ,bar" , String .class );
337
+ evaluate ("formatObjectVarargs('foo -> %s', 'bar,')" , "foo -> bar," , String .class );
338
+ evaluate ("formatObjectVarargs('foo -> %s', 'bar,baz')" , "foo -> bar,baz" , String .class );
339
+ }
340
+
297
341
@ Test
298
342
public void testVarargsOptionalInvocation () {
299
343
// Calling 'public String optionalVarargsMethod(Optional<String>... values)'
0 commit comments