| // 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:expect/legacy/async_minitest.dart'; // ignore: deprecated_member_use | |
| 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); | |
| }); | |
| } |