InferTypeTest.java revision 3294:9adfb22ff08f
1181834Sroberto/*
2181834Sroberto * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
3181834Sroberto * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4181834Sroberto *
5181834Sroberto * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @bug 8131027
27 * @summary Test Type Inference
28 * @library /tools/lib
29 * @modules jdk.compiler/com.sun.tools.javac.api
30 *          jdk.compiler/com.sun.tools.javac.main
31 *          jdk.jdeps/com.sun.tools.javap
32 * @build KullaTesting TestingInputStream ToolBox Compiler
33 * @run testng InferTypeTest
34 */
35
36import org.testng.annotations.Test;
37
38@Test
39public class InferTypeTest extends KullaTesting {
40
41    public void testTypeInference() {
42        assertInferredType("1", "int");
43        assertEval("import java.util.*;");
44        assertInferredType("new ArrayList<String>()", "ArrayList<String>");
45        assertInferredType("null", "Object");
46        assertInferredType("1 + ", null); //incomplete
47        assertInferredType("undef", null);  //unresolvable
48        assertEval("List<String> l1;");
49        assertEval("List<? extends String> l2;");
50        assertEval("List<? super String> l3;");
51        assertInferredType("l1", "List<String>");
52        assertInferredType("l2", "List<? extends String>");
53        assertInferredType("l3", "List<? super String>");
54        assertInferredType("l1.get(0)", "String");
55        assertInferredType("l2.get(0)", "String");
56        assertInferredType("l3.get(0)", "Object");
57        assertInferredType("\"\" + 1", "String");
58        assertEval("int i = 0;");
59        assertInferredType("i++", "int");
60        assertInferredType("++i", "int");
61        assertInferredType("i == 0 ? l1.get(0) : l2.get(0)", "String");
62        assertInferredType("", null);
63        assertInferredType("void test() { }", null);
64        assertInferredType("class Test { }", null);
65        assertInferredType("enum Test { A; }", null);
66        assertInferredType("interface Test { }", null);
67        assertInferredType("@interface Test { }", null);
68        assertInferredType("Object o;", null);
69    }
70
71}
72