blob: 11358d27b8f05a2f8becca2caf3c19e4e4c63492 [file] [log] [blame]
// 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);
}