blob: 1ef8eafbda0cedb534fdc05a6d942aacd068010c [file] [log] [blame]
// Copyright (c) 2023, 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_helper.dart';
import "package:expect/expect.dart";
import '../../language/static_type_helper.dart';
void main() async {
asyncStart();
var futures = [for (var i = 0; i < 5; i++) Future<int>.value(i)];
var errors = [for (var i = 0; i < 5; i++) Future<int>.error("e$i")..ignore()];
// Empty list.
Expect.listEquals([], await <Future<int>>[].wait);
// Single future.
Expect.listEquals([0], await <Future<int>>[futures[0]].wait);
// Multiple future.
Expect.listEquals([0, 1, 2, 3, 4], await futures.wait);
// Single error.
try {
await [futures[0], futures[1], errors[2], futures[3], futures[4]].wait;
Expect.fail("Didn't throw");
} on ParallelWaitError<List<int?>, List<AsyncError?>> catch (e) {
Expect.equals(0, e.values[0]);
Expect.equals(1, e.values[1]);
Expect.isNull(e.values[2]);
Expect.equals(3, e.values[3]);
Expect.equals(4, e.values[4]);
Expect.isNull(e.errors[0]);
Expect.isNull(e.errors[1]);
Expect.equals("e2", e.errors[2]?.error);
Expect.isNull(e.errors[3]);
Expect.isNull(e.errors[4]);
}
// Multiple errors.
try {
await [futures[0], errors[1], futures[2], errors[3], futures[4]].wait;
Expect.fail("Didn't throw");
} on ParallelWaitError<List<int?>, List<AsyncError?>> catch (e) {
Expect.equals(0, e.values[0]);
Expect.isNull(e.values[1]);
Expect.equals(2, e.values[2]);
Expect.isNull(e.values[3]);
Expect.equals(4, e.values[4]);
Expect.isNull(e.errors[0]);
Expect.equals("e1", e.errors[1]?.error);
Expect.isNull(e.errors[2]);
Expect.equals("e3", e.errors[3]?.error);
Expect.isNull(e.errors[4]);
}
// All errors.
try {
await errors.wait;
Expect.fail("Didn't throw");
} on ParallelWaitError<List<int?>, List<AsyncError?>> catch (e) {
Expect.isNull(e.values[0]);
Expect.isNull(e.values[1]);
Expect.isNull(e.values[2]);
Expect.isNull(e.values[3]);
Expect.isNull(e.values[4]);
Expect.equals("e0", e.errors[0]?.error);
Expect.equals("e1", e.errors[1]?.error);
Expect.equals("e2", e.errors[2]?.error);
Expect.equals("e3", e.errors[3]?.error);
Expect.equals("e4", e.errors[4]?.error);
}
asyncEnd();
}