// 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.

// @dart = 2.9

/// @assertion Stream<T> skipWhile(bool test(T element))
///    Skip data events from this stream while they are matched by [test].
///    ...
///    The test fails when called with a data event
/// if it returns a non-`true` value or if the call to `test` throws.
/// If the call throws, the error is emitted as an error event
/// on the returned stream instead of the data event,
/// otherwise the event that made `test` return non-true is emitted as the
/// first data event.
/// @description Checks that if [test] throws an error, then the error is
/// emitted as an error event on the returned stream and it is considered as
/// [test] failure.
/// @author a.semenov@unipro.ru

library skipWhile_A04_t01;
import "../../../Utils/expect.dart";

void test(CreateStreamFunction create) {
  AsyncExpect.data([], create([]).skipWhile((e) => throw "a"));
  AsyncExpect.events([2, 3], ["b"], create([1, 2, 3]).skipWhile((e) => throw "b"));
  AsyncExpect.events(
      [2, 3], // expected data
      ["c"],  // expected errors
      create([-1, -2, -3, 1, 2, 3]).skipWhile(
        (element) {
          if (element > 0) {
            throw "c";
          };
          return true;
        }
      )
  );
}
