| // Copyright (c) 2013, 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 |
| |
| import 'package:expect/expect.dart'; |
| import 'dart:async'; |
| |
| _defaultData(x) {} |
| _defaultError(e, [st]) {} |
| _defaultDone() {} |
| |
| /// Dummy StreamSubscription. |
| class MyStreamSubscription<T> implements StreamSubscription<T> { |
| final Stream stream; |
| final bool cancelOnError; |
| Function handleData = null; |
| Function handleError = null; |
| Function handleDone = null; |
| |
| MyStreamSubscription(this.stream, this.cancelOnError); |
| |
| Future cancel() => null; |
| void onData(void handleData(T data)) { |
| this.handleData = handleData == null ? _defaultData : handleData; |
| } |
| |
| void onError(Function handleError) { |
| this.handleError = handleError == null ? _defaultError : handleError; |
| } |
| |
| void onDone(void handleDone()) { |
| this.handleDone = handleDone == null ? _defaultDone : handleDone; |
| } |
| |
| void pause([Future resumeSignal]) {} |
| void resume() {} |
| |
| final isPaused = false; |
| Future<E> asFuture<E>([E futureValue]) => null; |
| } |
| |
| main() { |
| var transformer = new StreamTransformer<int, String>( |
| (stream, cancelOnError) => |
| new MyStreamSubscription(stream, cancelOnError)); |
| |
| var controller = new StreamController<int>(sync: true); |
| var stream = controller.stream; |
| var transformed = stream.transform(transformer); |
| |
| Expect.isFalse(transformed.isBroadcast); |
| |
| var handleData = (String _) => 499; |
| var handleError = (e, st) => 42; |
| var handleDone = () => 99; |
| |
| MyStreamSubscription<String> subscription = |
| transformed.listen(handleData, onError: handleError, onDone: handleDone); |
| |
| Expect.identical(stream, subscription.stream); |
| Expect.equals(false, subscription.cancelOnError); |
| Expect.identical(handleData, subscription.handleData); |
| Expect.identical(handleError, subscription.handleError); |
| Expect.identical(handleDone, subscription.handleDone); |
| |
| // Note that we reuse the transformer. |
| |
| controller = new StreamController(sync: true); |
| stream = controller.stream; |
| transformed = stream.transform(transformer); |
| subscription = transformed.listen(null); |
| |
| Expect.identical(stream, subscription.stream); |
| Expect.equals(false, subscription.cancelOnError); |
| Expect.identical(_defaultData, subscription.handleData); |
| Expect.identical(_defaultError, subscription.handleError); |
| Expect.identical(_defaultDone, subscription.handleDone); |
| |
| controller = new StreamController(sync: true); |
| stream = controller.stream; |
| transformed = stream.transform(transformer); |
| subscription = |
| transformed.listen(null, onDone: handleDone, cancelOnError: true); |
| |
| Expect.identical(stream, subscription.stream); |
| Expect.equals(true, subscription.cancelOnError); |
| Expect.identical(_defaultData, subscription.handleData); |
| Expect.identical(_defaultError, subscription.handleError); |
| Expect.identical(handleDone, subscription.handleDone); |
| |
| controller = new StreamController.broadcast(sync: true); |
| stream = controller.stream; |
| transformed = stream.transform(transformer); |
| Expect.isTrue(transformed.isBroadcast); |
| subscription = |
| transformed.listen(null, onDone: handleDone, cancelOnError: true); |
| |
| Expect.identical(stream, subscription.stream); |
| Expect.equals(true, subscription.cancelOnError); |
| Expect.identical(_defaultData, subscription.handleData); |
| Expect.identical(_defaultError, subscription.handleError); |
| Expect.identical(handleDone, subscription.handleDone); |
| } |