Files
sdk/tests/language_2/async_star/await_for_test.dart
T
Nicholas Shahan 5b391babbf [tests] Break the monolithic async* tests into multiple files
* 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>
2020-01-14 01:24:26 +00:00

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