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:convert'; | 8 import 'dart:convert'; |
9 import 'dart:math' as math; | 9 import 'dart:math' as math; |
10 | 10 |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 var result = {}; | 182 var result = {}; |
183 map1.forEach((key, value) { | 183 map1.forEach((key, value) { |
184 result[key] = value; | 184 result[key] = value; |
185 }); | 185 }); |
186 map2.forEach((key, value) { | 186 map2.forEach((key, value) { |
187 result[key] = value; | 187 result[key] = value; |
188 }); | 188 }); |
189 return result; | 189 return result; |
190 } | 190 } |
191 | 191 |
| 192 /// Returns a new list with all elements in both [list1] and [list2]. |
| 193 /// |
| 194 /// If an element exists in both lists, it is listed only once in the result. |
| 195 List mergeLists(List list1, List list2) { |
| 196 var result = []..addAll(list1); |
| 197 list2.forEach((element) { |
| 198 if (!result.contains(element)) { |
| 199 result.add(element); |
| 200 } |
| 201 }); |
| 202 return result; |
| 203 } |
| 204 |
192 /// Returns a sink that maps events sent to [original] using [fn]. | 205 /// Returns a sink that maps events sent to [original] using [fn]. |
193 StreamSink mapSink(StreamSink original, fn(event)) { | 206 StreamSink mapSink(StreamSink original, fn(event)) { |
194 var controller = new StreamController(sync: true); | 207 var controller = new StreamController(sync: true); |
195 controller.stream.listen( | 208 controller.stream.listen( |
196 (event) => original.add(fn(event)), | 209 (event) => original.add(fn(event)), |
197 onError: (error, stackTrace) => original.addError(error, stackTrace), | 210 onError: (error, stackTrace) => original.addError(error, stackTrace), |
198 onDone: () => original.close()); | 211 onDone: () => original.close()); |
199 return controller.sink; | 212 return controller.sink; |
200 } | 213 } |
201 | 214 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 urlSafe: urlSafe, addLineSeparator: addLineSeparator); | 409 urlSafe: urlSafe, addLineSeparator: addLineSeparator); |
397 } | 410 } |
398 | 411 |
399 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. | 412 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. |
400 shelf.Middleware nestingMiddleware(String beneath) { | 413 shelf.Middleware nestingMiddleware(String beneath) { |
401 return (handler) { | 414 return (handler) { |
402 var pathHandler = new PathHandler()..add(beneath, handler); | 415 var pathHandler = new PathHandler()..add(beneath, handler); |
403 return pathHandler.handler; | 416 return pathHandler.handler; |
404 }; | 417 }; |
405 } | 418 } |
| 419 |
| 420 /// Returns `true` iff [a] and [b] are both not null and share at least one |
| 421 /// element. |
| 422 bool intersect(Iterable a, Iterable b) { |
| 423 return a != null && b != null && a.any(b.contains); |
| 424 } |
OLD | NEW |