// 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 ZoneCallback<R> registerCallback<R>(R callback())
/// Registers the given callback in this zone.
/// @description Checks that ZoneCallback is returned and that
/// registerCallback can be overridden by ZoneSpecification.
/// @author ilya


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

void test(Zone z) {
  z.run(() {
    Expect.equals(z, Zone.current);
  });
}

main() {
  Zone z = Zone.current;

  int f() => 0;

  ZoneCallback<int> callback = z.registerCallback<int>(f);

  Expect.isTrue(callback is ZoneCallback<int>);
  Expect.equals(0, callback());

  ZoneCallback<R> registerFunction<R>(Zone self, ZoneDelegate parent, Zone zone, R f()) {
    return () => 42 as R;
  }

  z.fork(specification: new ZoneSpecification(registerCallback: registerFunction))
      .run(() {
        ZoneCallback<int> callback = Zone.current.registerCallback<int>(f);
        Expect.isTrue(callback is ZoneCallback<int>);
        Expect.equals(42, callback());
      });
}
