// 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. // Test the event/callback protocol of the stream implementations. // Uses a non-zero timer so it fails on d8. library stream_state_nonzero_timer_test; import 'dart:async'; import 'package:async_helper/async_minitest.dart'; import 'stream_state_helper.dart'; const ms5 = const Duration(milliseconds: 5); // Testing pause/resume, some with non-zero duration. This only makes sense for // non-broadcast streams, since broadcast stream subscriptions handle their // own pauses. main() { var p = "StreamController"; test("$p-sub-data/pause/resume/pause/resume-done", () { var t = new StreamProtocolTest(); t ..expectListen() ..expectData(42, () { t.pause(); }) ..expectPause(() { t.resume(); }) ..expectResume(() { t.pause(); }) ..expectPause(() { t.resume(); }) ..expectResume(() { t.close(); }) ..expectCancel() ..expectDone(t.terminate); t ..listen() ..add(42); }); test("$p-sub-data/pause-done", () { var t = new StreamProtocolTest(); t ..expectListen() ..expectData(42, () { t.pause(new Future.delayed(ms5, () => null)); }) ..expectPause() ..expectCancel() ..expectDone(t.terminate); // We are calling "close" while the controller is actually paused, // and it will stay paused until the pending events are sent. t ..listen() ..add(42) ..close(); }); test("$p-sub-data/pause-resume/done", () { var t = new StreamProtocolTest(); t ..expectListen() ..expectData(42, () { t.pause(new Future.delayed(ms5, () => null)); }) ..expectPause() ..expectResume(t.close) ..expectCancel() ..expectDone(t.terminate); t ..listen() ..add(42); }); test("$p-sub-data/data+pause-data-resume-done", () { var t = new StreamProtocolTest(); t ..expectListen() ..expectData(42, () { t.add(43); t.pause(new Future.delayed(ms5, () => null)); // Should now be paused until the future finishes. // After that, the controller stays paused until the pending queue // is empty. }) ..expectPause() ..expectData(43) ..expectResume(t.close) ..expectCancel() ..expectDone(t.terminate); t ..listen() ..add(42); }); test("$p-pause-during-callback", () { var t = new StreamProtocolTest(); t ..expectListen() ..expectData(42, () { t.pause(); }) ..expectPause(() { t.resume(); }) ..expectResume(() { t.pause(); t.resume(); t.close(); }) ..expectCancel() ..expectDone(t.terminate); t ..listen() ..add(42); }); }