| // Copyright (c) 2013, 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 test program for testing throw statement |
| |
| // Tests that thrown errors contain their stack trace. |
| |
| import "package:expect/expect.dart"; |
| |
| class MyException { |
| const MyException(String message) : message_ = message; |
| final String message_; |
| } |
| |
| class Helper1 { |
| static int func1() { |
| return func2(); |
| } |
| |
| static int func2() { |
| return func3(); |
| } |
| |
| static int func3() { |
| return func4(); |
| } |
| |
| static int func4() { |
| var i = 0; |
| try { |
| i = 10; |
| func5(); |
| } on ArgumentError catch (e) { |
| i = 100; |
| // Error contains stack trace, even if we don't ask for one with (e, s). |
| Expect.isNotNull(e.stackTrace, "Errors need a stackTrace on throw"); |
| } |
| return i; |
| } |
| |
| static void func5() { |
| // Throw an Error. |
| throw new ArgumentError("ArgumentError in func5"); |
| } |
| } |
| |
| class Helper2 { |
| static int func1() { |
| return func2(); |
| } |
| |
| static int func2() { |
| return func3(); |
| } |
| |
| static int func3() { |
| return func4(); |
| } |
| |
| static int func4() { |
| var i = 0; |
| try { |
| i = 10; |
| func5(); |
| } on ArgumentError catch (e, s) { |
| i = 200; |
| Expect.isNotNull(e.stackTrace, "Errors need a stackTrace on throw"); |
| Expect.equals(e.stackTrace.toString(), s.toString()); |
| } |
| return i; |
| } |
| |
| static List func5() { |
| // Throw an Error. |
| throw new ArgumentError("ArgumentError in func5"); |
| } |
| } |
| |
| main() { |
| Expect.equals(100, Helper1.func1()); |
| Expect.equals(200, Helper2.func1()); |
| } |