|
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