// 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 R run<R>(R action())
///    Executes action in this zone.
///    By default (as implemented in the ROOT zone), runs action with current
/// set to this zone.
///    If action throws, the synchronous exception is not caught by the zone's
/// error handler. Use runGuarded to achieve that.
///    Since the root zone is the only zone that can modify the value of current,
/// custom zones intercepting run should always delegate to their parent zone.
/// They may take actions before and after the call.
/// @description Checks that synchronous [action] exceptions are not caught
/// in zone.
/// @author a.semenov@unipro.ru

import "dart:async";
import "../../../Utils/expect.dart";

main() {
  int handlerCallCount = 0;

  void handler(Zone self, ZoneDelegate parent, Zone zone, e, st) {
    handlerCallCount++;
  }

  Zone zone = Zone.current.fork(
      specification: new ZoneSpecification(
          handleUncaughtError: handler
      )
  );

  int action() {
    throw "action error";
  }

  Expect.throws(() => zone.run(action), (e) => e=="action error");
  Expect.equals(0, handlerCallCount);
}
