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

Side by Side Diff: lib/src/utils.dart

Issue 1263503008: Add an Environment class that's exposed through RunnerSuite. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Created 5 years, 4 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 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 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.utils; 5 library test.utils;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:math' as math; 9 import 'dart:math' as math;
10 10
11 import 'package:crypto/crypto.dart'; 11 import 'package:crypto/crypto.dart';
12 import 'package:path/path.dart' as p; 12 import 'package:path/path.dart' as p;
13 import 'package:shelf/shelf.dart' as shelf; 13 import 'package:shelf/shelf.dart' as shelf;
14 import 'package:stack_trace/stack_trace.dart'; 14 import 'package:stack_trace/stack_trace.dart';
15 15
16 import 'backend/operating_system.dart'; 16 import 'backend/operating_system.dart';
17 import 'util/cancelable_future.dart';
17 import 'util/path_handler.dart'; 18 import 'util/path_handler.dart';
19 import 'util/stream_queue.dart';
18 20
19 /// The maximum console line length. 21 /// The maximum console line length.
20 const _lineLength = 100; 22 const _lineLength = 100;
21 23
22 /// A typedef for a possibly-asynchronous function. 24 /// A typedef for a possibly-asynchronous function.
23 /// 25 ///
24 /// The return type should only ever by [Future] or void. 26 /// The return type should only ever by [Future] or void.
25 typedef AsyncFunction(); 27 typedef AsyncFunction();
26 28
27 /// A typedef for a zero-argument callback function. 29 /// A typedef for a zero-argument callback function.
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 }, onError: (error, stackTrace) { 316 }, onError: (error, stackTrace) {
315 completer.completeError(error, stackTrace); 317 completer.completeError(error, stackTrace);
316 subscription.cancel(); 318 subscription.cancel();
317 }, onDone: () { 319 }, onDone: () {
318 completer.complete(); 320 completer.complete();
319 }); 321 });
320 322
321 return completer.future; 323 return completer.future;
322 } 324 }
323 325
326 CancelableFuture cancelableNext(StreamQueue queue) {
327 var fork = queue.fork();
328 var completer = new CancelableCompleter(() => fork.cancel(immediate: true));
329 completer.complete(fork.next.then((_) {
330 fork.cancel();
331 return queue.next;
332 }));
333 return completer.future;
334 }
335
336 Future race(Iterable<CancelableFuture> futures) {
337 var completer = new Completer.sync();
338 for (var future in futures) {
339 future.then((value) {
340 if (!completer.isCompleted) completer.complete(value);
341 }).catchError((error, stackTrace) {
342 if (!completer.isCompleted) completer.completeError(error, stackTrace);
343 });
344 }
345
346 return completer.future.whenComplete(() {
347 for (var future in futures) {
348 future.cancel();
349 }
350 });
351 }
352
324 /// Returns a stream that emits [error] and [stackTrace], then closes. 353 /// Returns a stream that emits [error] and [stackTrace], then closes.
325 /// 354 ///
326 /// This is useful for adding errors to streams defined via `async*`. 355 /// This is useful for adding errors to streams defined via `async*`.
327 Stream errorStream(error, StackTrace stackTrace) { 356 Stream errorStream(error, StackTrace stackTrace) {
328 var controller = new StreamController(); 357 var controller = new StreamController();
329 controller.addError(error, stackTrace); 358 controller.addError(error, stackTrace);
330 controller.close(); 359 controller.close();
331 return controller.stream; 360 return controller.stream;
332 } 361 }
333 362
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 } 419 }
391 } 420 }
392 421
393 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. 422 /// Returns middleware that nests all requests beneath the URL prefix [beneath].
394 shelf.Middleware nestingMiddleware(String beneath) { 423 shelf.Middleware nestingMiddleware(String beneath) {
395 return (handler) { 424 return (handler) {
396 var pathHandler = new PathHandler()..add(beneath, handler); 425 var pathHandler = new PathHandler()..add(beneath, handler);
397 return pathHandler.handler; 426 return pathHandler.handler;
398 }; 427 };
399 } 428 }
OLDNEW
« lib/src/runner/loader.dart ('K') | « lib/src/util/io.dart ('k') | lib/test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698