jdk/test/java/lang/StackWalker/DumpStackTest.java
changeset 34371 cc29db9f73d8
parent 34369 b6df4cc80001
parent 34370 70d1245398ed
child 34372 ccdd9223ab7a
--- a/jdk/test/java/lang/StackWalker/DumpStackTest.java	Tue Nov 24 11:50:20 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,234 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. 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.
- *
- * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 8140450
- * @summary Verify outputs of Thread.dumpStack() and Throwable.printStackTrace().
- *          This test should also been run against jdk9 successfully except of
- *          VM option MemberNameInStackFrame.
- * @run main/othervm DumpStackTest
- * @run main/othervm -Dstackwalk.newThrowable=false DumpStackTest
- * @run main/othervm -Dstackwalk.newThrowable=true -XX:-MemberNameInStackFrame DumpStackTest
- * @run main/othervm -Dstackwalk.newThrowable=true -XX:+MemberNameInStackFrame DumpStackTest
- */
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.invoke.MethodType;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.function.Consumer;
-
-public class DumpStackTest {
-
-    public static void main(String args[]) {
-        test();
-        testThread();
-        testLambda();
-        testMethodInvoke();
-        testMethodHandle();
-    }
-
-    static class CallFrame {
-        final String classname;
-        final String methodname;
-        CallFrame(Class<?> c, String methodname) {
-            this(c.getName(), methodname);
-        }
-        CallFrame(String classname, String methodname) {
-            this.classname = classname;
-            this.methodname = methodname;
-        }
-
-        String getClassName() {
-            return classname;
-        }
-        String getMethodName() {
-            return methodname;
-        }
-        String getFileName() {
-            int i = classname.lastIndexOf('.');
-            int j = classname.lastIndexOf('$');
-            String name = classname.substring(i+1, j >= 0 ? j : classname.length());
-            return name + ".java";
-        }
-        @Override
-        public String toString() {
-            return classname + "." + methodname + "(" + getFileName() + ")";
-        }
-    }
-
-    static void test() {
-        CallFrame[] callStack = new CallFrame[] {
-                new CallFrame(Thread.class, "getStackTrace"),
-                new CallFrame(DumpStackTest.class, "test"),
-                new CallFrame(DumpStackTest.class, "main"),
-                // if invoked from jtreg
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke0"), // non-public class
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke"),
-                new CallFrame("sun.reflect.DelegatingMethodAccessorImpl", "invoke"),
-                new CallFrame(Method.class, "invoke"),
-                new CallFrame(Thread.class, "run"),
-        };
-
-        assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
-        getStackTrace(callStack);
-    }
-
-    static void getStackTrace(CallFrame[] callStack) {
-        // this method is the top of the stack
-        callStack[0] = new CallFrame(DumpStackTest.class, "getStackTrace");
-
-        try {
-            throw new RuntimeException();
-        } catch(RuntimeException ex) {
-            assertStackTrace(ex.getStackTrace(), callStack);
-        }
-    }
-    static void testThread() {
-        Thread t1 = new Thread() {
-            public void run() {
-                c();
-            }
-
-            void c() {
-                CallFrame[] callStack = new CallFrame[] {
-                        new CallFrame(Thread.class, "getStackTrace"),
-                        new CallFrame(this.getClass(), "c"),
-                        new CallFrame(this.getClass(), "run")
-                };
-                assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
-                DumpStackTest.getStackTrace(callStack);
-            }
-        };
-        t1.start();
-        try {
-            t1.join();
-        } catch(InterruptedException e) {}
-    }
-
-    static void testLambda() {
-        Consumer<Void> c = (x) -> consumeLambda();
-        c.accept(null);
-    }
-
-    static void consumeLambda() {
-        CallFrame[] callStack = new CallFrame[]{
-                new CallFrame(Thread.class, "getStackTrace"),
-                new CallFrame(DumpStackTest.class, "consumeLambda"),
-                new CallFrame(DumpStackTest.class, "lambda$testLambda$0"),
-                new CallFrame(DumpStackTest.class, "testLambda"),
-                new CallFrame(DumpStackTest.class, "main"),
-                // if invoked from jtreg
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke0"),
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke"),
-                new CallFrame("sun.reflect.DelegatingMethodAccessorImpl", "invoke"),
-                new CallFrame(Method.class, "invoke"),
-                new CallFrame(Thread.class, "run")
-        };
-        assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
-        DumpStackTest.getStackTrace(callStack);
-    }
-
-    static void testMethodInvoke() {
-        try {
-            Method m = DumpStackTest.class.getDeclaredMethod("methodInvoke");
-            m.invoke(null);
-        } catch(Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    static void methodInvoke() {
-        CallFrame[] callStack = new CallFrame[] {
-                new CallFrame(Thread.class, "getStackTrace"),
-                new CallFrame(DumpStackTest.class, "methodInvoke"),
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke0"),
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke"),
-                new CallFrame("sun.reflect.DelegatingMethodAccessorImpl", "invoke"),
-                new CallFrame(Method.class, "invoke"),
-                new CallFrame(DumpStackTest.class, "testMethodInvoke"),
-                new CallFrame(DumpStackTest.class, "main"),
-                // if invoked from jtreg
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke0"),
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke"),
-                new CallFrame("sun.reflect.DelegatingMethodAccessorImpl", "invoke"),
-                new CallFrame(Method.class, "invoke"),
-                new CallFrame(Thread.class, "run")
-        };
-        assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
-        DumpStackTest.getStackTrace(callStack);
-    }
-
-    static void testMethodHandle() {
-        MethodHandles.Lookup lookup = MethodHandles.lookup();
-        try {
-            MethodHandle handle = lookup.findStatic(DumpStackTest.class, "methodHandle",
-                                                    MethodType.methodType(void.class));
-            handle.invoke();
-        } catch(Throwable t) {
-            throw new RuntimeException(t);
-        }
-    }
-
-    static void methodHandle() {
-        CallFrame[] callStack = new CallFrame[]{
-                new CallFrame(Thread.class, "getStackTrace"),
-                new CallFrame(DumpStackTest.class, "methodHandle"),
-                new CallFrame(DumpStackTest.class, "testMethodHandle"),
-                new CallFrame(DumpStackTest.class, "main"),
-                // if invoked from jtreg
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke0"),
-                new CallFrame("sun.reflect.NativeMethodAccessorImpl", "invoke"),
-                new CallFrame("sun.reflect.DelegatingMethodAccessorImpl", "invoke"),
-                new CallFrame(Method.class, "invoke"),
-                new CallFrame(Thread.class, "run")
-        };
-        assertStackTrace(Thread.currentThread().getStackTrace(), callStack);
-        DumpStackTest.getStackTrace(callStack);
-    }
-
-    static void assertStackTrace(StackTraceElement[] actual, CallFrame[] expected) {
-        System.out.println("--- Actual ---");
-        Arrays.stream(actual).forEach(e -> System.out.println(e));
-        System.out.println("--- Expected ---");
-        Arrays.stream(expected).forEach(e -> System.out.println(e));
-
-        for (int i = 0, j = 0; i < actual.length; i++) {
-            // filter test framework classes
-            if (actual[i].getClassName().startsWith("com.sun.javatest.regtest"))
-                continue;
-            assertEquals(actual[i], expected[j++], i);
-        }
-
-    }
-    static void assertEquals(StackTraceElement actual, CallFrame expected, int idx) {
-        if (!actual.getClassName().equals(expected.getClassName()) ||
-                !actual.getFileName().equals(expected.getFileName()) ||
-                !actual.getMethodName().equals(expected.getMethodName())) {
-            throw new RuntimeException("StackTraceElements mismatch at index " + idx +
-                ". Expected [" + expected + "], but get [" + actual + "]");
-        }
-    }
-}