| Index: tests/lib_strong/async/stream_periodic4_test.dart
|
| diff --git a/tests/lib_strong/async/stream_periodic4_test.dart b/tests/lib_strong/async/stream_periodic4_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fac4742c1a15fc5e623178ccd1ffe28db7f5c60a
|
| --- /dev/null
|
| +++ b/tests/lib_strong/async/stream_periodic4_test.dart
|
| @@ -0,0 +1,50 @@
|
| +// Copyright (c) 2013, 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.
|
| +
|
| +// Test merging streams.
|
| +library dart.test.stream_from_iterable;
|
| +
|
| +import "dart:async";
|
| +import 'package:unittest/unittest.dart';
|
| +
|
| +void runTest(period, maxElapsed, pauseDuration) {
|
| + Function done = expectAsync(() { });
|
| +
|
| + Stopwatch watch = new Stopwatch()..start();
|
| + Stream stream = new Stream.periodic(period, (x) => x);
|
| + var subscription;
|
| + subscription = stream.take(5).listen((i) {
|
| + if (watch.elapsed > maxElapsed) {
|
| + // Test failed in this configuration. Try with more time (or give up
|
| + // if we reached an unreasonable maxElapsed).
|
| + if (maxElapsed > const Duration(seconds: 2)) {
|
| + // Give up.
|
| + expect(true, false);
|
| + } else {
|
| + subscription.cancel();
|
| + // Call 'done' ourself, since it won't be invoked in the onDone handler.
|
| + runTest(period * 2, maxElapsed * 2, pauseDuration * 2);
|
| + done();
|
| + return;
|
| + }
|
| + }
|
| + watch.reset();
|
| + if (i == 2) {
|
| + subscription.pause();
|
| + watch.stop();
|
| + new Timer(pauseDuration, () {
|
| + watch.start();
|
| + subscription.resume();
|
| + });
|
| + }
|
| + }, onDone: done);
|
| +}
|
| +
|
| +main() {
|
| + test("stream-periodic4", () {
|
| + runTest(const Duration(milliseconds: 2),
|
| + const Duration(milliseconds: 8),
|
| + const Duration(milliseconds: 10));
|
| + });
|
| +}
|
|
|