From 257272fd42a5ec7e48026cc0157b5be0a1308cab Mon Sep 17 00:00:00 2001 From: Florian Loitsch Date: Fri, 12 Feb 2016 20:29:41 +0100 Subject: [PATCH] Use internal const-constructor. BUG= http://dartbug.com/25760 R=lrn@google.com Review URL: https://codereview.chromium.org/1696453002 . --- CHANGELOG.md | 2 ++ sdk/lib/async/stream.dart | 2 +- tests/lib/async/stream_view_test.dart | 37 +++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/lib/async/stream_view_test.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index 967497e2280..55db4b373f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ The method now only supports one argument for the PEM file name containing the trusted certificates. * Added support to SecurityContext for PKCS12 certificate and key containers. +* `dart:async` + * Made `StreamView` class a `const` class. ## 1.14.2 - 2016-02-09 diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart index 5dae8029000..b69c6fc39e9 100644 --- a/sdk/lib/async/stream.dart +++ b/sdk/lib/async/stream.dart @@ -1495,7 +1495,7 @@ abstract class EventSink implements Sink { class StreamView extends Stream { final Stream _stream; - StreamView(this._stream); + const StreamView(Stream stream) : _stream = stream, super._internal(); bool get isBroadcast => _stream.isBroadcast; diff --git a/tests/lib/async/stream_view_test.dart b/tests/lib/async/stream_view_test.dart new file mode 100644 index 00000000000..5b8308af10a --- /dev/null +++ b/tests/lib/async/stream_view_test.dart @@ -0,0 +1,37 @@ +// 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. + +// Tests the StreamView class. + +import "package:expect/expect.dart"; +import "dart:async"; +import "package:async_helper/async_helper.dart"; + +main() { + asyncStart(); + runTest().whenComplete(asyncEnd); +} + +Future runTest() async { + unreachable([a,b]) { throw "UNREACHABLE"; } + int tick = 0; + ticker() { tick++; } + + asyncStart(); + + // Is const constructor. + Stream s = const StreamView(const Stream.empty()); + + Expect.isFalse(s is Stream); // Respects type parameter. + StreamSubscription sub = + s.listen(unreachable, onError: unreachable, onDone: ticker); + Expect.isFalse(sub is StreamSubscription); // Type parameter in sub. + + Stream iterableStream = new Stream.fromIterable([1, 2, 3]); + Expect.listEquals([1, 2, 3], await iterableStream.toList()); + + asyncEnd(); +} + +Future flushMicrotasks() => new Future.delayed(Duration.ZERO);