// Copyright (c) 2017, 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 Stream<String> bind(Stream<List<int>> stream)
 * Transform the incoming stream's events.
 *
 * Creates a new stream. When this stream is listened to, it will start
 * listening on stream, and generate events on the new stream based on the
 * events from stream.
 *
 * Subscriptions on the returned stream should propagate pause state to the
 * subscription on stream.
 * @description Checks that this method transforms stream's events
 * @author sgrekhov@unipro.ru
 */
import "dart:async";
import "dart:convert";
import "../../../Utils/expect.dart";

Future check(List<int> codeUnits) async {
  Base64Encoder encoder = new Base64Encoder();
  int counter = 0;

  await for (String event in encoder.bind(new Stream.fromIterable([codeUnits]))) {
    String data = base64.encode(codeUnits);
    Expect.equals(data, event);
    counter++;
  }
}

main() {
  asyncStart();
  Future.wait([
    check([]),
    check("S".codeUnits),
    check("So".codeUnits),
    check("Som".codeUnits),
  ]).then(
      (_) => asyncEnd()
  );
}
