  // Copyright (c) 2016, 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 If f is marked async*, then a fresh instance s implementing
/// the built-in class Stream is associated with the invocation and
/// immediately returned. When s is listened to, execution of the body of f will
/// begin. When f terminates:
///   • If the current return value is defined then, if s has been canceled
///   then its cancellation future is completed with null.
///   • If the current exception x is defined:
///     – x is added to s.
///     – If s has been canceled then its cancellation future is completed with
///     x as an error.
///   • s is closed.
///
/// @description Check that body of async generator function is executed only
/// after Stream instance s is listened.
///
/// @author a.semenov@unipro.ru
/// @issue 42220

import 'dart:async';
import '../../../Utils/expect.dart';

bool bodyExecuted = false;

Stream generator() async* {
  bodyExecuted = true;
  yield 1;
}

main() {
  asyncStart();
  Stream stream = generator();
  Expect.isFalse(bodyExecuted);
  stream.listen((v) {
    Expect.isTrue(bodyExecuted);
    asyncEnd();
  });
}
