// 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.fromIterable(Iterable<T> data)
 * If iterating data throws an error, the stream ends immediately with that
 * error. No done event will be sent (iteration is not complete), but no
 * further data events will be generated either, since iteration cannot
 * continue.
 * @description Checks that if iterating throws an error, onError callback
 * is run with this error. Also checks that data events are neither further
 * generated nor fired and onDone event does not happen.
 * @author ilya
 */
import "dart:async";
import "../../../Utils/expect.dart";

int f(int i) {
  if (i < 5) return i;
  if (i == 5) throw i;
  if (i > 5) Expect.fail('data generation did not stop');
  return 42;
}

main() {
  Iterable<int> it = new Iterable<int>.generate(10, (int i) => f(i));
  Stream<int> s = new Stream<int>.fromIterable(it);
  List events = [];
  asyncStart();

  s.listen((int x) {
    events.add(x);
  }, onError: (error) {
    events.add(error);
    // wait some time for additional (wrong) events
    new Future.delayed(durationMs(500), () {
      Expect.listEquals([0, 1, 2, 3, 4, 5, "done"], events);
      asyncEnd();
    });
  }, onDone: () {
    events.add("done");
  });
}
