|
16 | 16 |
|
17 | 17 | package org.springframework.expression.spel;
|
18 | 18 |
|
| 19 | +import org.junit.jupiter.api.Disabled; |
19 | 20 | import org.junit.jupiter.api.Test;
|
20 | 21 |
|
21 | 22 | import org.springframework.expression.spel.standard.SpelExpressionParser;
|
@@ -101,6 +102,54 @@ void functionWithVarargs() {
|
101 | 102 | evaluate("#varargsFunction2(9,'a',null,'b')", "9-[a, null, b]", String.class);
|
102 | 103 | }
|
103 | 104 |
|
| 105 | + @Disabled("Disabled until bugs are reported and fixed") |
| 106 | + @Test |
| 107 | + void functionWithVarargsViaMethodHandle_CurrentlyFailing() { |
| 108 | + // Calling 'public static String formatObjectVarargs(String format, Object... args)' -> String.format(format, args) |
| 109 | + |
| 110 | + // No var-args and no conversion necessary |
| 111 | + evaluate("#formatObjectVarargs('x')", "x", String.class); |
| 112 | + |
| 113 | + // No var-args but conversion necessary |
| 114 | + evaluate("#formatObjectVarargs(9)", "9", String.class); |
| 115 | + |
| 116 | + // No conversion necessary |
| 117 | + evaluate("#formatObjectVarargs('x -> %s', new Object[]{''})", "x -> ", String.class); |
| 118 | + evaluate("#formatObjectVarargs('x -> %s', new String[]{''})", "x -> ", String.class); |
| 119 | + evaluate("#formatObjectVarargs('x -> %s', new Object[]{' '})", "x -> ", String.class); |
| 120 | + evaluate("#formatObjectVarargs('x -> %s', new String[]{' '})", "x -> ", String.class); |
| 121 | + evaluate("#formatObjectVarargs('x -> %s', new Object[]{'a'})", "x -> a", String.class); |
| 122 | + evaluate("#formatObjectVarargs('x -> %s', new String[]{'a'})", "x -> a", String.class); |
| 123 | + evaluate("#formatObjectVarargs('x -> %s %s %s', new Object[]{'a', 'b', 'c'})", "x -> a b c", String.class); |
| 124 | + evaluate("#formatObjectVarargs('x -> %s %s %s', new String[]{'a', 'b', 'c'})", "x -> a b c", String.class); |
| 125 | + } |
| 126 | + |
| 127 | + @Test // gh-33013 |
| 128 | + void functionWithVarargsViaMethodHandle() { |
| 129 | + // Calling 'public static String formatObjectVarargs(String format, Object... args)' -> String.format(format, args) |
| 130 | + |
| 131 | + // No conversion necessary |
| 132 | + evaluate("#formatObjectVarargs('x -> %s', '')", "x -> ", String.class); |
| 133 | + evaluate("#formatObjectVarargs('x -> %s', ' ')", "x -> ", String.class); |
| 134 | + evaluate("#formatObjectVarargs('x -> %s', 'a')", "x -> a", String.class); |
| 135 | + evaluate("#formatObjectVarargs('x -> %s %s %s', 'a', 'b', 'c')", "x -> a b c", String.class); |
| 136 | + |
| 137 | + // Conversion necessary |
| 138 | + evaluate("#formatObjectVarargs('x -> %s %s', 2, 3)", "x -> 2 3", String.class); |
| 139 | + evaluate("#formatObjectVarargs('x -> %s %s', 'a', 3.0d)", "x -> a 3.0", String.class); |
| 140 | + |
| 141 | + // Individual string contains a comma with multiple varargs arguments |
| 142 | + evaluate("#formatObjectVarargs('foo -> %s %s', ',', 'baz')", "foo -> , baz", String.class); |
| 143 | + evaluate("#formatObjectVarargs('foo -> %s %s', 'bar', ',baz')", "foo -> bar ,baz", String.class); |
| 144 | + evaluate("#formatObjectVarargs('foo -> %s %s', 'bar,', 'baz')", "foo -> bar, baz", String.class); |
| 145 | + |
| 146 | + // Individual string contains a comma with single varargs argument. |
| 147 | + evaluate("#formatObjectVarargs('foo -> %s', ',')", "foo -> ,", String.class); |
| 148 | + evaluate("#formatObjectVarargs('foo -> %s', ',bar')", "foo -> ,bar", String.class); |
| 149 | + evaluate("#formatObjectVarargs('foo -> %s', 'bar,')", "foo -> bar,", String.class); |
| 150 | + evaluate("#formatObjectVarargs('foo -> %s', 'bar,baz')", "foo -> bar,baz", String.class); |
| 151 | + } |
| 152 | + |
104 | 153 | @Test
|
105 | 154 | void functionMethodMustBeStatic() throws Exception {
|
106 | 155 | SpelExpressionParser parser = new SpelExpressionParser();
|
|
0 commit comments