2dcd56ef43
There are far too many files here to review everyone carefully. Spot checking most of the diffs look good as test code is generally written with less care than application code so lots of ugly formatting get through. If people notice files where the automated formatting bothers them feel free to comment indicating file names and I'll move spaces within comments to make the formatting cleaner and use comments to force block formatting as I have done for other case where formatting looked bad. BUG= R=efortuna@google.com Review-Url: https://codereview.chromium.org/2771453003 .
95 lines
3.0 KiB
Dart
95 lines
3.0 KiB
Dart
// 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.
|
|
|
|
import "dart:async";
|
|
import "package:unittest/unittest.dart";
|
|
|
|
main() {
|
|
test("stream iterator basic", () async {
|
|
var stream = createStream();
|
|
StreamIterator iterator = new StreamIterator(stream);
|
|
expect(iterator.current, isNull);
|
|
expect(await iterator.moveNext(), isTrue);
|
|
expect(iterator.current, 42);
|
|
expect(await iterator.moveNext(), isTrue);
|
|
expect(iterator.current, 37);
|
|
expect(await iterator.moveNext(), isFalse);
|
|
expect(iterator.current, isNull);
|
|
expect(await iterator.moveNext(), isFalse);
|
|
});
|
|
|
|
test("stream iterator prefilled", () async {
|
|
Stream stream = createStream();
|
|
StreamIterator iterator = new StreamIterator(stream);
|
|
await new Future.delayed(Duration.ZERO);
|
|
expect(iterator.current, isNull);
|
|
expect(await iterator.moveNext(), isTrue);
|
|
expect(iterator.current, 42);
|
|
expect(await iterator.moveNext(), isTrue);
|
|
expect(iterator.current, 37);
|
|
expect(await iterator.moveNext(), isFalse);
|
|
expect(iterator.current, isNull);
|
|
expect(await iterator.moveNext(), isFalse);
|
|
});
|
|
|
|
test("stream iterator error", () async {
|
|
Stream stream = createErrorStream();
|
|
StreamIterator iterator = new StreamIterator(stream);
|
|
expect(await iterator.moveNext(), isTrue);
|
|
expect(iterator.current, 42);
|
|
var hasNext = iterator.moveNext();
|
|
expect(hasNext, throwsA("BAD")); // This is an async expectation,
|
|
await hasNext.catchError((_) {}); // so we have to wait for the future too.
|
|
expect(iterator.current, isNull);
|
|
expect(await iterator.moveNext(), isFalse);
|
|
expect(iterator.current, isNull);
|
|
});
|
|
|
|
test("stream iterator current/moveNext during move", () async {
|
|
Stream stream = createStream();
|
|
StreamIterator iterator = new StreamIterator(stream);
|
|
var hasNext = iterator.moveNext();
|
|
expect(iterator.moveNext, throwsA(isStateError));
|
|
expect(await hasNext, isTrue);
|
|
expect(iterator.current, 42);
|
|
iterator.cancel();
|
|
});
|
|
|
|
test("stream iterator error during cancel", () async {
|
|
Stream stream = createCancelErrorStream();
|
|
StreamIterator iterator = new StreamIterator(stream);
|
|
for (int i = 0; i < 10; i++) {
|
|
expect(await iterator.moveNext(), isTrue);
|
|
expect(iterator.current, i);
|
|
}
|
|
var hasNext = iterator.moveNext(); // active moveNext will be completed.
|
|
var cancel = iterator.cancel();
|
|
expect(cancel, throwsA("BAD"));
|
|
expect(await hasNext, isFalse);
|
|
expect(await iterator.moveNext(), isFalse);
|
|
});
|
|
}
|
|
|
|
Stream createStream() async* {
|
|
yield 42;
|
|
yield 37;
|
|
}
|
|
|
|
Stream createErrorStream() async* {
|
|
yield 42;
|
|
// Emit an error without stopping the generator.
|
|
yield* (new Future.error("BAD").asStream());
|
|
yield 37;
|
|
}
|
|
|
|
/// Create a stream that throws when cancelled.
|
|
Stream createCancelErrorStream() async* {
|
|
int i = 0;
|
|
try {
|
|
while (true) yield i++;
|
|
} finally {
|
|
throw "BAD";
|
|
}
|
|
}
|