| // 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()); | |
| } |