blob: 1b6fc306450ce35e5e0a215a9175e02bd1176848 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018, 2019 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;
import java.io.IOException;
import java.util.Map;
import org.eclipse.jdt.core.tests.util.CompilerTestSetup;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import junit.framework.Test;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class JEP323VarLambdaParamsTest extends AbstractRegressionTest {
public static Class testClass() {
return JEP323VarLambdaParamsTest.class;
}
public void initialize(CompilerTestSetup setUp) {
super.initialize(setUp);
}
public static Test suite() {
return buildMinimalComplianceTestSuite(testClass(), F_11);
}
public JEP323VarLambdaParamsTest(String testName){
super(testName);
}
static {
// TESTS_NUMBERS = new int[] { 1 };
// TESTS_RANGE = new int[] { 1, -1 };
// TESTS_NAMES = new String[] { "testBug534787_positive_001" };
}
protected Map getCompilerOptions() {
Map options = super.getCompilerOptions();
options.put(CompilerOptions.OPTION_Compliance, CompilerOptions.VERSION_11);
options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_11);
options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_11);
return options;
}
public void testBug534787_positive_001() throws IOException {
this.runConformTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var x) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" lam.apply(20);\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k);\n" +
"}\n"
},
"SUCCESS 20");
}
public void testBug534787_positive_002() throws IOException {
this.runConformTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var x, var y) -> {System.out.println(\"SUCCESS \" + (x+y));};\n" +
" lam.apply(20, 200);\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k, Integer l);\n" +
"}\n"
},
"SUCCESS 220");
}
public void testBug534787_positive_003() throws IOException {
this.runConformTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = var -> {System.out.println(\"SUCCESS \" + var);};\n" +
" lam.apply(10);\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k);\n" +
"}\n"
},
"SUCCESS 10");
}
public void testBug534787_positive_004() throws IOException {
this.runConformTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var var) -> {System.out.println(\"SUCCESS \" + var);};\n" +
" lam.apply(10);\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k);\n" +
"}\n"
},
"SUCCESS 10");
}
public void testBug534787_negative_001() throws IOException {
this.runNegativeTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var x, y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k, Integer z);\n" +
"}\n"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" I lam = (var x, y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^^^\n" +
"Syntax error on token \"var\", ( expected after this token\n" +
"----------\n" +
"2. ERROR in X.java (at line 3)\n" +
" I lam = (var x, y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"Syntax error on token \")\", delete this token\n" +
"----------\n" +
"3. ERROR in X.java (at line 3)\n" +
" I lam = (var x, y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"Syntax error, insert \")\" to complete Expression\n" +
"----------\n" +
"4. ERROR in X.java (at line 3)\n" +
" I lam = (var x, y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"Syntax error, insert \")\" to complete Expression\n" +
"----------\n");
}
public void testBug534787_negative_002() throws IOException {
this.runNegativeTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var x, Integer y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" lam.apply(20, 200);\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k, Integer z);\n" +
"}\n"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" I lam = (var x, Integer y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"\'var\' cannot be mixed with non-var parameters\n" +
"----------\n");
}
public void testBug534787_negative_003() throws IOException {
this.runNegativeTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (Integer x, var y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" lam.apply(20, 200);\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k, Integer z);\n" +
"}\n"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" I lam = (Integer x, var y) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"'var' cannot be mixed with non-var parameters\n" +
"----------\n");
}
public void testBug534787_negative_004() throws IOException {
this.runNegativeTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var x, var y, var...s) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" lam.apply(20, 200, \"hello\");\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k, Integer z, String s);\n" +
"}\n"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" I lam = (var x, var y, var...s) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"'var' is not allowed as an element type of an array\n" +
"----------\n");
}
public void testBug534787_negative_005() throws IOException {
this.runNegativeTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = (var x, Integer y, var...s) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" lam.apply(20, 200, \"hello\");\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k, Integer z, String s);\n" +
"}\n"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" I lam = (var x, Integer y, var...s) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"'var' cannot be mixed with non-var parameters\n" +
"----------\n" +
"2. ERROR in X.java (at line 3)\n" +
" I lam = (var x, Integer y, var...s) -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"'var' is not allowed as an element type of an array\n" +
"----------\n");
}
public void testBug534787_negative_006() throws IOException {
this.runNegativeTest(
new String[] {
"X.java",
"public class X {\n" +
" public static void main(String [] args) {\n" +
" I lam = var x -> {System.out.println(\"SUCCESS \" + x);};\n" +
" }\n" +
"}\n" +
"interface I {\n" +
" public void apply(Integer k);\n" +
"}\n"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" I lam = var x -> {System.out.println(\"SUCCESS \" + x);};\n" +
" ^\n" +
"Syntax error on token \"x\", delete this token\n" +
"----------\n");
}
public void testBug536159_01() throws IOException {
runConformTest(new String[] {
"X.java",
"public class X<T> {\n"
+ "public static void main(String[] args) {\n"
+ " FI x = (int i []) -> 5;\n"
+ " }\n"
+ "}\n"
+ "interface FI {\n"
+ " public int foo (int i []);\n"
+ "}"
});
}
public void testBug536159_02() throws IOException {
runConformTest(new String[] {
"X.java",
"public class X<T> {\n"
+ "public static void main(String[] args) {\n"
+ " FI x = (int[] i []) -> 5;\n"
+ " }\n"
+ "}\n"
+ "interface FI {\n"
+ " public int foo (int i [][]);\n"
+ "}"
});
}
public void testBug536159_03() throws IOException {
runConformTest(new String[] {
"X.java",
"public class X<T> {\n"
+ "public static void main(String[] args) {\n"
+ " FI x = (int i [][]) -> 5;\n"
+ " }\n"
+ "}\n"
+ "interface FI {\n"
+ " public int foo (int i [][]);\n"
+ "}"
});
}
public void testBug536159_04() throws IOException {
runNegativeTest(new String[] {
"X.java",
"public class X<T> {\n"
+ "public static void main(String[] args) {\n"
+ " FI x = (var i []) -> 5;\n"
+ " }\n"
+ "}\n"
+ "interface FI {\n"
+ " public int foo (int i []);\n"
+ "}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" FI x = (var i []) -> 5;\n" +
" ^\n" +
"\'var\' is not allowed as an element type of an array\n" +
"----------\n");
}
public void testBug541532_01() throws IOException {
runConformTest(new String[] {
"X.java",
"import java.util.Arrays;\n" +
"import java.util.List;\n" +
"\n" +
"public class X {\n" +
"\n" +
" public static void foo(List<String> list) {\n" +
" list.stream()\n" +
" .map((var s) -> s.toLowerCase())\n" +
" .forEach(System.out::println);\n" +
"\n" +
" list.stream()\n" +
" .filter((var s) -> s.length() == 1)\n" +
" .forEach(System.out::println);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" String[] greetings = {\"hello\", \"world\"};\n" +
" X.foo(Arrays.asList(greetings));\n" +
" }\n" +
"}\n"
},
"hello\nworld");
}
}