// Copyright (c) 2024, 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 Future get done
/// A future which is completed when the stream controller is done sending
/// events.
///
/// This happens either when the done event has been sent, or if the subscriber
/// on a single-subscription stream is canceled.
///
/// A stream controller will not complete the returned future until all
/// listeners present when the done event is sent have stopped listening. A
/// listener will stop listening if it is cancelled, or if it has handled the
/// done event. A paused listener will not process the done even until it is
/// resumed, so completion of the returned Future will be delayed until all
/// paused listeners have been resumed or cancelled.
///
/// If there is no listener on a non-broadcast stream, or the listener pauses
/// and never resumes, the done event will not be sent and this future will
/// never complete.
///
/// @description Checks that if listener was paused then the completion of the
/// returned Future will be delayed until the listener is cancelled.
/// @author sgrekhov22@gmail.com

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

main() {
  asyncStart(2);
  var stream = Stream<int>.multi((controller) {
    controller.done.then((_) {
      asyncEnd();
    });
    controller.add(1);
    controller.add(2);
    controller.add(3);
    controller.close();
  });
  listen(stream);
  listen(stream);
}

void listen(Stream<int> stream) {
  late StreamSubscription ss;
  ss = stream.listen((v) {
    if (v == 1) {
      ss.pause();
      Future.delayed(Duration(milliseconds: 100), () {
        ss.cancel();
      });
    }
  });
}
