mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:16:51 +00:00
b101a7d002
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Leaf Petersen <leafp@google.com>
69 lines
2.9 KiB
Dart
69 lines
2.9 KiB
Dart
// 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.
|
|
|
|
// @dart = 2.9
|
|
|
|
import "dart:async";
|
|
import "package:expect/expect.dart";
|
|
|
|
class TypeTest<T, NT> {
|
|
void call(object, name) {
|
|
Expect.isTrue(object is T, "$name is $T");
|
|
Expect.isFalse(object is NT, "$name is! $NT");
|
|
}
|
|
}
|
|
|
|
main() {
|
|
var checkIntStream = new TypeTest<Stream<int>, Stream<String>>();
|
|
var checkIntFuture = new TypeTest<Future<int>, Future<String>>();
|
|
var checkBoolFuture = new TypeTest<Future<bool>, Future<String>>();
|
|
var checkStringFuture = new TypeTest<Future<String>, Future<int>>();
|
|
var checkIntSetFuture = new TypeTest<Future<Set<int>>, Future<Set<String>>>();
|
|
var checkIntListFuture =
|
|
new TypeTest<Future<List<int>>, Future<List<String>>>();
|
|
var checkIntSubscription =
|
|
new TypeTest<StreamSubscription<int>, StreamSubscription<String>>();
|
|
|
|
// Generic function used as parameter for, e.g., `skipWhile` and `reduce`.
|
|
f([_1, _2]) => throw "unreachable";
|
|
|
|
bool testIntStream(stream(), name, int recursionDepth) {
|
|
checkIntStream(stream(), name);
|
|
if (recursionDepth > 0) {
|
|
checkIntSubscription(stream().listen(null), "$name.listen");
|
|
|
|
checkIntFuture(stream().first, "$name.first");
|
|
checkIntFuture(stream().last, "$name.last");
|
|
checkIntFuture(stream().single, "$name.single");
|
|
checkIntFuture(stream().singleWhere(f), "$name.singleWhere");
|
|
checkIntFuture(stream().elementAt(2), "$name.elementAt");
|
|
checkIntFuture(stream().reduce(f), "$name.reduce");
|
|
checkIntListFuture(stream().toList(), "$name.toList");
|
|
checkIntSetFuture(stream().toSet(), "$name.toSert");
|
|
|
|
checkIntFuture(stream().length, "$name.length");
|
|
checkBoolFuture(stream().isEmpty, "$name.is");
|
|
checkBoolFuture(stream().any(f), "$name.any");
|
|
checkBoolFuture(stream().every(f), "$name.every");
|
|
checkBoolFuture(stream().contains(null), "$name.contains");
|
|
checkStringFuture(stream().join(), "$name.join");
|
|
|
|
var n = recursionDepth - 1;
|
|
testIntStream(() => stream().where(f), "$name.where", n);
|
|
testIntStream(() => stream().take(2), "$name.take", n);
|
|
testIntStream(() => stream().takeWhile(f), "$name.takeWhile", n);
|
|
testIntStream(() => stream().skip(2), "$name.skip", n);
|
|
testIntStream(() => stream().skipWhile(f), "$name.skipWhile", n);
|
|
testIntStream(() => stream().distinct(f), "$name.distinct", n);
|
|
testIntStream(() => stream().handleError(f), "$name.handleError", n);
|
|
testIntStream(
|
|
() => stream().asBroadcastStream(), "$name.asBroadcastStream", n);
|
|
}
|
|
}
|
|
|
|
testIntStream(() => new StreamController<int>().stream, "Stream<int>", 3);
|
|
testIntStream(() => new StreamController<int>.broadcast().stream,
|
|
"BroadcastStream<int>", 3);
|
|
}
|