| #!/bin/sh |
| |
| # |
| # Copyright (c) 2002, 2014 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 4671838 |
| # @summary TTY: surprising ExceptionSpec.resolveEventRequest() wildcard results |
| # @author Tim Bell |
| # |
| # @key intermittent |
| # @run shell CatchPatternTest.sh |
| classname=CatchPatternTestTarg |
| createJavaFile() |
| { |
| cat <<EOF > $classname.java.1 |
| public class $classname { |
| public void bark(int i) { |
| System.out.println(" bark: " + i); |
| switch (i) { |
| case 0: |
| throw new IllegalArgumentException("IllegalArgumentException"); |
| case 1: |
| throw new ArithmeticException("ArithmeticException"); |
| case 2: |
| throw new IllegalMonitorStateException("IllegalMonitorStateException"); |
| case 3: |
| throw new IndexOutOfBoundsException("IndexOutOfBoundsException"); |
| default: |
| throw new Error("should not happen"); |
| } |
| } |
| public void loop(int max) { |
| for (int i = 0; i <= max; i++) { |
| try { |
| bark(i); |
| } catch(RuntimeException re) { |
| System.out.println(" loop: " + re.getMessage() + |
| " caught and ignored."); |
| } |
| } |
| } |
| public void partOne() { |
| loop(2); |
| System.out.println("partOne completed"); |
| } |
| public void partTwo() { |
| loop(3); |
| System.out.println("partTwo completed"); |
| } |
| public static void main(String[] args) { |
| System.out.println("Howdy!"); |
| $classname my = new $classname(); |
| my.partOne(); |
| my.partTwo(); |
| System.out.println("Goodbye from $classname!"); |
| } |
| } |
| EOF |
| } |
| |
| # This is called to feed cmds to jdb. |
| dojdbCmds() |
| { |
| #set -x |
| cmd stop in ${classname}.main |
| cmd stop in ${classname}.partTwo |
| runToBkpt |
| cmd ignore uncaught java.lang.Throwable |
| # Instead of matching java.lang.I* we use two more specific |
| # patterns here. The reason is to avoid matching IncompatibleClassChangeError |
| # (or the subclass NoSuchMethodError) thrown by the |
| # java.lang.invoke infrastructure. |
| cmd catch all java.lang.Il* |
| cmd catch all java.lang.Ind* |
| cmd cont |
| cmd cont |
| cmd cont |
| cmd ignore all java.lang.I* |
| cmd allowExit cont |
| } |
| |
| mysetup() |
| { |
| if [ -z "$TESTSRC" ] ; then |
| TESTSRC=. |
| fi |
| |
| for ii in . $TESTSRC $TESTSRC/.. ; do |
| if [ -r "$ii/ShellScaffold.sh" ] ; then |
| . $ii/ShellScaffold.sh |
| break |
| fi |
| done |
| } |
| |
| # You could replace this next line with the contents |
| # of ShellScaffold.sh and this script will run just the same. |
| mysetup |
| |
| runit |
| # |
| jdbFailIfNotPresent "Exception occurred: java.lang.IllegalArgumentException" |
| jdbFailIfNotPresent "Exception occurred: java.lang.IllegalMonitorStateException" |
| jdbFailIfPresent "Exception occurred: ArithmeticException" |
| jdbFailIfPresent "Exception occurred: IndexOutOfBoundsException" |
| jdbFailIfPresent "Exception occurred: IllegalStateException" |
| jdbFailIfPresent "should not happen" |
| debuggeeFailIfNotPresent "partOne completed" |
| debuggeeFailIfNotPresent "partTwo completed" |
| # |
| pass |