// 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))
/// Creates a new stream with each data event of this stream asynchronously
/// mapped to a new event.
///
/// This acts like map, except that convert may return a Future, and in that
/// case, the stream waits for that future to complete before continuing with
/// its result.
///
/// @description Checks that each element of this stream is processed.
/// @author a.semenov@unipro.ru

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

void check<T>(Stream<T> stream, dynamic convert(T event), List expected) {
  AsyncExpect.data(expected, stream.asyncMap(convert));
}

void test(CreateStreamFunction create) {
  check(create([]), (_) => 1, []);
  check<int>(create([1, 2, 3, 4, 5]), (e) => e, [1, 2, 3, 4, 5]);
  check<int>(create([1, 2, 3, 4, 5]), (e) => -e, [-1, -2, -3, -4, -5]);
  check<int>(create([1, 2, 3, 4, 5]), (e) => 0, [0, 0, 0, 0, 0]);
  // expand to the same stream
  check(
      create([null, "2", -3, 4.0, []]),
      (e) => e,
      [null, "2", -3, 4.0, []]
  );
}
