| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| // Test correct handling of try-catch inside try-finally. |
| |
| import "package:expect/expect.dart"; |
| |
| void main() { |
| print("== test1 =="); |
| bool caught = false; |
| try { |
| test1(); |
| print("Unexpected 1"); // should never go here |
| Expect.isTrue(false); |
| } catch (e) { |
| caught = true; |
| print("main catch 1: $e"); |
| Expect.equals(e, "Ball"); |
| } |
| Expect.isTrue(caught); |
| print("== test2 =="); |
| caught = false; |
| try { |
| test2(); |
| print("Unexpected 2"); // should never go here |
| Expect.isTrue(false); |
| } catch (e) { |
| caught = true; |
| print("main catch 2: $e"); |
| Expect.equals(e, "Ball"); |
| } |
| Expect.isTrue(caught); |
| } |
| |
| void test1() { |
| try { |
| throw "Ball"; |
| } finally { |
| try { |
| throw "Frisbee"; |
| } catch (e) { |
| print("test 1 catch: $e"); |
| Expect.equals(e, "Frisbee"); |
| } |
| } |
| } |
| |
| void test2() { |
| try { |
| throwError(); // call a method that throws an error |
| } finally { |
| try { |
| throw "Frisbee"; |
| } catch (e) { |
| print("test 2 catch: $e"); |
| Expect.equals(e, "Frisbee"); |
| } |
| } |
| } |
| |
| void throwError() { |
| throw "Ball"; |
| } |