a2c7cd6c3f
(There are so many subdirectories under language/ that I figure going a letter at a time is easier to review than going a subdirectory at a time and sending out a huge flurry of tiny CLs.) Change-Id: Ie899b93c5a5f502ca67953b722cecb68c5c6d233 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/400146 Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Lasse Nielsen <lrn@google.com>
97 lines
1.7 KiB
Dart
97 lines
1.7 KiB
Dart
// 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.
|
|
|
|
import "dart:async";
|
|
import "package:expect/async_helper.dart";
|
|
import "package:expect/expect.dart";
|
|
|
|
Stream<int> foo1() async* {
|
|
yield 1;
|
|
var p = await new Future.value(10);
|
|
yield p + 10;
|
|
}
|
|
|
|
Stream<int> foo2() async* {
|
|
int i = 0;
|
|
while (true) {
|
|
await (new Future.delayed(new Duration(milliseconds: 0), () {}));
|
|
if (i > 10) return;
|
|
yield i;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
Stream<int?> foo3(p) async* {
|
|
int i = 0;
|
|
bool t = false;
|
|
yield null;
|
|
while (true) {
|
|
i++;
|
|
a:
|
|
for (int i = 0; i < p; i++) {
|
|
if (!t) {
|
|
for (int j = 0; j < 3; j++) {
|
|
yield -1;
|
|
t = true;
|
|
break a;
|
|
}
|
|
}
|
|
await 4;
|
|
yield i;
|
|
}
|
|
}
|
|
}
|
|
|
|
Completer<bool> finalized = new Completer<bool>();
|
|
|
|
Stream<int> foo4() async* {
|
|
int i = 0;
|
|
try {
|
|
while (true) {
|
|
yield i;
|
|
i++;
|
|
}
|
|
} finally {
|
|
// Canceling the stream-subscription should run the finalizer.
|
|
finalized.complete(true);
|
|
}
|
|
}
|
|
|
|
Future test() async {
|
|
Expect.listEquals([1, 20], await (foo1().toList()));
|
|
Expect.listEquals([0, 1, 2, 3], await (foo2().take(4).toList()));
|
|
Expect.listEquals([
|
|
null,
|
|
-1,
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
], await (foo3(4).take(10).toList()));
|
|
Expect.listEquals([
|
|
0,
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7,
|
|
8,
|
|
9,
|
|
], await (foo4().take(10).toList()));
|
|
Expect.isTrue(await (finalized.future));
|
|
}
|
|
|
|
main() {
|
|
asyncStart();
|
|
test().then((_) {
|
|
asyncEnd();
|
|
});
|
|
}
|