// 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 Stream<T> handleError(Function onError, {bool test(error)})
 * The returned stream is a broadcast stream if this stream is.
 * @description Checks that broadcast stream is returned if original stream is
 * broadcast.
 * @author a.semenov@unipro.ru
 */
library handleError_A06_t01;
import "dart:async";
import "../../../Utils/expect.dart";

void check<T>(Stream<T> stream, Function? onError(T event), bool test(error)) {
  Expect.equals(stream.isBroadcast, stream.handleError(onError).isBroadcast);
  Expect.equals(stream.isBroadcast, stream.handleError(onError, test:test).isBroadcast);
}

void test(CreateStreamFunction create) {

  check(create([]), (_) => null, (_) => true);
  check(create([]).asBroadcastStream(), (_) => null, (_) => true);

  check(create([1, 2, 3, 4, 5]), (_) => null, (_) => true);
  check(create([1, 2, 3, 4, 5]).asBroadcastStream(), (_) => null, (_) => true);

  check<Object>(create([]), (e) => throw e, (_) => true);
  check<dynamic>(create([]).asBroadcastStream(), (e) => throw e, (_) => true);

  check<Object>(create([1, 2, 3, 4, 5]), (e) => throw e, (_) => true);
  check<Object>(create([1, 2, 3, 4, 5]).asBroadcastStream(), (e) => throw e, (_) => true);
}
