| Index: tests/lib/async/stream_group_by_test.dart
|
| diff --git a/tests/lib/async/stream_group_by_test.dart b/tests/lib/async/stream_group_by_test.dart
|
| deleted file mode 100644
|
| index 2abbf2647a4c23c0a330d173686dfc91aa2e3b85..0000000000000000000000000000000000000000
|
| --- a/tests/lib/async/stream_group_by_test.dart
|
| +++ /dev/null
|
| @@ -1,319 +0,0 @@
|
| -// Copyright (c) 2017, 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 stream_group_by_test;
|
| -
|
| -import "dart:async";
|
| -
|
| -import "package:expect/expect.dart";
|
| -import "package:async_helper/async_helper.dart";
|
| -
|
| -int len(x) => x.length;
|
| -String wrap(x) => "[$x]";
|
| -
|
| -void main() {
|
| - asyncStart();
|
| - // groupBy.
|
| - test("splits", () async {
|
| - var grouped = stringStream.groupBy<int>(len);
|
| - var byLength = <int, Future<List<String>>>{};
|
| - await for (GroupedEvents<int, String> group in grouped) {
|
| - byLength[group.key] = group.values.toList();
|
| - }
|
| - Expect.listEquals([1, 2, 4, 3], byLength.keys.toList());
|
| - expectCompletes(byLength[1], ["a", "b"]);
|
| - expectCompletes(byLength[2], ["ab"]);
|
| - expectCompletes(byLength[3], ["abe", "lea"]);
|
| - expectCompletes(byLength[4], ["abel", "bell", "able", "abba"]);
|
| - });
|
| -
|
| - test("empty", () async {
|
| - var grouped = emptyStream.groupBy<int>(len);
|
| - var byLength = <int, Future<List<String>>>{};
|
| - await for (GroupedEvents<int, String> group in grouped) {
|
| - byLength[group.key] = group.values.toList();
|
| - }
|
| - Expect.isTrue(byLength.isEmpty);
|
| - });
|
| -
|
| - test("single group", () async {
|
| - var grouped = repeatStream(5, "x").groupBy<int>(len);
|
| - var byLength = <int, Future<List<String>>>{};
|
| - await for (GroupedEvents<int, String> group in grouped) {
|
| - byLength[group.key] = group.values.toList();
|
| - }
|
| - Expect.listEquals([1], byLength.keys.toList());
|
| - expectCompletes(byLength[1], ["x", "x", "x", "x", "x"]);
|
| - });
|
| -
|
| - test("with error", () async {
|
| - var grouped = stringErrorStream(3).groupBy<int>(len);
|
| - var byLength = <int, Future<List<String>>>{};
|
| - bool caught = false;
|
| - try {
|
| - await for (GroupedEvents<int, String> group in grouped) {
|
| - byLength[group.key] = group.values.toList();
|
| - }
|
| - } catch (e) {
|
| - Expect.equals("BAD", e);
|
| - caught = true;
|
| - }
|
| - Expect.isTrue(caught);
|
| - Expect.listEquals([1, 2, 4], byLength.keys.toList());
|
| - expectCompletes(byLength[1], ["a", "b"]);
|
| - expectCompletes(byLength[2], ["ab"]);
|
| - expectCompletes(byLength[4], ["abel"]);
|
| - });
|
| -
|
| - // For comparison with later tests.
|
| - test("no pause or cancel", () async {
|
| - var grouped = stringStream.groupBy<int>(len);
|
| - var events = [];
|
| - var futures = [];
|
| - await grouped.forEach((sg) {
|
| - var key = sg.key;
|
| - var sub;
|
| - sub = sg.values.listen((value) {
|
| - events.add("$key:$value");
|
| - });
|
| - var c = new Completer();
|
| - futures.add(c.future);
|
| - sub.onDone(() {
|
| - c.complete(null);
|
| - });
|
| - });
|
| - await Future.wait(futures);
|
| - Expect.listEquals([
|
| - "1:a",
|
| - "2:ab",
|
| - "1:b",
|
| - "4:abel",
|
| - "3:abe",
|
| - "4:bell",
|
| - "4:able",
|
| - "4:abba",
|
| - "3:lea",
|
| - ], events);
|
| - });
|
| -
|
| - test("pause on group", () async {
|
| - // Pausing the individial group's stream just makes it buffer.
|
| - var grouped = stringStream.groupBy<int>(len);
|
| - var events = [];
|
| - var futures = [];
|
| - await grouped.forEach((sg) {
|
| - var key = sg.key;
|
| - var sub;
|
| - sub = sg.values.listen((value) {
|
| - events.add("$key:$value");
|
| - if (value == "a") {
|
| - // Pause until a later timer event, which is after stringStream
|
| - // has delivered all events.
|
| - sub.pause(new Future.delayed(Duration.ZERO, () {}));
|
| - }
|
| - });
|
| - var c = new Completer();
|
| - futures.add(c.future);
|
| - sub.onDone(() {
|
| - c.complete(null);
|
| - });
|
| - });
|
| - await Future.wait(futures);
|
| - Expect.listEquals([
|
| - "1:a",
|
| - "2:ab",
|
| - "4:abel",
|
| - "3:abe",
|
| - "4:bell",
|
| - "4:able",
|
| - "4:abba",
|
| - "3:lea",
|
| - "1:b"
|
| - ], events);
|
| - });
|
| -
|
| - test("pause on group-stream", () async {
|
| - // Pausing the stream returned by groupBy stops everything.
|
| - var grouped = stringStream.groupBy<int>(len);
|
| - var events = [];
|
| - var futures = [];
|
| - var done = new Completer();
|
| - var sub;
|
| - sub = grouped.listen((sg) {
|
| - var key = sg.key;
|
| - futures.add(sg.values.forEach((value) {
|
| - events.add("$key:$value");
|
| - if (value == "a") {
|
| - // Pause everything until a later timer event.
|
| - asyncStart();
|
| - var eventSnapshot = events.toList();
|
| - var delay = new Future.delayed(Duration.ZERO).then((_) {
|
| - // No events added.
|
| - Expect.listEquals(eventSnapshot, events);
|
| - asyncEnd(); // Ensures this test has run.
|
| - });
|
| - sub.pause(delay);
|
| - }
|
| - }));
|
| - });
|
| - sub.onDone(() {
|
| - done.complete(null);
|
| - });
|
| - futures.add(done.future);
|
| - await Future.wait(futures);
|
| - Expect.listEquals([
|
| - "1:a",
|
| - "2:ab",
|
| - "1:b",
|
| - "4:abel",
|
| - "3:abe",
|
| - "4:bell",
|
| - "4:able",
|
| - "4:abba",
|
| - "3:lea",
|
| - ], events);
|
| - });
|
| -
|
| - test("cancel on group", () async {
|
| - // Cancelling the individial group's stream just makes that one stop.
|
| - var grouped = stringStream.groupBy<int>(len);
|
| - var events = [];
|
| - var futures = [];
|
| - await grouped.forEach((sg) {
|
| - var key = sg.key;
|
| - var sub;
|
| - var c = new Completer();
|
| - sub = sg.values.listen((value) {
|
| - events.add("$key:$value");
|
| - if (value == "bell") {
|
| - // Pause until a later timer event, which is after stringStream
|
| - // has delivered all events.
|
| - sub.cancel();
|
| - c.complete(null);
|
| - }
|
| - });
|
| - futures.add(c.future);
|
| - sub.onDone(() {
|
| - c.complete(null);
|
| - });
|
| - });
|
| - await Future.wait(futures);
|
| - Expect.listEquals([
|
| - "1:a",
|
| - "2:ab",
|
| - "1:b",
|
| - "4:abel",
|
| - "3:abe",
|
| - "4:bell",
|
| - "3:lea",
|
| - ], events);
|
| - });
|
| -
|
| - test("cancel on group-stream", () async {
|
| - // Cancel the stream returned by groupBy ends everything.
|
| - var grouped = stringStream.groupBy<int>(len);
|
| - var events = [];
|
| - var futures = [];
|
| - var done = new Completer();
|
| - var sub;
|
| - sub = grouped.listen((sg) {
|
| - var key = sg.key;
|
| - futures.add(sg.values.forEach((value) {
|
| - events.add("$key:$value");
|
| - if (value == "bell") {
|
| - // Pause everything until a later timer event.
|
| - futures.add(sub.cancel());
|
| - done.complete();
|
| - }
|
| - }));
|
| - });
|
| - futures.add(done.future);
|
| - await Future.wait(futures);
|
| - Expect.listEquals([
|
| - "1:a",
|
| - "2:ab",
|
| - "1:b",
|
| - "4:abel",
|
| - "3:abe",
|
| - "4:bell",
|
| - ], events);
|
| - });
|
| -
|
| - asyncEnd();
|
| -}
|
| -
|
| -expectCompletes(future, result) {
|
| - asyncStart();
|
| - future.then((v) {
|
| - if (result is List) {
|
| - Expect.listEquals(result, v);
|
| - } else {
|
| - Expect.equals(v, result);
|
| - }
|
| - asyncEnd();
|
| - }, onError: (e, s) {
|
| - Expect.fail("$e\n$s");
|
| - });
|
| -}
|
| -
|
| -void test(name, func) {
|
| - asyncStart();
|
| - func().then((_) {
|
| - asyncEnd();
|
| - }, onError: (e, s) {
|
| - Expect.fail("$name: $e\n$s");
|
| - });
|
| -}
|
| -
|
| -var strings = const [
|
| - "a",
|
| - "ab",
|
| - "b",
|
| - "abel",
|
| - "abe",
|
| - "bell",
|
| - "able",
|
| - "abba",
|
| - "lea"
|
| -];
|
| -
|
| -Stream<String> get stringStream async* {
|
| - for (var string in strings) {
|
| - yield string;
|
| - }
|
| -}
|
| -
|
| -Stream get emptyStream async* {}
|
| -
|
| -Stream repeatStream(int count, value) async* {
|
| - for (var i = 0; i < count; i++) {
|
| - yield value;
|
| - }
|
| -}
|
| -
|
| -// Just some valid stack trace.
|
| -var stack = StackTrace.current;
|
| -
|
| -Stream<String> stringErrorStream(int errorAfter) async* {
|
| - for (int i = 0; i < strings.length; i++) {
|
| - yield strings[i];
|
| - if (i == errorAfter) {
|
| - // Emit error, but continue afterwards.
|
| - yield* new Future.error("BAD", stack).asStream();
|
| - }
|
| - }
|
| -}
|
| -
|
| -Stream intStream(int count, [int start = 0]) async* {
|
| - for (int i = 0; i < count; i++) {
|
| - yield start++;
|
| - }
|
| -}
|
| -
|
| -Stream timerStream(int count, Duration interval) async* {
|
| - for (int i = 0; i < count; i++) {
|
| - await new Future.delayed(interval);
|
| - yield i;
|
| - }
|
| -}
|
|
|