| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| /// @assertion factory StreamTransformer(StreamSubscription<T> |
| /// transformer(Stream<S> stream, bool cancelOnError)) |
| /// Creates a StreamTransformer. |
| /// |
| /// The result of invoking the transformer closure is a StreamSubscription. |
| /// The bound stream-transformer (created by the bind method above) then |
| /// sets the handlers it received as part of the listen call. |
| /// |
| /// @description Checks expected data events on transformed stream. |
| /// @author ilya |
| |
| import "dart:async"; |
| import "../../../Utils/expect.dart"; |
| |
| // transform: skip evens, produce number and its double, convert errors to data |
| myTransformer() { |
| return new StreamTransformer( |
| (Stream s, _) { |
| StreamController c = new StreamController(); |
| s.listen( |
| (x) { |
| if (x.isOdd) { |
| c.add(x); |
| c.add(x*2); |
| } |
| }, |
| onError:(x) { |
| c.add(x); |
| }, |
| onDone:() { |
| c.close(); |
| } |
| ); |
| return c.stream.listen(null); |
| } |
| ); |
| } |
| |
| main() { |
| StreamController c = new StreamController(); |
| c.add(1); |
| c.add(2); |
| c.add(3); |
| c.add(4); |
| c.add(5); |
| c.addError(1); |
| c.addError(2); |
| c.addError(3); |
| c.addError(4); |
| c.addError(5); |
| |
| asyncStart(); |
| |
| c.stream.transform(myTransformer()).toList().then( |
| (x) { |
| Expect.listEquals([1,2,3,6,5,10,1,2,3,4,5], x); |
| asyncEnd(); |
| } |
| ); |
| |
| c.close(); |
| } |