| Index: test/stream_events_test.dart
|
| diff --git a/test/stream_events_test.dart b/test/stream_events_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b73dafec6c4d5edff973524c548eca0d73d292a2
|
| --- /dev/null
|
| +++ b/test/stream_events_test.dart
|
| @@ -0,0 +1,223 @@
|
| +// 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_events_test;
|
| +
|
| +import "dart:async";
|
| +
|
| +import "package:async/async.dart" show StreamEvents;
|
| +import "package:test/test.dart";
|
| +
|
| +main() {
|
| + group("next", () {
|
| + test("simple", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + for (int i = 1; i <= 4; i++) {
|
| + expect(await e.next, i);
|
| + }
|
| + expect(e.next, throws);
|
| + });
|
| +
|
| + test("request mutiple", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + var r = await Future.wait(new Iterable.generate(4, (n) => e.next));
|
| + expect(r, [1, 2, 3, 4]);
|
| + await e.close();
|
| + });
|
| +
|
| + test("error", () async {
|
| + var e = new StreamEvents<int>(createErrorStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.next, 2);
|
| + expect(e.next, throws);
|
| + expect(await e.next, 4);
|
| + await e.close();
|
| + });
|
| + });
|
| +
|
| + group("skip", () {
|
| + test("simple-2", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.skip(2), 0);
|
| + expect(await e.next, 4);
|
| + await e.close();
|
| + });
|
| +
|
| + test("0 throws", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(() => e.skip(0), throws);
|
| + await e.close();
|
| + });
|
| +
|
| + test("too large", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.skip(6), 2);
|
| + await e.close();
|
| + });
|
| +
|
| + test("too large later", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.next, 2);
|
| + expect(await e.skip(6), 4);
|
| + await e.close();
|
| + });
|
| +
|
| + test("error", () async {
|
| + var e = new StreamEvents<int>(createErrorStream());
|
| + expect(e.skip(4), throws);
|
| + expect(await e.next, 4);
|
| + await e.close();
|
| + });
|
| + });
|
| +
|
| + group("take", () {
|
| + test("simple-2", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.take(2), [2, 3]);
|
| + expect(await e.next, 4);
|
| + await e.close();
|
| + });
|
| +
|
| + test("0 throws", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(() => e.take(0), throws);
|
| + await e.close();
|
| + });
|
| +
|
| + test("too large", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.take(6), [1, 2, 3, 4]);
|
| + await e.close();
|
| + });
|
| +
|
| + test("too large later", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.next, 2);
|
| + expect(await e.take(6), [3, 4]);
|
| + await e.close();
|
| + });
|
| +
|
| + test("error", () async {
|
| + var e = new StreamEvents<int>(createErrorStream());
|
| + expect(e.take(4), throws);
|
| + expect(await e.next, 4);
|
| + await e.close();
|
| + });
|
| + });
|
| +
|
| + group("rest", () {
|
| + test("simple", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.rest.toList(), [2, 3, 4]);
|
| + });
|
| +
|
| + test("at start", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.rest.toList(), [1, 2, 3, 4]);
|
| + });
|
| +
|
| + test("at end", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + expect(await e.next, 1);
|
| + expect(await e.next, 2);
|
| + expect(await e.next, 3);
|
| + expect(await e.next, 4);
|
| + expect(await e.rest.toList(), []);
|
| + });
|
| +
|
| + test("error", () async {
|
| + var e = new StreamEvents<int>(createErrorStream());
|
| + expect(await e.next, 1);
|
| + var r = e.rest;
|
| + var e2 = new StreamEvents(r);
|
| + expect(await e2.next, 2);
|
| + expect(e2.next, throws);
|
| + expect(await e2.next, 4);
|
| + });
|
| +
|
| + test("closes", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + var stream = e.rest;
|
| + expect(() => e.next, throws);
|
| + expect(() => e.skip(1), throws);
|
| + expect(() => e.take(1), throws);
|
| + expect(() => e.rest, throws);
|
| + expect(() => e.close(), throws);
|
| + });
|
| + });
|
| +
|
| + group("close", () {
|
| + test("anything throws", () async {
|
| + var e = new StreamEvents<int>(createStream());
|
| + await e.close();
|
| + expect(() => e.next, throws);
|
| + expect(() => e.skip(1), throws);
|
| + expect(() => e.take(1), throws);
|
| + expect(() => e.rest, throws);
|
| + expect(() => e.close(), throws);
|
| + });
|
| + });
|
| +
|
| + test("mixed", () async {
|
| + var e = new StreamEvents<int>(createLongStream());
|
| + nextTest(n) {
|
| + for (int i = 0; i < 10; i++) {
|
| + expect(e.next, completion(n + i));
|
| + }
|
| + }
|
| + skipTest(n) {
|
| + expect(e.skip(10), completion(0));
|
| + }
|
| + takeTest(n) {
|
| + expect(e.take(10), completion(new List.generate(10, (i) => n + i)));
|
| + }
|
| + var tests = [nextTest, skipTest, takeTest];
|
| + int counter = 0;
|
| + for (int i = 0; i < tests.length; i++) {
|
| + for (int j = 0; j < tests.length; j++) {
|
| + tests[i](counter);
|
| + tests[j](counter + 10);
|
| + counter += 20;
|
| + }
|
| + }
|
| + expect(e.rest.toList(),
|
| + completion(new List.generate(20, (i) => counter + i)));
|
| + });
|
| +}
|
| +
|
| +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;
|
| +}
|
| +
|
| +Stream<int> createErrorStream() {
|
| + StreamController controller = new StreamController<int>();
|
| + () async{
|
| + controller.add(1);
|
| + await sleep(20);
|
| + controller.add(2);
|
| + await sleep(10);
|
| + controller.addError("To err is divine!");
|
| + await sleep(15);
|
| + controller.add(4);
|
| + }();
|
| + return controller.stream;
|
| +}
|
| +
|
| +Stream<int> createLongStream() async* {
|
| + for (int i = 0; i < 200; i++) yield i;
|
| +}
|
|
|