// Copyright (c) 2012, 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

// Regression test for http://dartbug.com/7964

library first_regression_test;

import 'dart:async';

class DoubleTransformer<T> extends StreamTransformerBase<T, T> {
  Stream<T> bind(Stream<T> stream) {
    var transformer = new StreamTransformer<T, T>.fromHandlers(
        handleData: (T data, EventSink<T> sink) {
      sink.add(data);
      sink.add(data);
    });
    return transformer.bind(stream);
  }
}

main() async {
  // This should not crash. Did crash by trying to complete future more
  // than once.
  await (new Stream.fromIterable([1, 2]).transform(new DoubleTransformer()))
      .first;
}
