|
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 |
|
@@ -233,26 +234,54 @@ public void testAddingMethodResolvers() {
|
233 | 234 |
|
234 | 235 | @Test
|
235 | 236 | public void testVarargsInvocation01() {
|
236 |
| - // Calling 'public int aVarargsMethod(String... strings)' |
237 |
| - //evaluate("aVarargsMethod('a','b','c')", 3, Integer.class); |
238 |
| - //evaluate("aVarargsMethod('a')", 1, Integer.class); |
| 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); |
239 | 240 | evaluate("aVarargsMethod()", 0, Integer.class);
|
240 | 241 | evaluate("aVarargsMethod(1,2,3)", 3, Integer.class); // all need converting to strings
|
241 | 242 | evaluate("aVarargsMethod(1)", 1, Integer.class); // needs string conversion
|
242 | 243 | evaluate("aVarargsMethod(1,'a',3.0d)", 3, Integer.class); // first and last need conversion
|
243 |
| - // evaluate("aVarargsMethod(new String[]{'a','b','c'})", 3, Integer.class); |
| 244 | + evaluate("aVarargsMethod(new String[]{'a','b','c'})", 3, Integer.class); |
244 | 245 | }
|
245 | 246 |
|
246 | 247 | @Test
|
247 | 248 | public void testVarargsInvocation02() {
|
248 |
| - // Calling 'public int aVarargsMethod2(int i, String... strings)' - returns int+length_of_strings |
| 249 | + // Calling 'public int aVarargsMethod2(int i, String... strings)' - returns int + length_of_strings |
249 | 250 | evaluate("aVarargsMethod2(5,'a','b','c')", 8, Integer.class);
|
250 | 251 | evaluate("aVarargsMethod2(2,'a')", 3, Integer.class);
|
251 | 252 | evaluate("aVarargsMethod2(4)", 4, Integer.class);
|
252 | 253 | evaluate("aVarargsMethod2(8,2,3)", 10, Integer.class);
|
253 | 254 | evaluate("aVarargsMethod2(9)", 9, Integer.class);
|
254 | 255 | evaluate("aVarargsMethod2(2,'a',3.0d)", 4, Integer.class);
|
255 |
| - // evaluate("aVarargsMethod2(8,new String[]{'a','b','c'})", 11, Integer.class); |
| 256 | + evaluate("aVarargsMethod2(8,new String[]{'a','b','c'})", 11, Integer.class); |
| 257 | + } |
| 258 | + |
| 259 | + @Test |
| 260 | + public void testVarargsInvocation03() { |
| 261 | + // Calling 'public int aVarargsMethod3(String str1, String... strings)' - returns all strings concatenated with "-" |
| 262 | + |
| 263 | + // No conversion necessary |
| 264 | + evaluate("aVarargsMethod3('x')", "x", String.class); |
| 265 | + evaluate("aVarargsMethod3('x', 'a')", "x-a", String.class); |
| 266 | + evaluate("aVarargsMethod3('x', 'a', 'b', 'c')", "x-a-b-c", String.class); |
| 267 | + |
| 268 | + // Conversion necessary |
| 269 | + evaluate("aVarargsMethod3(9)", "9", String.class); |
| 270 | + evaluate("aVarargsMethod3(8,2,3)", "8-2-3", String.class); |
| 271 | + evaluate("aVarargsMethod3('2','a',3.0d)", "2-a-3.0", String.class); |
| 272 | + evaluate("aVarargsMethod3('8',new String[]{'a','b','c'})", "8-a-b-c", String.class); |
| 273 | + |
| 274 | + // Individual string contains a comma with multiple varargs arguments |
| 275 | + evaluate("aVarargsMethod3('foo', ',', 'baz')", "foo-,-baz", String.class); |
| 276 | + evaluate("aVarargsMethod3('foo', 'bar', ',baz')", "foo-bar-,baz", String.class); |
| 277 | + evaluate("aVarargsMethod3('foo', 'bar,', 'baz')", "foo-bar,-baz", String.class); |
| 278 | + |
| 279 | + // Individual string contains a comma with single varargs argument. |
| 280 | + // Reproduces https://github.com/spring-projects/spring-framework/issues/27582 |
| 281 | + evaluate("aVarargsMethod3('foo', ',')", "foo-,", String.class); |
| 282 | + evaluate("aVarargsMethod3('foo', ',bar')", "foo-,bar", String.class); |
| 283 | + evaluate("aVarargsMethod3('foo', 'bar,')", "foo-bar,", String.class); |
| 284 | + evaluate("aVarargsMethod3('foo', 'bar,baz')", "foo-bar,baz", String.class); |
256 | 285 | }
|
257 | 286 |
|
258 | 287 | @Test
|
|
0 commit comments