jdk/test/java/dyn/MethodTypeTest.java
changeset 8823 7cd28219a1e4
parent 8717 f75a1efb1412
parent 8822 8145ab9f5f86
child 8824 0762fa26f813
child 9033 a88f5656f05d
--- a/jdk/test/java/dyn/MethodTypeTest.java	Wed Jul 05 17:38:31 2017 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,542 +0,0 @@
-/*
- * Copyright 2008, 2011 Sun Microsystems, Inc.  All Rights Reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-
-/* @test
- * @summary unit tests for java.dyn.MethodType
- * @compile MethodTypeTest.java
- * @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles test.java.dyn.MethodTypeTest
- */
-
-package test.java.dyn;
-
-import sun.dyn.MemberName;
-import java.dyn.MethodType;
-import java.lang.reflect.Method;
-
-import java.util.*;
-import org.junit.*;
-import static org.junit.Assert.*;
-
-/**
- *
- * @author jrose
- */
-public class MethodTypeTest {
-
-    private Class<?> rtype;
-    private Class<?>[] ptypes;
-    private MethodType mt_viS, mt_OO, mt_OO2, mt_vv, mt_Vv, mt_Ov;
-    private MethodType mt_iSI, mt_ISi, mt_ISI, mt_iSi;
-    private MethodType mt_viO, mt_iO2, mt_OOi, mt_iOi;
-    private MethodType mt_VIO, mt_IO2, mt_OOI, mt_IOI, mt_VIS;
-    private MethodType mt_vOiSzA, mt_OO99;
-    private MethodType[] GALLERY;
-    private Method compareTo;
-
-    @Before
-    public void setUp() throws Exception {
-        rtype = void.class;
-        ptypes = new Class<?>[] { int.class, String.class };
-
-        mt_viS = MethodType.methodType(void.class, int.class, String.class);
-        mt_OO = MethodType.methodType(Object.class, Object.class);
-        mt_OO2 = MethodType.methodType(Object.class, Object.class, Object.class);
-        mt_vv = MethodType.methodType(void.class);
-        mt_Vv = MethodType.methodType(Void.class);
-        mt_Ov = MethodType.methodType(Object.class);
-        mt_iSI = MethodType.methodType(int.class, String.class, Integer.class);
-        mt_ISi = MethodType.methodType(Integer.class, String.class, int.class);
-        mt_ISI = MethodType.methodType(Integer.class, String.class, Integer.class);
-        mt_iSi = MethodType.methodType(int.class, String.class, int.class);
-
-        compareTo = String.class.getDeclaredMethod("compareTo", String.class);
-
-        mt_viO = MethodType.methodType(void.class, int.class, Object.class);
-        mt_iO2 = MethodType.methodType(int.class, Object.class, Object.class);
-        mt_OOi = MethodType.methodType(Object.class, Object.class, int.class);
-        mt_iOi = MethodType.methodType(int.class, Object.class, int.class);
-
-        mt_VIO = MethodType.methodType(Void.class, Integer.class, Object.class);
-        mt_IO2 = MethodType.methodType(Integer.class, Object.class, Object.class);
-        mt_OOI = MethodType.methodType(Object.class, Object.class, Integer.class);
-        mt_IOI = MethodType.methodType(Integer.class, Object.class, Integer.class);
-        mt_VIS = MethodType.methodType(Void.class, Integer.class, String.class);
-
-        mt_vOiSzA = MethodType.methodType(void.class, Object.class, int.class, String.class, boolean.class, Object[].class);
-        mt_OO99 = MethodType.genericMethodType(99);
-
-        GALLERY = new MethodType[] {
-            mt_viS, mt_OO, mt_OO2, mt_vv, mt_Vv, mt_Ov,
-            mt_iSI, mt_ISi, mt_ISI, mt_iSi,
-            mt_viO, mt_iO2, mt_OOi, mt_iOi,
-            mt_VIO, mt_IO2, mt_OOI, mt_IOI,
-            mt_VIS, mt_vOiSzA, mt_OO99
-        };
-    }
-
-    @After
-    public void tearDown() throws Exception {
-    }
-
-    /** Make sure the method types are all distinct. */
-    @Test
-    public void testDistinct() {
-        List<MethodType> gallery2 = new ArrayList<>();
-        for (MethodType mt : GALLERY) {
-            assertFalse(mt.toString(), gallery2.contains(mt));
-            gallery2.add(mt);
-        }
-        // check self-equality also:
-        assertEquals(Arrays.asList(GALLERY), gallery2);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_Class_ClassArr() {
-        System.out.println("make (from type array)");
-        MethodType result = MethodType.methodType(rtype, ptypes);
-        assertSame(mt_viS, result);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_Class_List() {
-        System.out.println("make (from type list)");
-        MethodType result = MethodType.methodType(rtype, Arrays.asList(ptypes));
-        assertSame(mt_viS, result);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_3args() {
-        System.out.println("make (from type with varargs)");
-        MethodType result = MethodType.methodType(rtype, ptypes[0], ptypes[1]);
-        assertSame(mt_viS, result);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_Class() {
-        System.out.println("make (from single type)");
-        Class<?> rt = Integer.class;
-        MethodType expResult = MethodType.methodType(rt, new Class<?>[0]);
-        MethodType result = MethodType.methodType(rt);
-        assertSame(expResult, result);
-    }
-
-    @Test
-    public void testMakeGeneric() {
-        System.out.println("makeGeneric");
-        int objectArgCount = 2;
-        MethodType expResult = mt_OO2;
-        MethodType result = MethodType.genericMethodType(objectArgCount);
-        assertSame(expResult, result);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_Method() {
-        System.out.println("make (via MemberName.getMethodType)");
-        MethodType expResult = MethodType.methodType(int.class, String.class);
-        MemberName name = new MemberName(compareTo);
-        MethodType result = name.getMethodType();
-        assertSame(expResult, result);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_MethodType() {
-        System.out.println("make (from rtype, MethodType)");
-        MethodType expResult = mt_iO2;
-        MethodType result = MethodType.methodType(int.class, mt_IO2);
-        assertSame(expResult, result);
-    }
-
-    /**
-     * Test of make method, of class MethodType.
-     */
-    @Test
-    public void testMake_String_ClassLoader() {
-        System.out.println("make (from bytecode signature)");
-        ClassLoader loader = null;
-        MethodType[] instances = {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        String obj = "Ljava/lang/Object;";
-        assertEquals(obj, concat(Object.class));
-        String[] expResults = {
-            "(ILjava/lang/String;)V",
-            concat("(", obj, 2, ")", Object.class),
-            "()V", "()"+obj,
-            concat("(", String.class, Integer.class, ")I"),
-            concat("(", String.class, "I)", Integer.class),
-            concat("(", String.class, Integer.class, ")", Integer.class),
-            concat("(", String.class, "I)I")
-        };
-        for (int i = 0; i < instances.length; i++) {
-            MethodType instance = instances[i];
-            String result = instance.toMethodDescriptorString();
-            assertEquals("#"+i, expResults[i], result);
-            MethodType parsed = MethodType.fromMethodDescriptorString(result, loader);
-            assertSame("--#"+i, instance, parsed);
-        }
-    }
-    private static String concat(Object... parts) {
-        StringBuilder sb = new StringBuilder();
-        Object prevPart = "";
-        for (Object part : parts) {
-            if (part instanceof Class) {
-                part = "L"+((Class)part).getName()+";";
-            }
-            if (part instanceof Integer) {
-                for (int n = (Integer) part; n > 1; n--)
-                    sb.append(prevPart);
-                part = "";
-            }
-            sb.append(part);
-            prevPart = part;
-        }
-        return sb.toString().replace('.', '/');
-    }
-
-    @Test
-    public void testHasPrimitives() {
-        System.out.println("hasPrimitives");
-        MethodType[] instances = {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        boolean[] expResults =   {true,   false,  true,  false, true,   true,   false,  true};
-        for (int i = 0; i < instances.length; i++) {
-            boolean result = instances[i].hasPrimitives();
-            assertEquals("#"+i, expResults[i], result);
-        }
-    }
-
-    @Test
-    public void testHasWrappers() {
-        System.out.println("hasWrappers");
-        MethodType[] instances = {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        boolean[] expResults =   {false,  false,  false, false, true,   true,   true,   false};
-        for (int i = 0; i < instances.length; i++) {
-            System.out.println("  hasWrappers "+instances[i]);
-            boolean result = instances[i].hasWrappers();
-            assertEquals("#"+i, expResults[i], result);
-        }
-    }
-
-    @Test
-    public void testErase() {
-        System.out.println("erase");
-        MethodType[] instances  = {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        MethodType[] expResults = {mt_viO, mt_OO2, mt_vv, mt_Ov, mt_iO2, mt_OOi, mt_OO2, mt_iOi};
-        for (int i = 0; i < instances.length; i++) {
-            MethodType result = instances[i].erase();
-            assertSame("#"+i, expResults[i], result);
-        }
-    }
-
-    @Test
-    public void testGeneric() {
-        System.out.println("generic");
-        MethodType[] instances =  {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        MethodType[] expResults = {mt_OO2, mt_OO2, mt_Ov, mt_Ov, mt_OO2, mt_OO2, mt_OO2, mt_OO2};
-        for (int i = 0; i < instances.length; i++) {
-            MethodType result = instances[i].generic();
-            assertSame("#"+i, expResults[i], result);
-        }
-    }
-
-    @Test
-    public void testWrap() {
-        System.out.println("wrap");
-        MethodType[] instances =  {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        MethodType[] expResults = {mt_VIS, mt_OO2, mt_Vv, mt_Ov, mt_ISI, mt_ISI, mt_ISI, mt_ISI};
-        for (int i = 0; i < instances.length; i++) {
-            MethodType result = instances[i].wrap();
-            assertSame("#"+i, expResults[i], result);
-        }
-    }
-
-    @Test
-    public void testUnwrap() {
-        System.out.println("unwrap");
-        MethodType[] instances =  {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        MethodType[] expResults = {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSi, mt_iSi, mt_iSi, mt_iSi};
-        for (int i = 0; i < instances.length; i++) {
-            MethodType result = instances[i].unwrap();
-            assertSame("#"+i, expResults[i], result);
-        }
-    }
-
-    /**
-     * Test of parameterType method, of class MethodType.
-     */
-    @Test
-    public void testParameterType() {
-        System.out.println("parameterType");
-        for (int num = 0; num < ptypes.length; num++) {
-            MethodType instance = mt_viS;
-            Class<?> expResult = ptypes[num];
-            Class<?> result = instance.parameterType(num);
-            assertSame(expResult, result);
-        }
-    }
-
-    /**
-     * Test of parameterCount method, of class MethodType.
-     */
-    @Test
-    public void testParameterCount() {
-        System.out.println("parameterCount");
-        MethodType instance = mt_viS;
-        int expResult = 2;
-        int result = instance.parameterCount();
-        assertEquals(expResult, result);
-    }
-
-    /**
-     * Test of returnType method, of class MethodType.
-     */
-    @Test
-    public void testReturnType() {
-        System.out.println("returnType");
-        MethodType instance = mt_viS;
-        Class<?> expResult = void.class;
-        Class<?> result = instance.returnType();
-        assertSame(expResult, result);
-    }
-
-    /**
-     * Test of parameterList method, of class MethodType.
-     */
-    @Test
-    public void testParameterList() {
-        System.out.println("parameterList");
-        MethodType instance = mt_viS;
-        List<Class<?>> expResult = Arrays.asList(ptypes);
-        List<Class<?>> result = instance.parameterList();
-        assertEquals(expResult, result);
-    }
-
-    /**
-     * Test of parameterArray method, of class MethodType.
-     */
-    @Test
-    public void testParameterArray() {
-        System.out.println("parameterArray");
-        MethodType instance = mt_viS;
-        Class<?>[] expResult = ptypes;
-        Class<?>[] result = instance.parameterArray();
-        assertEquals(Arrays.asList(expResult), Arrays.asList(result));
-    }
-
-    /**
-     * Test of equals method, of class MethodType.
-     */
-    @Test
-    public void testEquals_Object() {
-        System.out.println("equals");
-        Object x = null;
-        MethodType instance = mt_viS;
-        boolean expResult = false;
-        boolean result = instance.equals(x);
-        assertEquals(expResult, result);
-    }
-
-    /**
-     * Test of equals method, of class MethodType.
-     */
-    @Test
-    public void testEquals_MethodType() {
-        System.out.println("equals");
-        MethodType that = mt_viS;
-        MethodType instance = mt_viS;
-        boolean expResult = true;
-        boolean result = instance.equals(that);
-        assertEquals(expResult, result);
-    }
-
-    /**
-     * Test of hashCode method, of class MethodType.
-     */
-    @Test
-    public void testHashCode() {
-        System.out.println("hashCode");
-        MethodType instance = mt_viS;
-        ArrayList<Class<?>> types = new ArrayList<Class<?>>();
-        types.add(instance.returnType());
-        types.addAll(instance.parameterList());
-        int expResult = types.hashCode();
-        int result = instance.hashCode();
-        assertEquals(expResult, result);
-    }
-
-    /**
-     * Test of toString method, of class MethodType.
-     */
-    @Test
-    public void testToString() {
-        System.out.println("toString");
-        MethodType[] instances = {mt_viS, mt_OO2, mt_vv, mt_Ov, mt_iSI, mt_ISi, mt_ISI, mt_iSi};
-        //String expResult = "void[int, class java.lang.String]";
-        String[] expResults = {
-            "(int,String)void",
-            "(Object,Object)Object",
-            "()void",
-            "()Object",
-            "(String,Integer)int",
-            "(String,int)Integer",
-            "(String,Integer)Integer",
-            "(String,int)int"
-        };
-        for (int i = 0; i < instances.length; i++) {
-            MethodType instance = instances[i];
-            String result = instance.toString();
-            System.out.println("#"+i+":"+result);
-            assertEquals("#"+i, expResults[i], result);
-        }
-    }
-
-    private static byte[] writeSerial(Object x) throws java.io.IOException {
-        try (java.io.ByteArrayOutputStream bout = new java.io.ByteArrayOutputStream();
-             java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(bout)
-             ) {
-            out.writeObject(x);
-            out.flush();
-            return bout.toByteArray();
-        }
-    }
-    private static Object readSerial(byte[] wire) throws java.io.IOException, ClassNotFoundException {
-        try (java.io.ByteArrayInputStream bin = new java.io.ByteArrayInputStream(wire);
-             java.io.ObjectInputStream in = new java.io.ObjectInputStream(bin)) {
-            return in.readObject();
-        }
-    }
-    private static void testSerializedEquality(Object x) throws java.io.IOException, ClassNotFoundException {
-        if (x instanceof Object[])
-            x = Arrays.asList((Object[]) x);  // has proper equals method
-        byte[] wire = writeSerial(x);
-        Object y = readSerial(wire);
-        assertEquals(x, y);
-    }
-
-    /** Test (de-)serialization. */
-    @Test
-    public void testSerialization() throws Throwable {
-        System.out.println("serialization");
-        for (MethodType mt : GALLERY) {
-            testSerializedEquality(mt);
-        }
-        testSerializedEquality(GALLERY);
-
-        // Make a list of mixed objects:
-        List<Object> stuff = new ArrayList<>();
-        Collections.addAll(stuff, GALLERY);  // copy #1
-        Object[] triples = Arrays.copyOfRange(GALLERY, 0, GALLERY.length/2);
-        Collections.addAll(stuff, triples);  // copy #3 (partial)
-        for (MethodType mt : GALLERY) {
-            Collections.addAll(stuff, mt.parameterArray());
-        }
-        Collections.shuffle(stuff, new Random(292));
-        Collections.addAll(stuff, GALLERY);  // copy #2
-        testSerializedEquality(stuff);
-    }
-
-    /** Test serialization formats. */
-    @Test
-    public void testPortableSerialFormat() throws Throwable {
-        System.out.println("portable serial format");
-        Object[][] cases = {
-            { mt_vv, new byte[] {  // ()void
-                    (byte)0xac, (byte)0xed, (byte)0x00, (byte)0x05, (byte)0x73, (byte)0x72, (byte)0x00, (byte)0x13,
-                    (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2e, (byte)0x64, (byte)0x79, (byte)0x6e,
-                    (byte)0x2e, (byte)0x4d, (byte)0x65, (byte)0x74, (byte)0x68, (byte)0x6f, (byte)0x64, (byte)0x54,
-                    (byte)0x79, (byte)0x70, (byte)0x65, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-                    (byte)0x00, (byte)0x01, (byte)0x24, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x78, (byte)0x70,
-                    (byte)0x76, (byte)0x72, (byte)0x00, (byte)0x04, (byte)0x76, (byte)0x6f, (byte)0x69, (byte)0x64,
-                    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-                    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x78, (byte)0x70, (byte)0x75, (byte)0x72, (byte)0x00,
-                    (byte)0x12, (byte)0x5b, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2e,
-                    (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2e, (byte)0x43, (byte)0x6c, (byte)0x61,
-                    (byte)0x73, (byte)0x73, (byte)0x3b, (byte)0xab, (byte)0x16, (byte)0xd7, (byte)0xae, (byte)0xcb,
-                    (byte)0xcd, (byte)0x5a, (byte)0x99, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x78, (byte)0x70,
-                    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x78,
-                } },
-            { mt_OO, new byte[] {  // (Object)Object
-                    (byte)0xac, (byte)0xed, (byte)0x00, (byte)0x05, (byte)0x73, (byte)0x72, (byte)0x00, (byte)0x13,
-                    (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2e, (byte)0x64, (byte)0x79, (byte)0x6e,
-                    (byte)0x2e, (byte)0x4d, (byte)0x65, (byte)0x74, (byte)0x68, (byte)0x6f, (byte)0x64, (byte)0x54,
-                    (byte)0x79, (byte)0x70, (byte)0x65, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-                    (byte)0x00, (byte)0x01, (byte)0x24, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x78, (byte)0x70,
-                    (byte)0x76, (byte)0x72, (byte)0x00, (byte)0x10, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61,
-                    (byte)0x2e, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2e, (byte)0x4f, (byte)0x62,
-                    (byte)0x6a, (byte)0x65, (byte)0x63, (byte)0x74, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-                    (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x78,
-                    (byte)0x70, (byte)0x75, (byte)0x72, (byte)0x00, (byte)0x12, (byte)0x5b, (byte)0x4c, (byte)0x6a,
-                    (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2e, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67,
-                    (byte)0x2e, (byte)0x43, (byte)0x6c, (byte)0x61, (byte)0x73, (byte)0x73, (byte)0x3b, (byte)0xab,
-                    (byte)0x16, (byte)0xd7, (byte)0xae, (byte)0xcb, (byte)0xcd, (byte)0x5a, (byte)0x99, (byte)0x02,
-                    (byte)0x00, (byte)0x00, (byte)0x78, (byte)0x70, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01,
-                    (byte)0x71, (byte)0x00, (byte)0x7e, (byte)0x00, (byte)0x03, (byte)0x78,
-                } },
-        };
-        boolean generateData = false;
-        //generateData = true;
-        for (Object[] c : cases) {
-            MethodType mt = (MethodType) c[0];
-            System.out.println("deserialize "+mt);
-            byte[] wire = (byte[]) c[1];
-            if (generateData) {
-                wire = writeSerial(mt);
-                final String INDENT = "                ";
-                System.out.print("{  // "+mt);
-                for (int i = 0; i < wire.length; i++) {
-                    if (i % 8 == 0) { System.out.println(); System.out.print(INDENT+"   "); }
-                    String hex = Integer.toHexString(wire[i] & 0xFF);
-                    if (hex.length() == 1)  hex = "0"+hex;
-                    System.out.print(" (byte)0x"+hex+",");
-                }
-                System.out.println();
-                System.out.println(INDENT+"}");
-                System.out.flush();
-            }
-            Object decode;
-            try {
-                decode = readSerial(wire);
-            } catch (Exception ex) {
-                decode = ex;  // oops!
-            }
-            assertEquals(mt, decode);
-        }
-    }
-}