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

Side by Side Diff: lib/src/backend/invoker.dart

Issue 1086213002: Support a @Timeout annotation. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: CHANGELOG + README Created 5 years, 8 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
« no previous file with comments | « lib/pub_serve.dart ('k') | lib/src/backend/metadata.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.backend.invoker; 5 library test.backend.invoker;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:stack_trace/stack_trace.dart'; 9 import 'package:stack_trace/stack_trace.dart';
10 10
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 /// 60 ///
61 /// Once the test is closed, [expect] and [expectAsync] will throw 61 /// Once the test is closed, [expect] and [expectAsync] will throw
62 /// [ClosedException]s whenever accessed to help the test stop executing as 62 /// [ClosedException]s whenever accessed to help the test stop executing as
63 /// soon as possible. 63 /// soon as possible.
64 bool get closed => _closed; 64 bool get closed => _closed;
65 bool _closed = false; 65 bool _closed = false;
66 66
67 /// The test being run. 67 /// The test being run.
68 LocalTest get _test => liveTest.test as LocalTest; 68 LocalTest get _test => liveTest.test as LocalTest;
69 69
70 /// The test metadata merged with the suite metadata.
71 final Metadata metadata;
72
70 /// Note that this is meaningless once [_onCompleteCompleter] is complete. 73 /// Note that this is meaningless once [_onCompleteCompleter] is complete.
71 var _outstandingCallbacks = 0; 74 var _outstandingCallbacks = 0;
72 75
73 /// The completer to complete once the test body finishes. 76 /// The completer to complete once the test body finishes.
74 /// 77 ///
75 /// This is distinct from [_controller.completer] because a tear-down may need 78 /// This is distinct from [_controller.completer] because a tear-down may need
76 /// to run before the test is truly finished. 79 /// to run before the test is truly finished.
77 final _completer = new Completer(); 80 final _completer = new Completer();
78 81
79 /// The current invoker, or `null` if none is defined. 82 /// The current invoker, or `null` if none is defined.
80 /// 83 ///
81 /// An invoker is only set within the zone scope of a running test. 84 /// An invoker is only set within the zone scope of a running test.
82 static Invoker get current { 85 static Invoker get current {
83 // TODO(nweiz): Use a private symbol when dart2js supports it (issue 17526). 86 // TODO(nweiz): Use a private symbol when dart2js supports it (issue 17526).
84 return Zone.current[#test.invoker]; 87 return Zone.current[#test.invoker];
85 } 88 }
86 89
87 Invoker._(Suite suite, LocalTest test) { 90 Invoker._(Suite suite, LocalTest test)
91 : metadata = suite.metadata.merge(test.metadata) {
88 _controller = new LiveTestController(suite, test, _onRun, () { 92 _controller = new LiveTestController(suite, test, _onRun, () {
89 _closed = true; 93 _closed = true;
90 }); 94 });
91 } 95 }
92 96
93 /// Tells the invoker that there's a callback running that it should wait for 97 /// Tells the invoker that there's a callback running that it should wait for
94 /// before considering the test successful. 98 /// before considering the test successful.
95 /// 99 ///
96 /// Each call to [addOutstandingCallback] should be followed by a call to 100 /// Each call to [addOutstandingCallback] should be followed by a call to
97 /// [removeOutstandingCallback] once the callbak is no longer running. Note 101 /// [removeOutstandingCallback] once the callbak is no longer running. Note
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 155
152 /// The method that's run when the test is started. 156 /// The method that's run when the test is started.
153 void _onRun() { 157 void _onRun() {
154 _controller.setState(const State(Status.running, Result.success)); 158 _controller.setState(const State(Status.running, Result.success));
155 159
156 Chain.capture(() { 160 Chain.capture(() {
157 runZoned(() { 161 runZoned(() {
158 // TODO(nweiz): Make the timeout configurable. 162 // TODO(nweiz): Make the timeout configurable.
159 // TODO(nweiz): Reset this timer whenever the user's code interacts with 163 // TODO(nweiz): Reset this timer whenever the user's code interacts with
160 // the library. 164 // the library.
161 var timeout = _test.metadata.timeout.apply(new Duration(seconds: 30)); 165 var timeout = metadata.timeout.apply(new Duration(seconds: 30));
162 var timer = new Timer(timeout, () { 166 var timer = new Timer(timeout, () {
163 if (liveTest.isComplete) return; 167 if (liveTest.isComplete) return;
164 handleError( 168 handleError(
165 new TimeoutException( 169 new TimeoutException(
166 "Test timed out after ${niceDuration(timeout)}.", timeout)); 170 "Test timed out after ${niceDuration(timeout)}.", timeout));
167 }); 171 });
168 172
169 addOutstandingCallback(); 173 addOutstandingCallback();
170 174
171 // Run the test asynchronously so that the "running" state change has a 175 // Run the test asynchronously so that the "running" state change has a
(...skipping 17 matching lines...) Expand all
189 Timer.run(_controller.completer.complete); 193 Timer.run(_controller.completer.complete);
190 }); 194 });
191 }, 195 },
192 zoneSpecification: new ZoneSpecification( 196 zoneSpecification: new ZoneSpecification(
193 print: (self, parent, zone, line) => _controller.print(line)), 197 print: (self, parent, zone, line) => _controller.print(line)),
194 zoneValues: {#test.invoker: this}, 198 zoneValues: {#test.invoker: this},
195 onError: handleError); 199 onError: handleError);
196 }); 200 });
197 } 201 }
198 } 202 }
OLDNEW
« no previous file with comments | « lib/pub_serve.dart ('k') | lib/src/backend/metadata.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698