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 | |
205 /// Returns a sink that maps events sent to [original] using [fn]. | 192 /// Returns a sink that maps events sent to [original] using [fn]. |
206 StreamSink mapSink(StreamSink original, fn(event)) { | 193 StreamSink mapSink(StreamSink original, fn(event)) { |
207 var controller = new StreamController(sync: true); | 194 var controller = new StreamController(sync: true); |
208 controller.stream.listen( | 195 controller.stream.listen( |
209 (event) => original.add(fn(event)), | 196 (event) => original.add(fn(event)), |
210 onError: (error, stackTrace) => original.addError(error, stackTrace), | 197 onError: (error, stackTrace) => original.addError(error, stackTrace), |
211 onDone: () => original.close()); | 198 onDone: () => original.close()); |
212 return controller.sink; | 199 return controller.sink; |
213 } | 200 } |
214 | 201 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 var pathHandler = new PathHandler()..add(beneath, handler); | 402 var pathHandler = new PathHandler()..add(beneath, handler); |
416 return pathHandler.handler; | 403 return pathHandler.handler; |
417 }; | 404 }; |
418 } | 405 } |
419 | 406 |
420 /// Returns `true` iff [a] and [b] are both not null and share at least one | 407 /// Returns `true` iff [a] and [b] are both not null and share at least one |
421 /// element. | 408 /// element. |
422 bool intersect(Iterable a, Iterable b) { | 409 bool intersect(Iterable a, Iterable b) { |
423 return a != null && b != null && a.any(b.contains); | 410 return a != null && b != null && a.any(b.contains); |
424 } | 411 } |
OLD | NEW |