// 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 avoid runBinaryGuarded<T1, T2>(
 *                                    void action(T1 argument1, T2 argument2),
 *                                    T1 argument1,
 *                                    T2 argument2
 *                  )
 *    Executes the given action with argument1 and argument2 in this zone
 * and catches synchronous errors.
 *    See runGuarded.
 * @description Checks that [action] is run in this zone with provided args.
 * @author ilya
 * @author a.semenov@unipro.ru
 */
import "dart:async";
import "../../../Utils/expect.dart";

void test(Zone zone) {
  Zone? actionZone = null;

  void action(int x, int y) {
    actionZone = Zone.current;
  }

  zone.runBinaryGuarded<int, int>(action, 1, 2);
  Expect.equals(zone, actionZone);
}

main() {
  test(Zone.current);
  test(Zone.current.fork());
}
