OLD | NEW |
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:math' as math; | 8 import 'dart:math' as math; |
9 | 9 |
10 import 'package:crypto/crypto.dart'; | 10 import 'package:crypto/crypto.dart'; |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 /// Returns a sink that maps events sent to [original] using [fn]. | 132 /// Returns a sink that maps events sent to [original] using [fn]. |
133 StreamSink mapSink(StreamSink original, fn(event)) { | 133 StreamSink mapSink(StreamSink original, fn(event)) { |
134 var controller = new StreamController(sync: true); | 134 var controller = new StreamController(sync: true); |
135 controller.stream.listen( | 135 controller.stream.listen( |
136 (event) => original.add(fn(event)), | 136 (event) => original.add(fn(event)), |
137 onError: (error, stackTrace) => original.addError(error, stackTrace), | 137 onError: (error, stackTrace) => original.addError(error, stackTrace), |
138 onDone: () => original.close()); | 138 onDone: () => original.close()); |
139 return controller.sink; | 139 return controller.sink; |
140 } | 140 } |
141 | 141 |
| 142 /// Like [runZoned], but [zoneValues] are set for the callbacks in |
| 143 /// [zoneSpecification] and [onError]. |
| 144 runZonedWithValues(Function body(), {Map zoneValues, |
| 145 ZoneSpecification zoneSpecification, Function onError}) { |
| 146 return runZoned(() { |
| 147 return runZoned(body, |
| 148 zoneSpecification: zoneSpecification, onError: onError); |
| 149 }, zoneValues: zoneValues); |
| 150 } |
| 151 |
142 /// Truncates [text] to fit within [maxLength]. | 152 /// Truncates [text] to fit within [maxLength]. |
143 /// | 153 /// |
144 /// This will try to truncate along word boundaries and preserve words both at | 154 /// This will try to truncate along word boundaries and preserve words both at |
145 /// the beginning and the end of [text]. | 155 /// the beginning and the end of [text]. |
146 String truncate(String text, int maxLength) { | 156 String truncate(String text, int maxLength) { |
147 // Return the full message if it fits. | 157 // Return the full message if it fits. |
148 if (text.length <= maxLength) return text; | 158 if (text.length <= maxLength) return text; |
149 | 159 |
150 // If we can fit the first and last three words, do so. | 160 // If we can fit the first and last three words, do so. |
151 var words = text.split(' '); | 161 var words = text.split(' '); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 } | 314 } |
305 } | 315 } |
306 | 316 |
307 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. | 317 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. |
308 shelf.Middleware nestingMiddleware(String beneath) { | 318 shelf.Middleware nestingMiddleware(String beneath) { |
309 return (handler) { | 319 return (handler) { |
310 var pathHandler = new PathHandler()..add(beneath, handler); | 320 var pathHandler = new PathHandler()..add(beneath, handler); |
311 return pathHandler.handler; | 321 return pathHandler.handler; |
312 }; | 322 }; |
313 } | 323 } |
OLD | NEW |