TypeNameTest.java revision 3062:15bdc18525ff
1238384Sjkim/*
2238384Sjkim * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
3238384Sjkim * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4238384Sjkim *
5238384Sjkim * This code is free software; you can redistribute it and/or modify it
6238384Sjkim * under the terms of the GNU General Public License version 2 only, as
7238384Sjkim * published by the Free Software Foundation.
8238384Sjkim *
9238384Sjkim * This code is distributed in the hope that it will be useful, but WITHOUT
10238384Sjkim * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11238384Sjkim * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12238384Sjkim * version 2 for more details (a copy is included in the LICENSE file that
13238384Sjkim * accompanied this code).
14238384Sjkim *
15238384Sjkim * You should have received a copy of the GNU General Public License version
16238384Sjkim * 2 along with this work; if not, write to the Free Software Foundation,
17238384Sjkim * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18238384Sjkim *
19238384Sjkim * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20238384Sjkim * or visit www.oracle.com if you need additional information or have any
21238384Sjkim * questions.
22238384Sjkim */
23238384Sjkim
24238384Sjkim/*
25238384Sjkim * @test
26238384Sjkim * @summary null test
27238384Sjkim * @build KullaTesting TestingInputStream
28238384Sjkim * @run testng TypeNameTest
29238384Sjkim */
30238384Sjkim
31238384Sjkimimport jdk.jshell.Snippet;
32238384Sjkimimport jdk.jshell.VarSnippet;
33238384Sjkimimport org.testng.annotations.Test;
34238384Sjkim
35238384Sjkimimport static jdk.jshell.Snippet.Status.VALID;
36238384Sjkimimport static org.testng.Assert.assertEquals;
37238384Sjkimimport static jdk.jshell.Snippet.Status.OVERWRITTEN;
38238384Sjkim
39238384Sjkim@Test
40238384Sjkimpublic class TypeNameTest extends KullaTesting {
41238384Sjkim
42238384Sjkim    public void testReplClassName() {
43238384Sjkim        assertEval("class C {}");
44238384Sjkim        VarSnippet sn = (VarSnippet) varKey(assertEval("new C();"));
45238384Sjkim        assertEquals(sn.typeName(), "C");
46238384Sjkim    }
47238384Sjkim
48238384Sjkim    public void testReplNestedClassName() {
49238384Sjkim        assertEval("class D { static class E {} }");
50238384Sjkim        VarSnippet sn = (VarSnippet) varKey(assertEval("new D.E();"));
51238384Sjkim        assertEquals(sn.typeName(), "D.E");
52238384Sjkim    }
53238384Sjkim
54238384Sjkim    public void testAnonymousClassName() {
55238384Sjkim        assertEval("class C {}");
56238384Sjkim        VarSnippet sn = (VarSnippet) varKey(assertEval("new C() { int x; };"));
57238384Sjkim        assertEquals(sn.typeName(), "C");
58238384Sjkim    }
59238384Sjkim
60238384Sjkim    public void testCapturedTypeName() {
61238384Sjkim        VarSnippet sn = (VarSnippet) varKey(assertEval("\"\".getClass();"));
62238384Sjkim        assertEquals(sn.typeName(), "Class<? extends String>");
63238384Sjkim    }
64238384Sjkim
65238384Sjkim    public void testJavaLang() {
66238384Sjkim        VarSnippet sn = (VarSnippet) varKey(assertEval("\"\";"));
67238384Sjkim        assertEquals(sn.typeName(), "String");
68238384Sjkim    }
69238384Sjkim
70238384Sjkim    public void testNotOverEagerPackageEating() {
71238384Sjkim        VarSnippet sn = (VarSnippet) varKey(assertEval("\"\".getClass().getDeclaredMethod(\"hashCode\");"));
72238384Sjkim        assertEquals(sn.typeName(), "java.lang.reflect.Method");
73238384Sjkim    }
74238384Sjkim
75238384Sjkim    public void testBounds() {
76238384Sjkim        assertEval("java.util.List<? extends String> list1 = java.util.Arrays.asList(\"\");");
77238384Sjkim        VarSnippet sn1 = (VarSnippet) varKey(assertEval("list1.iterator().next()"));
78238384Sjkim        assertEquals(sn1.typeName(), "String");
79238384Sjkim        assertEval("java.util.List<? super String> list2 = java.util.Arrays.asList(\"\");");
80238384Sjkim        VarSnippet sn2 = (VarSnippet) varKey(assertEval("list2.iterator().next()"));
81238384Sjkim        assertEquals(sn2.typeName(), "Object");
82238384Sjkim        assertEval("java.util.List<?> list3 = java.util.Arrays.asList(\"\");");
83238384Sjkim        VarSnippet sn3 = (VarSnippet) varKey(assertEval("list3.iterator().next()"));
84238384Sjkim        assertEquals(sn3.typeName(), "Object");
85238384Sjkim        assertEval("class Test1<X extends CharSequence> { public X get() { return null; } }");
86238384Sjkim        Snippet x = varKey(assertEval("Test1<?> x = new Test1<>();"));
87238384Sjkim        VarSnippet sn4 = (VarSnippet) varKey(assertEval("x.get()"));
88238384Sjkim        assertEquals(sn4.typeName(), "CharSequence");
89238384Sjkim        assertEval("class Foo<X extends Number & CharSequence> { public X get() { return null; } }");
90238384Sjkim        assertEval("Foo<?> x = new Foo<>();",
91238384Sjkim                ste(MAIN_SNIPPET, VALID, VALID, true, null),
92238384Sjkim                ste(x, VALID, OVERWRITTEN, false, MAIN_SNIPPET));
93238384Sjkim        VarSnippet sn5 = (VarSnippet) varKey(assertEval("x.get()"));
94238384Sjkim        assertEquals(sn5.typeName(), "Object");
95238384Sjkim    }
96238384Sjkim}
97238384Sjkim