// 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 ZoneUnaryCallback<R, T> bindUnaryCallback<R, T>(
///                                      R callback(T argument)
///                                    )
///    Registers the provided callback and returns a function that will
/// execute in this zone.
///    Equivalent to:
/// ZoneCallback registered = this.registerUnaryCallback(callback);
/// return (arg) => thin.runUnary(registered, arg);
/// @description Checks that synchronous [callback] errors are not caught by zone.
/// @author ilya
/// @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 callback(int x) {
    throw "callback error";
  }

  ZoneUnaryCallback<int,int> boundCallback =
                                  zone.bindUnaryCallback<int,int>(callback);
  Expect.throws( () => boundCallback(2), (e) => e=="callback error");
  Expect.equals(0, handlerCallCount);
}
