Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: test/stream_completer_test.dart

Issue 1149563010: Add new features to package:async. (Closed) Base URL: https://github.com/dart-lang/async@master
Patch Set: more docs and tests. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/stream_completer_test.dart
diff --git a/test/stream_completer_test.dart b/test/stream_completer_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..8996485fb11502c8c81566833d7a2419d68f106e
--- /dev/null
+++ b/test/stream_completer_test.dart
@@ -0,0 +1,94 @@
+// Copyright (c) 2015, 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.
+
+library async.stream_completer_test;
nweiz 2015/06/12 01:24:27 Tests don't need library annotations.
+
+import "dart:async";
+
+import "package:async/async.dart" show StreamCompleter;
+import "package:test/test.dart";
+
+main() {
+ test("early link", () async {
nweiz 2015/06/12 01:24:27 Rather than "early" and "late" consider spelling o
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
+ var c = new StreamCompleter();
nweiz 2015/06/12 01:24:27 Use full words for variables.
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
+ var s = c.stream;
nweiz 2015/06/12 01:24:27 Pulling this out into a variable makes this harder
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
+ c.setSourceStream(createStream());
+ var r = [];
+ await s.listen(r.add).asFuture();
nweiz 2015/06/12 01:24:27 Consider just: expect(s.toList(), completion(
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Done.
+ expect(r, [1, 2, 3, 4]);
+ });
+
+ test("later link", () async {
+ var c = new StreamCompleter();
+ var s = c.stream;
+ var r = [];
+ Future done = s.listen(r.add).asFuture();
+ await sleep(250);
nweiz 2015/06/12 01:24:27 Sleeping is a recipe for tests that are both slow
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Switched to flushing microtasks (aka timer 0 futur
+ c.setSourceStream(createStream());
+ await done;
+ expect(r, [1, 2, 3, 4]);
+ });
+
+ test("early cancel", () async {
+ var c = new StreamCompleter();
+ var s = c.stream;
+ var sub = s.listen(null);
+ sub.pause(); // Should be ignored.
+ sub.cancel();
+ c.setSourceStream(new UnusableStream()); // Doesn't throw.
+ });
+
+ test("early pause", () async {
+ var c = new StreamCompleter();
+ var s = c.stream;
+ var r = [];
+ var sub = s.listen(r.add);
+ Future done = sub.asFuture();
+ sub.pause();
+ c.setSourceStream(createStream());
+ await sleep(250);
+ expect(r, []);
+ sub.resume();
+ await done;
+ expect(r, [1, 2, 3, 4]);
+ });
+
+ test("multi-pause", () async {
+ var c = new StreamCompleter();
+ var s = c.stream;
+ var r = [];
+ var sub = s.listen(r.add);
+ Future done = sub.asFuture();
+ sub.pause();
+ sub.pause();
+ sub.pause();
+ c.setSourceStream(createStream());
+ for (int i = 0; i < 3; i++) {
+ await sleep(50);
+ expect(r, []);
+ sub.resume();
+ }
+ await done;
+ expect(r, [1, 2, 3, 4]);
+ });
+}
nweiz 2015/06/12 01:24:27 There's a bunch of publicly-visible behavior that
Lasse Reichstein Nielsen 2015/06/15 15:46:24 Good points. Many more tests added.
+
+const MS = const Duration(milliseconds: 1);
+Future sleep(int n) => new Future.delayed(MS * n);
+
+Stream<int> createStream() async* {
+ yield 1;
+ await sleep(20);
+ yield 2;
+ await sleep(10);
+ yield 3;
+ await sleep(15);
+ yield 4;
+}
+
+class UnusableStream extends Stream {
+ listen(onData, {onError, onDone, cancelOnError}) {
+ throw new UnimplementedError("Gotcha!");
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698