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

/// @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);
}
