LCOV - code coverage report
Current view: top level - async-1.13.3/lib/src/stream_sink_transformer - stream_transformer_wrapper.dart (source / functions) Hit Total Coverage
Test: coverage.lcov Lines: 0 13 0.0 %
Date: 2017-10-10 20:17:03 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
       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.
       4             : 
       5             : import 'dart:async';
       6             : 
       7             : import '../stream_sink_transformer.dart';
       8             : 
       9             : /// A [StreamSinkTransformer] that wraps a pre-existing [StreamTransformer].
      10             : class StreamTransformerWrapper<S, T> implements StreamSinkTransformer<S, T> {
      11             :   /// The wrapped transformer.
      12             :   final StreamTransformer<S, T> _transformer;
      13             : 
      14           0 :   const StreamTransformerWrapper(this._transformer);
      15             : 
      16             :   StreamSink<S> bind(StreamSink<T> sink) =>
      17           0 :       new _StreamTransformerWrapperSink<S, T>(_transformer, sink);
      18             : }
      19             : 
      20             : /// A sink created by [StreamTransformerWrapper].
      21             : class _StreamTransformerWrapperSink<S, T> implements StreamSink<S> {
      22             :   /// The controller through which events are passed.
      23             :   ///
      24             :   /// This is used to create a stream that can be transformed by the wrapped
      25             :   /// transformer.
      26             :   final _controller = new StreamController<S>(sync: true);
      27             : 
      28             :   /// The original sink that's being transformed.
      29             :   final StreamSink<T> _inner;
      30             : 
      31           0 :   Future get done => _inner.done;
      32             : 
      33             :   _StreamTransformerWrapperSink(
      34           0 :       StreamTransformer<S, T> transformer, this._inner) {
      35           0 :     _controller.stream
      36           0 :         .transform(transformer)
      37           0 :         .listen(_inner.add, onError: _inner.addError, onDone: () {
      38             :       // Ignore any errors that come from this call to [_inner.close]. The
      39             :       // user can access them through [done] or the value returned from
      40             :       // [this.close], and we don't want them to get top-leveled.
      41           0 :       _inner.close().catchError((_) {});
      42             :     });
      43             :   }
      44             : 
      45             :   void add(S event) {
      46           0 :     _controller.add(event);
      47             :   }
      48             : 
      49             :   void addError(error, [StackTrace stackTrace]) {
      50           0 :     _controller.addError(error, stackTrace);
      51             :   }
      52             : 
      53           0 :   Future addStream(Stream<S> stream) => _controller.addStream(stream);
      54             : 
      55             :   Future close() {
      56           0 :     _controller.close();
      57           0 :     return _inner.done;
      58             :   }
      59             : }

Generated by: LCOV version 1.13