Chromium Code Reviews| Index: tests/language/error_stacktrace_test.dart |
| =================================================================== |
| --- tests/language/error_stacktrace_test.dart (revision 0) |
| +++ tests/language/error_stacktrace_test.dart (revision 0) |
| @@ -0,0 +1,139 @@ |
| +// 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 OutOfMemoryError catch (e) { |
|
ahe
2013/07/25 09:01:26
I'm not sure we can support this in dart2js. It i
siva
2013/07/25 17:40:25
I have moved this into standalone/oom_error_stackt
|
| + i = 200; |
| + Expect.isNull(e.stackTrace, "OOM should not have a stackTrace on throw"); |
| + } |
| + return i; |
| + } |
| + static List func5() { |
| + // Cause an OOM(out of memory) exception. |
| + var l1 = new List(268435455); |
| + return l1; |
| + } |
| +} |
| + |
| +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 ArgumentError catch (e, s) { |
| + i = 300; |
| + Expect.isNotNull(e.stackTrace, "Errors need a stackTrace on throw"); |
| + Expect.isFalse(identical(e.stackTrace, s)); |
| + Expect.equals(e.stackTrace.toString(), s.toString()); |
| + } |
| + return i; |
| + } |
| + static List func5() { |
| + // Throw an Error. |
| + throw new ArgumentError("ArgumentError in func5"); |
| + } |
| +} |
| + |
| +class Helper4 { |
| + 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 = 400; |
| + try { |
| + Expect.isNull(e.stackTrace, "Do not expect a stackTrace on throw here"); |
| + } on NoSuchMethodError catch (e) { |
|
ahe
2013/07/25 09:01:26
This seems a bit convoluted. You expect e.stackTra
siva
2013/07/25 17:40:25
Changed line to just access stackTrace without the
|
| + Expect.isNotNull(e.stackTrace, "Error needs a stackTrace on throw"); |
| + } |
| + } |
| + 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()); |
| + Expect.equals(400, Helper4.func1()); |
| + } |
| +} |
| + |
| +main() { |
| + ErrorStackTraceTest.testMain(); |
| +} |