|
1 | 1 | /* |
2 | | - * Copyright 2002-2019 the original author or authors. |
| 2 | + * Copyright 2002-2021 the original author or authors. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
|
46 | 46 | * |
47 | 47 | * @author Andy Clement |
48 | 48 | * @author Phillip Webb |
| 49 | + * @author Sam Brannen |
49 | 50 | */ |
50 | 51 | public class MethodInvocationTests extends AbstractExpressionTests { |
51 | 52 |
|
@@ -232,26 +233,54 @@ public void testAddingMethodResolvers() { |
232 | 233 |
|
233 | 234 | @Test |
234 | 235 | public void testVarargsInvocation01() { |
235 | | - // Calling 'public int aVarargsMethod(String... strings)' |
236 | | - //evaluate("aVarargsMethod('a','b','c')", 3, Integer.class); |
237 | | - //evaluate("aVarargsMethod('a')", 1, Integer.class); |
238 | | - evaluate("aVarargsMethod()", 0, Integer.class); |
239 | | - evaluate("aVarargsMethod(1,2,3)", 3, Integer.class); // all need converting to strings |
240 | | - evaluate("aVarargsMethod(1)", 1, Integer.class); // needs string conversion |
241 | | - evaluate("aVarargsMethod(1,'a',3.0d)", 3, Integer.class); // first and last need conversion |
242 | | - // evaluate("aVarargsMethod(new String[]{'a','b','c'})", 3, Integer.class); |
| 236 | + // Calling 'public String aVarargsMethod(String... strings)' |
| 237 | + evaluate("aVarargsMethod('a','b','c')", "[a, b, c]", String.class); |
| 238 | + evaluate("aVarargsMethod('a')", "[a]", String.class); |
| 239 | + evaluate("aVarargsMethod()", "[]", String.class); |
| 240 | + evaluate("aVarargsMethod(1,2,3)", "[1, 2, 3]", String.class); // all need converting to strings |
| 241 | + evaluate("aVarargsMethod(1)", "[1]", String.class); // needs string conversion |
| 242 | + evaluate("aVarargsMethod(1,'a',3.0d)", "[1, a, 3.0]", String.class); // first and last need conversion |
| 243 | + evaluate("aVarargsMethod(new String[]{'a','b','c'})", "[a, b, c]", String.class); |
| 244 | + evaluate("aVarargsMethod(new String[]{})", "[]", String.class); |
| 245 | + evaluate("aVarargsMethod(null)", "[null]", String.class); |
| 246 | + evaluate("aVarargsMethod(null,'a')", "[null, a]", String.class); |
| 247 | + evaluate("aVarargsMethod('a',null,'b')", "[a, null, b]", String.class); |
243 | 248 | } |
244 | 249 |
|
245 | 250 | @Test |
246 | 251 | public void testVarargsInvocation02() { |
247 | | - // Calling 'public int aVarargsMethod2(int i, String... strings)' - returns int+length_of_strings |
248 | | - evaluate("aVarargsMethod2(5,'a','b','c')", 8, Integer.class); |
249 | | - evaluate("aVarargsMethod2(2,'a')", 3, Integer.class); |
250 | | - evaluate("aVarargsMethod2(4)", 4, Integer.class); |
251 | | - evaluate("aVarargsMethod2(8,2,3)", 10, Integer.class); |
252 | | - evaluate("aVarargsMethod2(9)", 9, Integer.class); |
253 | | - evaluate("aVarargsMethod2(2,'a',3.0d)", 4, Integer.class); |
254 | | - // evaluate("aVarargsMethod2(8,new String[]{'a','b','c'})", 11, Integer.class); |
| 252 | + // Calling 'public String aVarargsMethod2(int i, String... strings)' |
| 253 | + evaluate("aVarargsMethod2(5,'a','b','c')", "5-[a, b, c]", String.class); |
| 254 | + evaluate("aVarargsMethod2(2,'a')", "2-[a]", String.class); |
| 255 | + evaluate("aVarargsMethod2(4)", "4-[]", String.class); |
| 256 | + evaluate("aVarargsMethod2(8,2,3)", "8-[2, 3]", String.class); |
| 257 | + evaluate("aVarargsMethod2(2,'a',3.0d)", "2-[a, 3.0]", String.class); |
| 258 | + evaluate("aVarargsMethod2(8,new String[]{'a','b','c'})", "8-[a, b, c]", String.class); |
| 259 | + evaluate("aVarargsMethod2(8,new String[]{})", "8-[]", String.class); |
| 260 | + evaluate("aVarargsMethod2(8,null)", "8-[null]", String.class); |
| 261 | + evaluate("aVarargsMethod2(8,null,'a')", "8-[null, a]", String.class); |
| 262 | + evaluate("aVarargsMethod2(8,'a',null,'b')", "8-[a, null, b]", String.class); |
| 263 | + } |
| 264 | + |
| 265 | + @Test |
| 266 | + public void testVarargsOptionalInvocation() { |
| 267 | + // Calling 'public String optionalVarargsMethod(Optional<String>... values)' |
| 268 | + evaluate("optionalVarargsMethod()", "[]", String.class); |
| 269 | + evaluate("optionalVarargsMethod(new String[0])", "[]", String.class); |
| 270 | + evaluate("optionalVarargsMethod('a')", "[Optional[a]]", String.class); |
| 271 | + evaluate("optionalVarargsMethod('a','b','c')", "[Optional[a], Optional[b], Optional[c]]", String.class); |
| 272 | + evaluate("optionalVarargsMethod(9)", "[Optional[9]]", String.class); |
| 273 | + evaluate("optionalVarargsMethod(2,3)", "[Optional[2], Optional[3]]", String.class); |
| 274 | + evaluate("optionalVarargsMethod('a',3.0d)", "[Optional[a], Optional[3.0]]", String.class); |
| 275 | + evaluate("optionalVarargsMethod(new String[]{'a','b','c'})", "[Optional[a], Optional[b], Optional[c]]", String.class); |
| 276 | + // The following should actually evaluate to [Optional.empty] instead of [null], |
| 277 | + // but ReflectionHelper.convertArguments() passes the array type instead of |
| 278 | + // the array's component type as the target type to the ConversionService, and |
| 279 | + // GenericConversionService.convertNullSource() therefore fails to convert null |
| 280 | + // to Optional.empty(). |
| 281 | + evaluate("optionalVarargsMethod(null)", "[null]", String.class); |
| 282 | + evaluate("optionalVarargsMethod(null,'a')", "[Optional.empty, Optional[a]]", String.class); |
| 283 | + evaluate("optionalVarargsMethod('a',null,'b')", "[Optional[a], Optional.empty, Optional[b]]", String.class); |
255 | 284 | } |
256 | 285 |
|
257 | 286 | @Test |
|
0 commit comments