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