From 00aaf1708de8185dc5312e66fda7c2a7d55206be Mon Sep 17 00:00:00 2001 From: Florian Loitsch Date: Mon, 17 Aug 2015 11:34:43 +0200 Subject: [PATCH] Accept a computation that returns a Future for Future.delayed. R=lrn@google.com Review URL: https://codereview.chromium.org//1296623004 . --- sdk/lib/async/future.dart | 2 +- tests/lib/async/future_constructor2_test.dart | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 tests/lib/async/future_constructor2_test.dart diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart index 5d6a65009a4..30016f7acc8 100644 --- a/sdk/lib/async/future.dart +++ b/sdk/lib/async/future.dart @@ -221,7 +221,7 @@ abstract class Future { * See also [Completer] for a way to create and complete a future at a * later time that isn't necessarily after a known fixed duration. */ - factory Future.delayed(Duration duration, [T computation()]) { + factory Future.delayed(Duration duration, [computation()]) { _Future result = new _Future(); new Timer(duration, () { try { diff --git a/tests/lib/async/future_constructor2_test.dart b/tests/lib/async/future_constructor2_test.dart new file mode 100644 index 00000000000..2d64ff4e965 --- /dev/null +++ b/tests/lib/async/future_constructor2_test.dart @@ -0,0 +1,62 @@ +// Copyright (c) 2015, 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. + +library future_delayed_test; + +import 'package:async_helper/async_helper.dart'; +import "package:expect/expect.dart"; +import 'dart:async'; + +Future createIntFuture() { + return new Future.value(499); +} + +unnamed() { + asyncStart(); + new Future(createIntFuture) + .then((x) { + Expect.equals(499, x); + asyncEnd(); + }); +} + +delayed() { + asyncStart(); + new Future.delayed(const Duration(milliseconds: 2), createIntFuture) + .then((x) { + Expect.equals(499, x); + asyncEnd(); + }); +} + +microtask() { + asyncStart(); + new Future.microtask(createIntFuture) + .then((x) { + Expect.equals(499, x); + asyncEnd(); + }); +} + +sync() { + asyncStart(); + new Future.sync(createIntFuture) + .then((x) { + Expect.equals(499, x); + asyncEnd(); + }); +} + +main() { + asyncStart(); + // Test that all the Future constructors take functions that return a Future + // as argument. + // In particular the constructors must not type their argument as + // `T computation()`. + unnamed(); + delayed(); + microtask(); + sync(); + asyncEnd(); +}