/*
 * 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> take(int count)
 * Provides at most the first n values of this stream.
 * Forwards the first n data events of this stream, and all error events,
 * to the returned stream, and ends with a done event.
 * If this stream produces fewer than count values before it's done,
 * so will the returned stream.
 * @description Checks that all error events are returned. Checks that
 * the resulting stream ends with a done event.
 * @author kaigorodov
 */
import "dart:async";
import "../../../Utils/expect.dart";

int eventCount = 2; // the length of the source stream
int takeCount = 2; // how many events to take

void main() {
  Iterable it = new Iterable.generate(eventCount, (int index) => index);
  Stream s = new Stream.fromIterable(it).map((x) => throw new ArgumentError(x));
  Stream t = s.take(takeCount);
  asyncStart();
  t.listen(
    (value) {
      Expect.fail("onData call not expected");
    },
    onError: (error) {
      Expect.isTrue(error is ArgumentError);
    },
    onDone: () {
      asyncEnd();
    }
  );
}
