// 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 final Future<T> single
/// Returns the single element.
/// If this is empty or has more than one element throws a StateError.
/// @description Checks that a StateError is thrown if this is empty or has more than one element.
/// @author kaigorodov

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

void check(Stream s) {
  asyncStart();
  s.single.then((value) {
    Expect.fail("nonexpected: $value");
  }, onError: (error) {
    Expect.isTrue(error is StateError);
    asyncEnd();
  });
}

main() {
  check(IsolateStream.fromIterable([]));
  check(IsolateStream.fromIterable([1, 2]));
  check(IsolateStream.fromIterable(
      new Iterable.generate(0, (int index) => null)));
  check(IsolateStream.fromIterable(
      new Iterable.generate(2, (int index) => null)));
}
