blob: dafd54b41e9d2c727f252e5f1317b8512e20b589 [file] [log] [blame]
// 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 StreamController.broadcast({void onListen(), void onCancel(),
/// bool sync: false})
/// The onListen callback is called when the first listener is subscribed,
/// and the onCancel is called when there are no longer any active listeners.
///
/// @description Checks that the onCancel function is called when the last
/// listener unsubscribes.
/// @author a.semenov@unipro.ru
import "dart:async";
import "../../../Utils/expect.dart";
main() {
int onCancelCallCount = 0;
asyncMultiStart(6);
StreamController? controller;
controller = new StreamController.broadcast(
onCancel: () {
onCancelCallCount++;
Expect.equals(1, onCancelCallCount);
asyncEnd();
controller?.close();
}
);
List<StreamSubscription> subscriptions = new List.generate(
5,
(_) => controller!.stream.listen((event) {})
);
int i = 0, k = 0;
new Timer.periodic(durationInMilliseconds(100), (Timer timer) {
new Future.value(subscriptions[i].cancel()).then(
(_) {
Expect.equals((++k < 5) ? 0 : 1, onCancelCallCount);
asyncEnd();
}
);
i++;
if (i==5) {
timer.cancel();
}
});
}