Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: tests/lib/async/zone_debug_test.dart

Issue 23875032: Expose Zones. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Mark stack trace test as failing. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'package:expect/expect.dart';
6 import 'package:async_helper/async_helper.dart';
7 import 'dart:async';
8
9 import 'dart:collection';
10
11 int stackTrace = 0;
Lasse Reichstein Nielsen 2013/09/23 14:24:12 Name stackTraceCount would be easier to understand
floitsch 2013/09/23 17:12:07 It stands for normal stack traces. So "count" woul
12 List restoredStackTrace = [];
13
14 List events = [];
15
16 debugZoneRegisterCallback(Zone self, ZoneDelegate parent, Zone origin, f()) {
17 List savedTrace = [stackTrace]..addAll(restoredStackTrace);
18 return parent.registerCallback(origin, () {
19 restoredStackTrace = savedTrace;
20 return f();
21 });
22 }
23
24 debugZoneRegisterCallback1(Zone self, ZoneDelegate parent, Zone origin,
25 f(arg)) {
26 List savedTrace = [stackTrace]..addAll(restoredStackTrace);
27 return parent.registerCallback(origin, (arg) {
28 restoredStackTrace = savedTrace;
29 return f(arg);
30 });
31 }
32
33 debugZoneRun(Zone self, ZoneDelegate parent, Zone origin, f()) {
34 stackTrace++;
35 restoredStackTrace = [];
36 return parent.run(origin, f);
37 }
38
39 debugZoneRun1(Zone self, ZoneDelegate parent, Zone origin, f(arg), arg) {
40 stackTrace++;
41 restoredStackTrace = [];
42 return parent.run1(origin, f, arg);
43 }
44
45 List expectedDebugTrace;
46
47 debugUncaughtHandler(Zone self, ZoneDelegate parent, Zone origin, error) {
48 events.add("handling uncaught error $error");
49 Expect.listEquals(expectedDebugTrace, restoredStackTrace);
50 // Suppress the error and don't propagate to parent.
51 }
52
53 const DEBUG_DESCRIPTION = const ZoneDescription(
54 registerCallback: debugZoneRegisterCallback,
55 registerCallback1: debugZoneRegisterCallback1,
56 run: debugZoneRun,
57 run1: debugZoneRun1,
58 handleUncaughtError: debugUncaughtHandler);
59
60 main() {
61 Completer done = new Completer();
62
63 // runGuarded calls run, captures the synchronous error (if any) and
64 // gives that one to handleUncaughtError.
65
66 Expect.identical(Zone.ROOT, Zone.current);
67 Zone forked;
68 forked = Zone.current.fork(null, DEBUG_DESCRIPTION);
69
70 asyncStart();
71
72 int openTests = 0;
73
74 openTests++;
75 forked.run(() {
76 int forkTrace = stackTrace;
77 runAsync(() {
78 int runAsyncTrace = stackTrace;
79 runAsync(() {
80 expectedDebugTrace = [runAsyncTrace, forkTrace];
81 openTests--;
82 if (openTests == 0) {
83 done.complete();
84 }
85 throw "foo";
86 });
87 expectedDebugTrace = [forkTrace];
88 throw "bar";
89 });
90 });
91
92 Expect.listEquals([], restoredStackTrace);
93 Zone forked2 = forked.fork();
94 Zone forked3 = forked2.fork();
95 int fork2Trace;
96 int fork3Trace;
97 var f2;
98 var globalTrace = stackTrace;
99 var f = forked3.bindCallback(() {
100 Expect.identical(forked3, Zone.current);
101 fork2Trace = stackTrace;
102 f2 = forked2.bindCallback(() {
103 Expect.identical(forked2, Zone.current);
104 Expect.listEquals([fork2Trace, globalTrace], restoredStackTrace);
105 fork3Trace = stackTrace;
106 openTests--;
107 if (openTests == 0) {
108 done.complete();
109 }
110 runAsync(() {
111 expectedDebugTrace = [fork3Trace, fork2Trace, globalTrace];
112 throw "gee";
113 });
114 }, runGuarded: false);
115 }, runGuarded: false);
116 openTests++;
117 f();
118 f2();
119
120 done.future.whenComplete(() {
121 // We don't really care for the order.
122 events.sort();
123 Expect.listEquals([ "handling uncaught error bar",
124 "handling uncaught error foo",
125 "handling uncaught error gee"],
126 events);
127 asyncEnd();
128 });
129 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698