| // TODO(multitest): This was automatically migrated from a multitest and may | 
 | // contain strange or dead code. | 
 |  | 
 | // @dart = 2.9 | 
 |  | 
 | // 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 | 
 |  | 
 | 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; | 
 |       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"); | 
 |   } | 
 | } | 
 |  | 
 | class Helper3 { | 
 |   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 MyException catch (e) { | 
 |       i = 300; | 
 |  | 
 |         // There should be no stackTrace in this normal exception object. | 
 |         // We should get a NoSuchMethodError. | 
 |  | 
 |  | 
 |  | 
 |  | 
 |     } | 
 |     return i; | 
 |   } | 
 |  | 
 |   static List func5() { | 
 |     // Throw an Exception (any random object). | 
 |     throw new MyException("MyException in func5"); | 
 |   } | 
 | } | 
 |  | 
 | class ErrorStackTraceTest { | 
 |   static testMain() { | 
 |     Expect.equals(100, Helper1.func1()); | 
 |     Expect.equals(200, Helper2.func1()); | 
 |     Expect.equals(300, Helper3.func1()); | 
 |   } | 
 | } | 
 |  | 
 | main() { | 
 |   ErrorStackTraceTest.testMain(); | 
 | } |