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

Unified Diff: tests/lib/async/stream_controller_async_test.dart

Issue 11783009: Big merge from experimental to bleeding edge. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 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
« no previous file with comments | « tests/lib/async/slow_consumer_test.dart ('k') | tests/lib/async/stream_controller_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/lib/async/stream_controller_async_test.dart
diff --git a/tests/lib/async/stream_controller_async_test.dart b/tests/lib/async/stream_controller_async_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..3c65a7e87f981d2b2d7718586d34a46535622828
--- /dev/null
+++ b/tests/lib/async/stream_controller_async_test.dart
@@ -0,0 +1,398 @@
+// 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.
+
+// Test the basic StreamController and StreamController.singleSubscription.
+import 'dart:async';
+import 'dart:isolate';
+import '../../../pkg/unittest/lib/unittest.dart';
+import 'event_helper.dart';
+
+testController() {
+ // Test reduce
+ test("StreamController.reduce", () {
+ StreamController c = new StreamController();
+ c.reduce(0, (a,b) => a + b)
+ .then(expectAsync1((int v) {
+ Expect.equals(42, v);
+ }));
+ c.add(10);
+ c.add(32);
+ c.close();
+ });
+
+ test("StreamController.reduce throws", () {
+ StreamController c = new StreamController();
+ c.reduce(0, (a,b) { throw "Fnyf!"; })
+ .catchError(expectAsync1((e) {
+ Expect.equals("Fnyf!", e.error);
+ }));
+ c.add(42);
+ });
+
+ test("StreamController.pipeInto", () {
+ StreamController c = new StreamController();
+ var list = <int>[];
+ c.pipeInto(new CollectionSink<int>(list))
+ .then(expectAsync0(() { Expect.listEquals(<int>[1,2,9,3,9], list); }));
+ c.add(1);
+ c.add(2);
+ c.add(9);
+ c.add(3);
+ c.add(9);
+ c.close();
+ });
+}
+
+testSingleController() {
+ test("Single-subscription StreamController.reduce", () {
+ StreamController c = new StreamController.singleSubscription();
+ c.reduce(0, (a,b) => a + b)
+ .then(expectAsync1((int v) { Expect.equals(42, v); }));
+ c.add(10);
+ c.add(32);
+ c.close();
+ });
+
+ test("Single-subscription StreamController.reduce throws", () {
+ StreamController c = new StreamController.singleSubscription();
+ c.reduce(0, (a,b) { throw "Fnyf!"; })
+ .catchError(expectAsync1((e) { Expect.equals("Fnyf!", e.error); }));
+ c.add(42);
+ });
+
+ test("Single-subscription StreamController.pipeInto", () {
+ StreamController c = new StreamController.singleSubscription();
+ var list = <int>[];
+ c.pipeInto(new CollectionSink<int>(list))
+ .then(expectAsync0(() { Expect.listEquals(<int>[1,2,9,3,9], list); }));
+ c.add(1);
+ c.add(2);
+ c.add(9);
+ c.add(3);
+ c.add(9);
+ c.close();
+ });
+
+ test("Single-subscription StreamController subscription changes", () {
+ StreamController c = new StreamController.singleSubscription();
+ StreamSink sink = c.sink;
+ Stream stream = c.stream;
+ int counter = 0;
+ var subscription;
+ subscription = stream.listen((data) {
+ counter += data;
+ Expect.throws(() => stream.listen(null), (e) => e is StateError);
+ subscription.cancel();
+ stream.listen((data) {
+ counter += data * 10;
+ },
+ onDone: expectAsync0(() {
+ Expect.equals(1 + 20, counter);
+ }));
+ });
+ sink.add(1);
+ sink.add(2);
+ sink.close();
+ });
+
+ test("Single-subscription StreamController events are buffered when"
+ " there is no subscriber",
+ () {
+ StreamController c = new StreamController.singleSubscription();
+ StreamSink sink = c.sink;
+ Stream stream = c.stream;
+ int counter = 0;
+ sink.add(1);
+ sink.add(2);
+ sink.close();
+ stream.listen(
+ (data) {
+ counter += data;
+ },
+ onDone: expectAsync0(() {
+ Expect.equals(3, counter);
+ }));
+ });
+
+ // Test subscription changes while firing.
+ test("Single-subscription StreamController subscription changes while firing",
+ () {
+ StreamController c = new StreamController.singleSubscription();
+ StreamSink sink = c.sink;
+ Stream stream = c.stream;
+ int counter = 0;
+ var subscription = stream.listen(null);
+ subscription.onData(expectAsync1((data) {
+ counter += data;
+ subscription.cancel();
+ stream.listen((data) {
+ counter += 10 * data;
+ },
+ onDone: expectAsync0(() {
+ Expect.equals(1 + 20 + 30 + 40 + 50, counter);
+ }));
+ Expect.throws(() => stream.listen(null), (e) => e is StateError);
+ }));
+ sink.add(1); // seen by stream 1
+ sink.add(2); // seen by stream 10 and 100
+ sink.add(3); // -"-
+ sink.add(4); // -"-
+ sink.add(5); // seen by stream 10
+ sink.close();
+ });
+}
+
+testExtraMethods() {
+ Events sentEvents = new Events()..add(7)..add(9)..add(13)..add(87)..close();
+
+ test("firstMatching", () {
+ StreamController c = new StreamController();
+ Future f = c.firstMatching((x) => (x % 3) == 0);
+ f.then(expectAsync1((v) { Expect.equals(9, v); }));
+ sentEvents.replay(c);
+ });
+
+ test("firstMatching 2", () {
+ StreamController c = new StreamController();
+ Future f = c.firstMatching((x) => (x % 4) == 0);
+ f.catchError(expectAsync1((e) {}));
+ sentEvents.replay(c);
+ });
+
+ test("firstMatching 3", () {
+ StreamController c = new StreamController();
+ Future f = c.firstMatching((x) => (x % 4) == 0, defaultValue: () => 999);
+ f.then(expectAsync1((v) { Expect.equals(999, v); }));
+ sentEvents.replay(c);
+ });
+
+
+ test("lastMatching", () {
+ StreamController c = new StreamController();
+ Future f = c.lastMatching((x) => (x % 3) == 0);
+ f.then(expectAsync1((v) { Expect.equals(87, v); }));
+ sentEvents.replay(c);
+ });
+
+ test("lastMatching 2", () {
+ StreamController c = new StreamController();
+ Future f = c.lastMatching((x) => (x % 4) == 0);
+ f.catchError(expectAsync1((e) {}));
+ sentEvents.replay(c);
+ });
+
+ test("lastMatching 3", () {
+ StreamController c = new StreamController();
+ Future f = c.lastMatching((x) => (x % 4) == 0, defaultValue: () => 999);
+ f.then(expectAsync1((v) { Expect.equals(999, v); }));
+ sentEvents.replay(c);
+ });
+
+ test("singleMatching", () {
+ StreamController c = new StreamController();
+ Future f = c.singleMatching((x) => (x % 9) == 0);
+ f.then(expectAsync1((v) { Expect.equals(9, v); }));
+ sentEvents.replay(c);
+ });
+
+ test("singleMatching 2", () {
+ StreamController c = new StreamController();
+ Future f = c.singleMatching((x) => (x % 3) == 0); // Matches both 9 and 87..
+ f.catchError(expectAsync1((e) { Expect.isTrue(e.error is StateError); }));
+ sentEvents.replay(c);
+ });
+
+ test("first", () {
+ StreamController c = new StreamController();
+ Future f = c.first;
+ f.then(expectAsync1((v) { Expect.equals(7, v);}));
+ sentEvents.replay(c);
+ });
+
+ test("first empty", () {
+ StreamController c = new StreamController();
+ Future f = c.first;
+ f.catchError(expectAsync1((e) { Expect.isTrue(e.error is StateError); }));
+ Events emptyEvents = new Events()..close();
+ emptyEvents.replay(c);
+ });
+
+ test("first error", () {
+ StreamController c = new StreamController();
+ Future f = c.first;
+ f.catchError(expectAsync1((e) { Expect.equals("error", e.error); }));
+ Events errorEvents = new Events()..error("error")..close();
+ errorEvents.replay(c);
+ });
+
+ test("first error 2", () {
+ StreamController c = new StreamController();
+ Future f = c.first;
+ f.catchError(expectAsync1((e) { Expect.equals("error", e.error); }));
+ Events errorEvents = new Events()..error("error")..error("error2")..close();
+ errorEvents.replay(c);
+ });
+
+ test("last", () {
+ StreamController c = new StreamController();
+ Future f = c.last;
+ f.then(expectAsync1((v) { Expect.equals(87, v);}));
+ sentEvents.replay(c);
+ });
+
+ test("last empty", () {
+ StreamController c = new StreamController();
+ Future f = c.last;
+ f.catchError(expectAsync1((e) { Expect.isTrue(e.error is StateError); }));
+ Events emptyEvents = new Events()..close();
+ emptyEvents.replay(c);
+ });
+
+ test("last error", () {
+ StreamController c = new StreamController();
+ Future f = c.last;
+ f.catchError(expectAsync1((e) { Expect.equals("error", e.error); }));
+ Events errorEvents = new Events()..error("error")..close();
+ errorEvents.replay(c);
+ });
+
+ test("last error 2", () {
+ StreamController c = new StreamController();
+ Future f = c.last;
+ f.catchError(expectAsync1((e) { Expect.equals("error", e.error); }));
+ Events errorEvents = new Events()..error("error")..error("error2")..close();
+ errorEvents.replay(c);
+ });
+
+ test("elementAt", () {
+ StreamController c = new StreamController();
+ Future f = c.elementAt(2);
+ f.then(expectAsync1((v) { Expect.equals(13, v);}));
+ sentEvents.replay(c);
+ });
+
+ test("elementAt 2", () {
+ StreamController c = new StreamController();
+ Future f = c.elementAt(20);
+ f.catchError(expectAsync1((e) { Expect.isTrue(e.error is StateError); }));
+ sentEvents.replay(c);
+ });
+}
+
+testPause() {
+ test("pause event-unpause", () {
+ StreamController c = new StreamController();
+ Events actualEvents = new Events.capture(c);
+ Events expectedEvents = new Events();
+ expectedEvents.add(42);
+ c.add(42);
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ SignalCompleter completer = new SignalCompleter();
+ actualEvents.pause(completer.signal);
+ c..add(43)..add(44)..close();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ completer.complete();
+ expectedEvents..add(43)..add(44)..close();
+ actualEvents.onDone(expectAsync0(() {
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ }));
+ });
+
+ test("pause twice event-unpause", () {
+ StreamController c = new StreamController();
+ Events actualEvents = new Events.capture(c);
+ Events expectedEvents = new Events();
+ expectedEvents.add(42);
+ c.add(42);
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ SignalCompleter completer = new SignalCompleter();
+ SignalCompleter completer2 = new SignalCompleter();
+ actualEvents.pause(completer.signal);
+ actualEvents.pause(completer2.signal);
+ c..add(43)..add(44)..close();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ completer.complete();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ completer2.complete();
+ expectedEvents..add(43)..add(44)..close();
+ actualEvents.onDone(expectAsync0((){
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ }));
+ });
+
+ test("pause twice direct-unpause", () {
+ StreamController c = new StreamController();
+ Events actualEvents = new Events.capture(c);
+ Events expectedEvents = new Events();
+ expectedEvents.add(42);
+ c.add(42);
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ actualEvents.pause();
+ actualEvents.pause();
+ c.add(43);
+ c.add(44);
+ c.close();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ actualEvents.resume();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ expectedEvents..add(43)..add(44)..close();
+ actualEvents.onDone(expectAsync0(() {
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ }));
+ actualEvents.resume();
+ });
+
+ test("pause twice direct-event-unpause", () {
+ StreamController c = new StreamController();
+ Events actualEvents = new Events.capture(c);
+ Events expectedEvents = new Events();
+ expectedEvents.add(42);
+ c.add(42);
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ SignalCompleter completer = new SignalCompleter();
+ actualEvents.pause(completer.signal);
+ actualEvents.pause();
+ c.add(43);
+ c.add(44);
+ c.close();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ actualEvents.resume();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ expectedEvents..add(43)..add(44)..close();
+ actualEvents.onDone(expectAsync0(() {
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ }));
+ completer.complete();
+ });
+
+ test("pause twice direct-unpause", () {
+ StreamController c = new StreamController();
+ Events actualEvents = new Events.capture(c);
+ Events expectedEvents = new Events();
+ expectedEvents.add(42);
+ c.add(42);
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ SignalCompleter completer = new SignalCompleter();
+ actualEvents.pause(completer.signal);
+ actualEvents.pause();
+ c.add(43);
+ c.add(44);
+ c.close();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ completer.complete();
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ expectedEvents..add(43)..add(44)..close();
+ actualEvents.onDone(expectAsync0(() {
+ Expect.listEquals(expectedEvents.events, actualEvents.events);
+ }));
+ actualEvents.resume();
+ });
+}
+
+main() {
+ testController();
+ testSingleController();
+ testExtraMethods();
+ testPause();
+}
« no previous file with comments | « tests/lib/async/slow_consumer_test.dart ('k') | tests/lib/async/stream_controller_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698