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

/// @assertion Otherwise, control is transferred to the nearest innermost
/// enclosing exception handler.
/// @description Checks that the statement of the form "rethrow;" indeed
/// transfers control to the nearest enclosing exception handler if there is one,
/// leaving the current exception unchanged.
/// @note Can not test if the stack trace is unchanged because stack trace
/// equality is unspecified in spec (co19 issue 719)
/// @author rodionov

import '../../../Utils/expect.dart';

main() {
  bool flag = false;
  var strace;
  var ex = "";

  try {
    try {
      void foo() {
        try {
          throw ex;
          Expect.fail("This code shouldn't be executed");
        } on int catch (i) {
        } catch (v, st) {
          strace = st;
          rethrow;
          Expect.fail("This code shouldn't be executed");
        }
        Expect.fail("This code shouldn't be executed");
      }
      foo();
      Expect.fail("This code shouldn't be executed");
    } on int catch (i) {}
    Expect.fail("This code shouldn't be executed");
  } on int catch (i) {
  } catch (s, st) {
    flag = true;
    Expect.isTrue(identical(ex, s));
    Expect.isTrue(identical(strace, st)); // see note
  }

  Expect.isTrue(flag, "The correct exception handler wasn't triggered");
}
