Index: tests/lib_strong/async/stream_state_nonzero_timer_test.dart |
diff --git a/tests/lib_strong/async/stream_state_nonzero_timer_test.dart b/tests/lib_strong/async/stream_state_nonzero_timer_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2aac0009c550dbdb416582369fd259923d1dc37d |
--- /dev/null |
+++ b/tests/lib_strong/async/stream_state_nonzero_timer_test.dart |
@@ -0,0 +1,102 @@ |
+// 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:unittest/unittest.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); |
+ }); |
+} |