// Copyright (c) 2013, 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

import "package:expect/expect.dart";
import "package:async_helper/async_helper.dart";
import 'dart:async';

main() {
  asyncStart(2);
  () async {
    var it = new StreamIterator(new Stream.fromIterable([]));
    Expect.isFalse(await it.moveNext());

    Future nullFuture;
    Future falseFuture;

    runZoned(() {
      nullFuture = (new StreamController()..stream.listen(null).cancel()).done;
      falseFuture = it.moveNext();
    }, zoneSpecification: new ZoneSpecification(scheduleMicrotask:
        (Zone self, ZoneDelegate parent, Zone zone, void f()) {
      Expect.fail("Should not be called");
    }));

    nullFuture.then((value) {
      Expect.isNull(value);
      asyncEnd();
    });

    falseFuture.then((value) {
      Expect.isFalse(value);
      asyncEnd();
    });
  }();
}
