// 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

class MyException1 {
  const MyException1([String message = "1"]) : message_ = message;
  final String message_;
}

class Helper {
  Helper() : i = 0 { }

  int f1() {
    int j = 0;
    try {
      j = func();
    } catch (var exception) {
      i = i + 100;
      print(exception.message_);
    } finally {
      i = i + 1000;
    }
    return i;
  }

  // No catch in the same function for the type of exception being thrown
  // in the try block here. We expect the handler if checks to fall thru,
  // the finally block to run and an implicit rethrow to happen.
  int func() {
    i = 0;
    try {
      while (i < 10) {
        i++;
      }
      if (i > 0) {
        throw new MyException1("Test for MyException1 being thrown");
      }
    } finally {
      i = 800;
    }
    return i;
  }
  int i;
}

class Throw6Test {
  static testMain() {
    Expect.equals(1900, new Helper().f1());
  }
}

main() {
  Throw6Test.testMain();
}
