Files
sdk/tests/language/async_star/yield_test.dart
Robert Nystrom a2c7cd6c3f Reformat tests/language/a*.
(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>
2024-12-20 02:39:21 -08:00

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();
});
}