NASHORN-58.js revision 877:cf4d2252d444
1/*
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * NASHORN-58
26 *
27 * @test
28 * @run
29 */
30
31function test1() {
32    var x = 1;
33    try {
34    print('try');
35    x = 2;
36    } catch(e) {
37    print('catch');
38    } finally {
39    print('finally');
40    x = 3;
41    }
42    print(x);
43}
44
45function test2() {
46    var x = 1;
47    try {
48    print('try');
49    } finally {
50    print('finally');
51    x = 2;
52    }
53    print(x);
54}
55
56function test3() {
57    try {
58    return 2;
59    } finally {
60    return 3;
61    }
62}
63
64function test4() {
65    try {
66    x = 1;
67    print(x);
68    try {
69        x = 2;
70        print(x);
71    } finally {
72        x = 3;
73        print(x)
74        try {
75        x = 4;
76        print(x);
77        } finally {
78        x = 5;
79        print(x);
80        }
81    }
82    print(x)
83    } finally {
84    x = 6;
85    print(x);
86    }
87    print(x);
88}
89
90function test5() {
91    try {
92    x = 1;
93    print(x);
94    try {
95        x = 2;
96        print(x);
97    } finally {
98        x = 3;
99        print(x)
100        try {
101        x = 4;
102        print(x);
103        } finally {
104        x = 5;
105        return x;
106        }
107    }
108    print(x)
109    } finally {
110    x = 6;
111    return x;
112    }
113}
114
115function test6() {
116    try {
117    throw new Error("testing");
118    } catch (ex) {
119    print(ex);
120    return;
121    } finally {
122    print("finally");
123    }
124}
125
126function test7() {
127    var e = new Error("no message");
128    var i = 3;
129    try {
130        throw e;
131    } catch (ex) {
132    } finally {
133        i++;
134    }
135    if (i != 4) {
136    print("FAIL");
137    }
138    print("SUCCESS");
139}
140
141
142test1();
143test2();
144print(test3());
145test4();
146print(test5())
147test6();
148test7();
149
150