// Copyright (c) 2011, 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 Helper { static int f1(int i) { try { i = func(); i = 10; } on MyException catch (exception, stacktrace) { i = 50; print(exception.message_); Expect.isNotNull(stacktrace); print(stacktrace); } try { int j; i = func1(); i = 200; } on MyException catch (exception, stacktrace) { i = 50; print(exception.message_); Expect.isNotNull(stacktrace); print(stacktrace); } try { int j; i = func2(); i = 200; } on MyException catch (exception, stacktrace) { i = 50; print(exception.message_); Expect.isNotNull(stacktrace); print(stacktrace); } finally { i = i + 800; } return i; } static int func() { int i = 0; while (i < 10) { i++; } if (i > 0) { throw new MyException("Exception Test for stack trace being printed"); } return 10; } static int func1() { try { func(); } on MyException catch (exception) { throw new MyException("Exception Test for stack trace being printed"); ; } return 10; } static int func2() { try { func(); } on MyException catch (exception) { rethrow; } return 10; } } class StackTraceTest { static testMain() { Expect.equals(850, Helper.f1(1)); } } // Test that the full stack trace is generated for rethrow. class RethrowStacktraceTest { var config = 0; @pragma("vm:entry-point") // Prevent obfuscation @pragma("vm:never-inline") // Prevent inlining issue12940() { throw "Progy"; } b() { issue12940(); } c() { if (config == 0) { try { b(); } catch (e) { rethrow; } } else { try { b(); } catch (e, s) { rethrow; } } } d() { c(); } testBoth() { for (config = 0; config < 2; config++) { try { d(); } catch (e, s) { Expect.contains("issue12940", s.toString()); } } } static testMain() { var test = new RethrowStacktraceTest(); test.testBoth(); } } main() { StackTraceTest.testMain(); RethrowStacktraceTest.testMain(); }