// Copyright (c) 2016, 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 asyncMap(dynamic convert(T event))
 * This acts like [map], ...
 *
 * The convert function is called once per data event per listener.
 * If a broadcast stream is listened to more than once, each subscription
 * will individually call convert on each data event.
 *
 * @description Checks that convert function is called once per data event
 * per listener.
 *
 * @issue #29615
 * @author a.semenov@unipro.ru
 */
library asyncExpand_A04_t01;
import "dart:async";
import "../../../Utils/expect.dart";

Future<List<T>> subscribe<T>(Stream<T> stream) {
  Completer<List<T>> completer = new Completer<List<T>>();
  List<T> received = [];
  stream.listen(
      (T event) {
        received.add(event);
      },
      onDone: () {
        completer.complete(received);
      }
  );
  return completer.future;
}

Future? check<T>(Stream<T> stream, List<T> expected) {
  Map<Object?, int> convertLog = new Map<Object,int>();

  T convert(T event) {
    convertLog[event] = 1 + convertLog.putIfAbsent(event, () => 0);
    return event;
  }

  asyncStart();
  Stream<T> converted = stream.asyncMap(convert);
  Future.wait([
    subscribe(converted),
    subscribe(converted),
    subscribe(converted)
  ]).then(
      (List<List<T>> result) {
        result.forEach((received) => Expect.listEquals(expected, received));
        expected.forEach((event) => Expect.equals(3, convertLog[event]));
        asyncEnd();
      }
  );
}

void test(CreateStreamFunction create) {
  check(create([]).asBroadcastStream(), []);
  check(create([1, 2, 3, 4, 5]).asBroadcastStream(), [1, 2, 3, 4, 5]);
  check(create(['a', 'b', 'c']).asBroadcastStream(), ['a', 'b', 'c']);
}
