CatchPatternTest.sh revision 17113:d17577d4839b
1#!/bin/sh
2
3#
4# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
5# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6#
7# This code is free software; you can redistribute it and/or modify it
8# under the terms of the GNU General Public License version 2 only, as
9# published by the Free Software Foundation.
10#
11# This code is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14# version 2 for more details (a copy is included in the LICENSE file that
15# accompanied this code).
16#
17# You should have received a copy of the GNU General Public License version
18# 2 along with this work; if not, write to the Free Software Foundation,
19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20#
21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22# or visit www.oracle.com if you need additional information or have any
23# questions.
24#
25
26#  @test
27#  @bug 4671838
28#  @summary TTY: surprising ExceptionSpec.resolveEventRequest() wildcard results
29#  @author Tim Bell
30#
31#  @key intermittent
32#  @run shell CatchPatternTest.sh
33classname=CatchPatternTestTarg
34createJavaFile()
35{
36    cat <<EOF > $classname.java.1
37public class $classname {
38    public void bark(int i) {
39        System.out.println(" bark: " + i);
40        switch (i) {
41        case 0:
42            throw new IllegalArgumentException("IllegalArgumentException");
43        case 1:
44            throw new ArithmeticException("ArithmeticException");
45        case 2:
46            throw new IllegalMonitorStateException("IllegalMonitorStateException");
47        case 3:
48            throw new IndexOutOfBoundsException("IndexOutOfBoundsException");
49        default:
50            throw new Error("should not happen");
51        }
52    }
53    public void loop(int max) {
54        for (int i = 0; i <= max; i++) {
55            try {
56                bark(i);
57            } catch(RuntimeException re) {
58                System.out.println(" loop: " + re.getMessage() +
59                       " caught and ignored.");
60            }
61        }
62    }
63    public void partOne() {
64        loop(2);
65        System.out.println("partOne completed");
66    }
67    public void partTwo() {
68        loop(3);
69        System.out.println("partTwo completed");
70    }
71    public static void main(String[] args) {
72        System.out.println("Howdy!");
73        $classname my = new $classname();
74        my.partOne();
75        my.partTwo();
76        System.out.println("Goodbye from $classname!");
77    }
78}
79EOF
80}
81
82# This is called to feed cmds to jdb.
83dojdbCmds()
84{
85   #set -x
86   cmd stop in ${classname}.main
87   cmd stop in ${classname}.partTwo
88   runToBkpt
89   cmd ignore uncaught java.lang.Throwable
90   # Instead of matching java.lang.I* we use two more specific
91   # patterns here. The reason is to avoid matching IncompatibleClassChangeError
92   # (or the subclass NoSuchMethodError) thrown by the
93   # java.lang.invoke infrastructure.
94   cmd catch all java.lang.Il*
95   cmd catch all java.lang.Ind*
96   cmd cont
97   cmd cont
98   cmd cont
99   cmd ignore all java.lang.I*
100   cmd allowExit cont
101}
102
103mysetup()
104{
105    if [ -z "$TESTSRC" ] ; then
106        TESTSRC=.
107    fi
108
109    for ii in . $TESTSRC $TESTSRC/.. ; do
110        if [ -r "$ii/ShellScaffold.sh" ] ; then
111            . $ii/ShellScaffold.sh
112            break
113        fi
114    done
115}
116
117# You could replace this next line with the contents
118# of ShellScaffold.sh and this script will run just the same.
119mysetup
120
121runit
122#
123jdbFailIfNotPresent "Exception occurred: java.lang.IllegalArgumentException"
124jdbFailIfNotPresent "Exception occurred: java.lang.IllegalMonitorStateException"
125jdbFailIfPresent "Exception occurred: ArithmeticException"
126jdbFailIfPresent "Exception occurred: IndexOutOfBoundsException"
127jdbFailIfPresent "Exception occurred: IllegalStateException"
128jdbFailIfPresent "should not happen"
129debuggeeFailIfNotPresent "partOne completed"
130debuggeeFailIfNotPresent "partTwo completed"
131#
132pass
133