// Copyright (c) 2013, 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

import "package:expect/expect.dart";
import 'dart:async';
import 'catch_errors.dart';

var events = [];

void printHandler1(Zone self, ZoneDelegate parent, Zone origin, String line) {
  events.add("print: $line");
}

bool shouldIntercept = true;

void printHandler2(Zone self, ZoneDelegate parent, Zone origin, String line) {
  if (shouldIntercept) {
    events.add("print **: $line");
  } else {
    parent.print(origin, line);
  }
}

const TEST_SPEC1 = const ZoneSpecification(print: printHandler1);
const TEST_SPEC2 = const ZoneSpecification(print: printHandler2);

main() {
  Zone zone1 = Zone.current.fork(specification: TEST_SPEC1);
  Zone zone2 = zone1.fork(specification: TEST_SPEC2);
  zone1.run(() {
    print("1");
    print(2);
    print({
      3: [4]
    });
  });
  zone2.run(() {
    print("5");
    shouldIntercept = false;
    print(6);
  });
  Expect.listEquals(
      ["print: 1", "print: 2", "print: {3: [4]}", "print **: 5", "print: 6"],
      events);
}
