5b391babbf
* Move each section of the original file into a new test file.
* Remove the use of multi-tests entirely to avoid running ~90% of these
tests 5 times each.
* async_star2_test/02 became cancel_while_paused_at_yield_test.dart. I will
approve the existing failures of this newly named test.
* All other sections marked as multi-tests actually appear to be passing on
all configurations so they didn't need to be broken out.
* Cleanup now unnecessary lines in the status file.
Change-Id: I5d62a35ffff1248532fa9ffade1a7259f83814da
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/130890
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Bob Nystrom <rnystrom@google.com>
149 lines
3.0 KiB
Dart
149 lines
3.0 KiB
Dart
// Copyright (c) 2020, 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:async_helper/async_minitest.dart';
|
|
|
|
import 'utils.dart';
|
|
|
|
main() {
|
|
test('simple stream', () {
|
|
f(s) async {
|
|
var r = 0;
|
|
await for (var v in s) r += v;
|
|
return r;
|
|
}
|
|
|
|
return f(mkStream(5)).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
|
|
test('simple stream, await', () {
|
|
f(s) async {
|
|
var r = 0;
|
|
await for (var v in s) r += await Future.microtask(() => v);
|
|
return r;
|
|
}
|
|
|
|
return f(mkStream(5)).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
|
|
test('simple stream - take', () {
|
|
f(s) async {
|
|
var r = 0;
|
|
await for (var v in s.take(5)) r += v;
|
|
return r;
|
|
}
|
|
|
|
return f(mkStream(10)).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
|
|
test('simple stream reyield', () {
|
|
f(s) async* {
|
|
var r = 0;
|
|
await for (var v in s) yield r += v;
|
|
}
|
|
|
|
return expectList(f(mkStream(5)), [0, 1, 3, 6, 10]);
|
|
});
|
|
|
|
test('simple stream, await, reyield', () {
|
|
f(s) async* {
|
|
var r = 0;
|
|
await for (var v in s) yield r += await Future.microtask(() => v);
|
|
}
|
|
|
|
return expectList(f(mkStream(5)), [0, 1, 3, 6, 10]);
|
|
});
|
|
|
|
test('simple stream - take, reyield', () {
|
|
f(s) async* {
|
|
var r = 0;
|
|
await for (var v in s.take(5)) yield r += v;
|
|
}
|
|
|
|
return expectList(f(mkStream(10)), [0, 1, 3, 6, 10]);
|
|
});
|
|
|
|
test('nested', () {
|
|
f() async {
|
|
var r = 0;
|
|
await for (var i in mkStream(5)) {
|
|
await for (var j in mkStream(3)) {
|
|
r += i * j;
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f().then((v) {
|
|
expect(v, equals((1 + 2 + 3 + 4) * (1 + 2)));
|
|
});
|
|
});
|
|
|
|
test('nested, await', () {
|
|
f() async {
|
|
var r = 0;
|
|
await for (var i in mkStream(5)) {
|
|
await for (var j in mkStream(3)) {
|
|
r += await Future.microtask(() => i * j);
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f().then((v) {
|
|
expect(v, equals((1 + 2 + 3 + 4) * (1 + 2)));
|
|
});
|
|
});
|
|
|
|
test('nested, await * 2', () {
|
|
f() async {
|
|
var r = 0;
|
|
await for (var i in mkStream(5)) {
|
|
var ai = await Future.microtask(() => i);
|
|
await for (var j in mkStream(3)) {
|
|
r += await Future.microtask(() => ai * j);
|
|
}
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f().then((v) {
|
|
expect(v, equals((1 + 2 + 3 + 4) * (1 + 2)));
|
|
});
|
|
});
|
|
|
|
test('await pauses loop', () {
|
|
var sc;
|
|
var i = 0;
|
|
void send() {
|
|
if (i == 5) {
|
|
sc.close();
|
|
} else {
|
|
sc.add(i++);
|
|
}
|
|
}
|
|
|
|
sc = StreamController(onListen: send, onResume: send);
|
|
f(s) async {
|
|
var r = 0;
|
|
await for (var i in s) {
|
|
r += await Future.delayed(ms * 10, () => i);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
return f(sc.stream).then((v) {
|
|
expect(v, equals(10));
|
|
});
|
|
});
|
|
}
|