// 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 Future forEach(void action(T element))
/// Completes the future with an error if the stream has an error event, or if
/// action throws.
/// @description Checks that the future is completed with error if the stream has
/// an error event.
/// @author kaigorodov

library forEach_A02_t01;

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

void check(Stream s, Object expectedError) {
  AsyncExpect.error(expectedError, s.forEach((element) {}));
}

void test(CreateStreamWithErrorsFunction create) {
  check(create([1, 2, 3, 4], isError: (v) => v == 4, defVal: 42), 4);
  List list = [];
  check(
      create([null, "2", -3, 4.0, list], isError: (v) => v == list, defVal: 42),
      list);
  check(
      create([null, "2", -3, 4.0, list], isError: (v) => v == 4.0, defVal: 42),
      4.0);
}
