| Index: packages/quiver/test/async/iteration_test.dart
|
| diff --git a/packages/quiver/test/async/iteration_test.dart b/packages/quiver/test/async/iteration_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5eaf245c807f24e3bcd199837bbfe5d37d62b2f1
|
| --- /dev/null
|
| +++ b/packages/quiver/test/async/iteration_test.dart
|
| @@ -0,0 +1,107 @@
|
| +// Copyright 2013 Google Inc. All Rights Reserved.
|
| +//
|
| +// Licensed under the Apache License, Version 2.0 (the "License");
|
| +// you may not use this file except in compliance with the License.
|
| +// You may obtain a copy of the License at
|
| +//
|
| +// http://www.apache.org/licenses/LICENSE-2.0
|
| +//
|
| +// Unless required by applicable law or agreed to in writing, software
|
| +// distributed under the License is distributed on an "AS IS" BASIS,
|
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| +// See the License for the specific language governing permissions and
|
| +// limitations under the License.
|
| +
|
| +library quiver.async.iteration_test;
|
| +
|
| +import 'dart:async';
|
| +
|
| +import 'package:test/test.dart';
|
| +import 'package:quiver/async.dart';
|
| +
|
| +main() {
|
| + group('doWhileAsync', () {
|
| + test('should process the entier iterable if action returns true', () {
|
| + var items = [];
|
| + return doWhileAsync([1, 2, 3], (e) {
|
| + items.add(e);
|
| + return new Future(() => true);
|
| + }).then((r) {
|
| + expect(items, [1, 2, 3]);
|
| + expect(r, true);
|
| + });
|
| + });
|
| +
|
| + test('should process the entier iterable until action returns false', () {
|
| + var items = [];
|
| + return doWhileAsync([1, 2, 3], (e) {
|
| + items.add(e);
|
| + return new Future(() => e < 2);
|
| + }).then((r) {
|
| + expect(items, [1, 2]);
|
| + expect(r, false);
|
| + });
|
| + });
|
| + });
|
| +
|
| + group('reduceAsync', () {
|
| + test('should reduce iterable', () {
|
| + var items = [];
|
| + return reduceAsync([1, 2, 3], 0, (v, e) {
|
| + items.add(e);
|
| + return new Future(() => v + e);
|
| + }).then((r) {
|
| + expect(items, [1, 2, 3]);
|
| + expect(r, 6);
|
| + });
|
| + });
|
| + });
|
| +
|
| + group('forEachAsync', () {
|
| + test('should schedule one outstanding task by default', () {
|
| + int pending = 0;
|
| + var results = [];
|
| + return forEachAsync([1, 2, 3], (i) {
|
| + pending++;
|
| + if (pending > 1) fail("too many pending tasks");
|
| + results.add(i);
|
| + return new Future(() {
|
| + pending--;
|
| + });
|
| + }).then((_) {
|
| + expect(results, [1, 2, 3]);
|
| + });
|
| + });
|
| +
|
| + test('should schedule maxTasks tasks', () {
|
| + int pending = 0;
|
| + int maxPending = 0;
|
| + var results = [];
|
| + return forEachAsync([1, 2, 3, 4], (i) {
|
| + pending++;
|
| + if (pending > 3) fail("too many pending tasks");
|
| + if (pending > maxPending) maxPending = pending;
|
| + results.add(i);
|
| + return new Future(() {
|
| + pending--;
|
| + });
|
| + }, maxTasks: 3).then((_) {
|
| + expect(results, [1, 2, 3, 4]);
|
| + expect(maxPending, 3);
|
| + });
|
| + });
|
| +
|
| + test('should validate maxTasks', () {
|
| + expect(() => forEachAsync([], (i) {}, maxTasks: null), throws);
|
| + expect(() => forEachAsync([], (i) {}, maxTasks: 0), throws);
|
| + });
|
| +
|
| + test('should validate iterable', () {
|
| + expect(() => forEachAsync(null, (i) {}), throws);
|
| + });
|
| +
|
| + test('should complete when given no work', () {
|
| + return forEachAsync([], (i) {});
|
| + });
|
| + });
|
| +}
|
|
|