Skip to content

Commit 33508ab

Browse files
committed
GROOVY-9158, GROOVY-10176, GROOVY-10261, GROOVY-10484, GROOVY-10497
1 parent 5ea3dd8 commit 33508ab

File tree

5 files changed

+718
-116
lines changed

5 files changed

+718
-116
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/NamedVariantTests.java

+191-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2009-2020 the original author or authors.
2+
* Copyright 2009-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,6 +15,9 @@
1515
*/
1616
package org.eclipse.jdt.groovy.core.tests.xform;
1717

18+
import static org.eclipse.jdt.groovy.core.tests.GroovyBundle.isAtLeastGroovy;
19+
import static org.junit.Assume.assumeTrue;
20+
1821
import org.eclipse.jdt.groovy.core.tests.basic.GroovyCompilerTestSuite;
1922
import org.junit.Test;
2023

@@ -23,7 +26,13 @@
2326
*/
2427
public final class NamedVariantTests extends GroovyCompilerTestSuite {
2528

26-
@Test
29+
private static final String COLOR_CLASS =
30+
"@groovy.transform.ToString(includeNames=true)\n" +
31+
"class Color {\n" +
32+
" int r, g, b\n" +
33+
"}\n";
34+
35+
@Test // GROOVY-9183
2736
public void testNamedVariant1() {
2837
//@formatter:off
2938
String[] sources = {
@@ -35,13 +44,10 @@ public void testNamedVariant1() {
3544
" return c\n" +
3645
"}\n" +
3746
"\n" +
38-
"print m(g:12, b:42, r:12)",
47+
"print m(g:12, b:42, r:12)\n",
3948

4049
"Color.groovy",
41-
"@groovy.transform.ToString(includeNames=true)\n" +
42-
"class Color {\n" +
43-
" Integer r, g, b\n" +
44-
"}\n",
50+
COLOR_CLASS,
4551
};
4652
//@formatter:on
4753

@@ -60,13 +66,10 @@ public void testNamedVariant2() {
6066
" return [color, alpha].join(' ')\n" +
6167
"}\n" +
6268
"\n" +
63-
"print m(r:1, g:2, b:3, a: 0)",
69+
"print m(r:1, g:2, b:3, a: 0)\n",
6470

6571
"Color.groovy",
66-
"@groovy.transform.ToString(includeNames=true)\n" +
67-
"class Color {\n" +
68-
" Integer r, g, b\n" +
69-
"}\n",
72+
COLOR_CLASS,
7073
};
7174
//@formatter:on
7275

@@ -78,7 +81,146 @@ public void testNamedVariant3() {
7881
//@formatter:off
7982
String[] sources = {
8083
"Script.groovy",
81-
"print(new Color(g:12, b:42, r:12))",
84+
"import groovy.transform.*\n" +
85+
"\n" +
86+
"@NamedVariant\n" +
87+
"String m(@NamedDelegate Color color, @NamedParam(value='a', type=Number) alpha) {\n" +
88+
" return [color, alpha].join(' ')\n" +
89+
"}\n" +
90+
"print m(r:1, g:2, b:3, a: 0.0)\n",
91+
92+
"Color.groovy",
93+
COLOR_CLASS,
94+
};
95+
//@formatter:on
96+
97+
runConformTest(sources, "Color(r:1, g:2, b:3) 0.0");
98+
}
99+
100+
@Test
101+
public void testNamedVariant4() {
102+
//@formatter:off
103+
String[] sources = {
104+
"Script.groovy",
105+
"import groovy.transform.*\n" +
106+
"\n" +
107+
"@NamedVariant\n" +
108+
"String m(@NamedDelegate Color color, Number alpha/*=4.5*/) {\n" + // TODO: GROOVY-10498
109+
" return [color, alpha].join(' ')\n" +
110+
"}\n" +
111+
"print m(r:1, g:2, b:3, 0.0)\n",
112+
113+
"Color.groovy",
114+
COLOR_CLASS,
115+
};
116+
//@formatter:on
117+
118+
runConformTest(sources, "Color(r:1, g:2, b:3) 0.0");
119+
}
120+
121+
@Test // GROOVY-9158, GROOVY-10176, GROOVY-10484
122+
public void testNamedVariant5() {
123+
//@formatter:off
124+
String[] sources = {
125+
"Script.groovy",
126+
"import groovy.transform.*\n" +
127+
"\n" +
128+
"@NamedVariant(autoDelegate=false)\n" +
129+
"String m(Color color, int alpha = 0) {\n" + // color:required, alpha:optional
130+
" return [color, alpha].join(' ')\n" +
131+
"}\n" +
132+
"\n" +
133+
"@groovy.transform.TypeChecked void test() {\n" +
134+
" print m(color: new Color(r:1,g:2,b:3))\n" +
135+
"}\n" +
136+
"test()\n",
137+
138+
"Color.groovy",
139+
COLOR_CLASS,
140+
};
141+
//@formatter:on
142+
143+
runConformTest(sources, "Color(r:1, g:2, b:3) 0");
144+
}
145+
146+
@Test // GROOVY-10261
147+
public void testNamedVariant6() {
148+
//@formatter:off
149+
String[] sources = {
150+
"Script.groovy",
151+
"import groovy.transform.*\n" +
152+
"\n" +
153+
"@NamedVariant\n" +
154+
"Color color(int r=10, int g=20, int b=30) {\n" +
155+
" new Color(r:r, g:g, b:b)\n" +
156+
"}\n" +
157+
"print color()\n" +
158+
"print color(r:128,b:128)\n",
159+
160+
"Color.groovy",
161+
COLOR_CLASS,
162+
};
163+
//@formatter:on
164+
165+
runConformTest(sources, "Color(r:10, g:20, b:30)Color(r:128, g:20, b:128)");
166+
}
167+
168+
@Test
169+
public void testNamedVariant7() {
170+
assumeTrue(isAtLeastGroovy(30));
171+
172+
//@formatter:off
173+
String[] sources = {
174+
"Script.groovy",
175+
"import groovy.transform.*\n" +
176+
"\n" +
177+
"@NamedVariant(coerce=true)\n" +
178+
"Color color(int r=10, int g=20, int b=30) {\n" +
179+
" new Color(r:r, g:g, b:b)\n" +
180+
"}\n" +
181+
"print color()\n" +
182+
"print color(r:128,b:'128')\n",
183+
184+
"Color.groovy",
185+
COLOR_CLASS,
186+
};
187+
//@formatter:on
188+
189+
runConformTest(sources, "Color(r:10, g:20, b:30)Color(r:128, g:20, b:128)");
190+
}
191+
192+
@Test
193+
public void testNamedVariant8() {
194+
//@formatter:off
195+
String[] sources = {
196+
"Script.groovy",
197+
"import groovy.transform.*\n" +
198+
"\n" +
199+
"@NamedVariant\n" +
200+
"void test(@NamedDelegate Color c, @NamedParam int b) {\n" +
201+
"}\n" +
202+
"test([:])\n",
203+
204+
"Color.groovy",
205+
COLOR_CLASS,
206+
};
207+
//@formatter:on
208+
209+
runNegativeTest(sources,
210+
"----------\n" +
211+
"1. ERROR in Script.groovy (at line 3)\n" +
212+
"\t@NamedVariant\n" +
213+
"\t^\n" +
214+
"Groovy:Error during @NamedVariant processing. Duplicate property 'b' found.\n" +
215+
"----------\n");
216+
}
217+
218+
@Test
219+
public void testNamedVariant9() {
220+
//@formatter:off
221+
String[] sources = {
222+
"Script.groovy",
223+
"print(new Color(g:12, b:42, r:12))\n",
82224

83225
"Color.groovy",
84226
"import groovy.transform.*\n" +
@@ -102,4 +244,40 @@ public void testNamedVariant3() {
102244

103245
runConformTest(sources, "Color(r:12, g:12, b:42)");
104246
}
247+
248+
@Test // GROOVY-10497
249+
public void testNamedVariant10() {
250+
//@formatter:off
251+
String[] sources = {
252+
"Script.groovy",
253+
"import groovy.transform.*\n" +
254+
"\n" +
255+
"@NamedVariant\n" +
256+
"void test(int i, int j = 42) {\n" +
257+
" print \"$i $j\"\n" +
258+
"}\n" +
259+
"test(i:0,j:null)\n",
260+
};
261+
//@formatter:on
262+
263+
runConformTest(sources, "0 0");
264+
}
265+
266+
@Test // GROOVY-10497
267+
public void testNamedVariant11() {
268+
//@formatter:off
269+
String[] sources = {
270+
"Script.groovy",
271+
"import groovy.transform.*\n" +
272+
"\n" +
273+
"@NamedVariant\n" +
274+
"void test(int i, Integer j = 42) {\n" +
275+
" print \"$i $j\"\n" +
276+
"}\n" +
277+
"test(i:0,j:null)\n",
278+
};
279+
//@formatter:on
280+
281+
runConformTest(sources, "0 null");
282+
}
105283
}

0 commit comments

Comments
 (0)