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

// Regression test for https://code.google.com/p/dart/issues/detail?id=23116

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

Stream<int> foo(Completer completer, Future future) async* {
  completer.complete(100);
  int x = await future;
  Expect.equals(42, x);
}

Future test() async {
  Completer completer1 = new Completer();
  Completer completer2 = new Completer();
  StreamSubscription s = foo(completer1, completer2.future).listen((v) => null);
  await completer1.future;
  // At this moment foo is waiting on the given future.
  s.pause();
  // Ensure that execution of foo is not resumed - the future is not completed
  // yet.
  s.resume();
  completer2.complete(42);
}

main() {
  asyncStart();
  test().then((_) => asyncEnd());
}
