// 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.

/// @assertion factory StreamTransformer(StreamSubscription<T>
///   transformer(Stream<S> stream, bool cancelOnError))
/// Creates a StreamTransformer.
///
/// The transformer closure receives the stream, that was bound, as argument
/// and returns a StreamSubscription. In almost all cases the closure listens
/// itself to the stream that is given as argument.
///
/// @description Checks that transformer receives a correct stream instance.
/// @author ilya

import "dart:async";
import "../../../Utils/expect.dart";

main() {
  Stream<int> source = new Stream.fromIterable([1]);
  StreamTransformer<int, dynamic> tr = new StreamTransformer(
    (stream, cancelOnError) {
      Expect.identical(source, stream);
      asyncEnd();
      return stream.listen(null);
    }
  );

  asyncStart();
  source.transform(tr).toList();
}
