@@ -234,26 +234,33 @@ public void testAddingMethodResolvers() {
234
234
235
235
@ Test
236
236
public void testVarargsInvocation01 () {
237
- // Calling 'public int aVarargsMethod(String... strings)' - returns number of arguments
238
- evaluate ("aVarargsMethod('a','b','c')" , 3 , Integer .class );
239
- evaluate ("aVarargsMethod('a')" , 1 , Integer .class );
240
- evaluate ("aVarargsMethod()" , 0 , Integer .class );
241
- evaluate ("aVarargsMethod(1,2,3)" , 3 , Integer .class ); // all need converting to strings
242
- evaluate ("aVarargsMethod(1)" , 1 , Integer .class ); // needs string conversion
243
- evaluate ("aVarargsMethod(1,'a',3.0d)" , 3 , Integer .class ); // first and last need conversion
244
- evaluate ("aVarargsMethod(new String[]{'a','b','c'})" , 3 , Integer .class );
237
+ // Calling 'public String aVarargsMethod(String... strings)'
238
+ evaluate ("aVarargsMethod('a','b','c')" , "[a, b, c]" , String .class );
239
+ evaluate ("aVarargsMethod('a')" , "[a]" , String .class );
240
+ evaluate ("aVarargsMethod()" , "[]" , String .class );
241
+ evaluate ("aVarargsMethod(1,2,3)" , "[1, 2, 3]" , String .class ); // all need converting to strings
242
+ evaluate ("aVarargsMethod(1)" , "[1]" , String .class ); // needs string conversion
243
+ evaluate ("aVarargsMethod(1,'a',3.0d)" , "[1, a, 3.0]" , String .class ); // first and last need conversion
244
+ evaluate ("aVarargsMethod(new String[]{'a','b','c'})" , "[a, b, c]" , String .class );
245
+ evaluate ("aVarargsMethod(new String[]{})" , "[]" , String .class );
246
+ evaluate ("aVarargsMethod(null)" , "[null]" , String .class );
247
+ evaluate ("aVarargsMethod(null,'a')" , "[null, a]" , String .class );
248
+ evaluate ("aVarargsMethod('a',null,'b')" , "[a, null, b]" , String .class );
245
249
}
246
250
247
251
@ Test
248
252
public void testVarargsInvocation02 () {
249
- // Calling 'public int aVarargsMethod2(int i, String... strings)' - returns int + length_of_strings
250
- evaluate ("aVarargsMethod2(5,'a','b','c')" , 8 , Integer .class );
251
- evaluate ("aVarargsMethod2(2,'a')" , 3 , Integer .class );
252
- evaluate ("aVarargsMethod2(4)" , 4 , Integer .class );
253
- evaluate ("aVarargsMethod2(8,2,3)" , 10 , Integer .class );
254
- evaluate ("aVarargsMethod2(9)" , 9 , Integer .class );
255
- evaluate ("aVarargsMethod2(2,'a',3.0d)" , 4 , Integer .class );
256
- evaluate ("aVarargsMethod2(8,new String[]{'a','b','c'})" , 11 , Integer .class );
253
+ // Calling 'public String aVarargsMethod2(int i, String... strings)'
254
+ evaluate ("aVarargsMethod2(5,'a','b','c')" , "5-[a, b, c]" , String .class );
255
+ evaluate ("aVarargsMethod2(2,'a')" , "2-[a]" , String .class );
256
+ evaluate ("aVarargsMethod2(4)" , "4-[]" , String .class );
257
+ evaluate ("aVarargsMethod2(8,2,3)" , "8-[2, 3]" , String .class );
258
+ evaluate ("aVarargsMethod2(2,'a',3.0d)" , "2-[a, 3.0]" , String .class );
259
+ evaluate ("aVarargsMethod2(8,new String[]{'a','b','c'})" , "8-[a, b, c]" , String .class );
260
+ evaluate ("aVarargsMethod2(8,new String[]{})" , "8-[]" , String .class );
261
+ evaluate ("aVarargsMethod2(8,null)" , "8-[null]" , String .class );
262
+ evaluate ("aVarargsMethod2(8,null,'a')" , "8-[null, a]" , String .class );
263
+ evaluate ("aVarargsMethod2(8,'a',null,'b')" , "8-[a, null, b]" , String .class );
257
264
}
258
265
259
266
@ Test
@@ -284,6 +291,25 @@ public void testVarargsInvocation03() {
284
291
evaluate ("aVarargsMethod3('foo', 'bar,baz')" , "foo-bar,baz" , String .class );
285
292
}
286
293
294
+ @ Test
295
+ public void testVarargsOptionalInvocation () {
296
+ // Calling 'public String optionalVarargsMethod(Optional<String>... values)'
297
+ evaluate ("optionalVarargsMethod()" , "[]" , String .class );
298
+ evaluate ("optionalVarargsMethod(new String[0])" , "[]" , String .class );
299
+ evaluate ("optionalVarargsMethod('a')" , "[Optional[a]]" , String .class );
300
+ evaluate ("optionalVarargsMethod('a','b','c')" , "[Optional[a], Optional[b], Optional[c]]" , String .class );
301
+ evaluate ("optionalVarargsMethod(9)" , "[Optional[9]]" , String .class );
302
+ evaluate ("optionalVarargsMethod(2,3)" , "[Optional[2], Optional[3]]" , String .class );
303
+ evaluate ("optionalVarargsMethod('a',3.0d)" , "[Optional[a], Optional[3.0]]" , String .class );
304
+ evaluate ("optionalVarargsMethod(new String[]{'a','b','c'})" , "[Optional[a], Optional[b], Optional[c]]" , String .class );
305
+ // The following should actually evaluate to [Optional.empty] instead of [null],
306
+ // but ReflectionHelper.convertArguments() currently does not provide explicit
307
+ // Optional support for a single argument passed to a varargs array.
308
+ evaluate ("optionalVarargsMethod(null)" , "[null]" , String .class );
309
+ evaluate ("optionalVarargsMethod(null,'a')" , "[Optional.empty, Optional[a]]" , String .class );
310
+ evaluate ("optionalVarargsMethod('a',null,'b')" , "[Optional[a], Optional.empty, Optional[b]]" , String .class );
311
+ }
312
+
287
313
@ Test
288
314
public void testInvocationOnNullContextObject () {
289
315
evaluateAndCheckError ("null.toString()" ,SpelMessage .METHOD_CALL_ON_NULL_OBJECT_NOT_ALLOWED );
0 commit comments