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