blob: 11928fef2e1fd03263c7aca36555a9df1ff62e26 [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.
// Test that transformations like `map` and `where` preserve broadcast flag.
library stream_join_test;
import 'dart:async';
import 'event_helper.dart';
import 'package:unittest/unittest.dart';
import "package:expect/expect.dart";
void testStream(String name,
StreamController create(),
Stream getStream(controller)) {
test("$name-map", () {
var c = create();
var s = getStream(c);
Stream newStream = s.map((x) => x + 1);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(43, v);
}));
c.add(42);
c.close();
});
test("$name-where", () {
var c = create();
var s = getStream(c);
Stream newStream = s.where((x) => x.isEven);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(37);
c.add(42);
c.add(87);
c.close();
});
test("$name-handleError", () {
var c = create();
var s = getStream(c);
Stream newStream = s.handleError((x, s) {});
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.addError("BAD1");
c.add(42);
c.addError("BAD2");
c.close();
});
test("$name-expand", () {
var c = create();
var s = getStream(c);
Stream newStream = s.expand((x) => x.isEven ? [x] : []);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(37);
c.add(42);
c.add(87);
c.close();
});
test("$name-transform", () {
var c = create();
var s = getStream(c);
// TODO: find name of default transformer
var t = new StreamTransformer.fromHandlers(
handleData: (value, EventSink sink) { sink.add(value); }
);
Stream newStream = s.transform(t);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(42);
c.close();
});
test("$name-take", () {
var c = create();
var s = getStream(c);
Stream newStream = s.take(1);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(42);
c.add(37);
c.close();
});
test("$name-takeWhile", () {
var c = create();
var s = getStream(c);
Stream newStream = s.takeWhile((x) => x.isEven);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(42);
c.add(37);
c.close();
});
test("$name-skip", () {
var c = create();
var s = getStream(c);
Stream newStream = s.skip(1);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(37);
c.add(42);
c.close();
});
test("$name-skipWhile", () {
var c = create();
var s = getStream(c);
Stream newStream = s.skipWhile((x) => x.isOdd);
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(37);
c.add(42);
c.close();
});
test("$name-distinct", () {
var c = create();
var s = getStream(c);
Stream newStream = s.distinct();
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(42);
c.add(42);
c.close();
});
test("$name-timeout", () {
var c = create();
var s = getStream(c);
Stream newStream = s.timeout(const Duration(seconds: 1));
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(42, v);
}));
c.add(42);
c.close();
});
test("$name-asyncMap", () {
var c = create();
var s = getStream(c);
Stream newStream = s.asyncMap((x) => new Future.value(x + 1));
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(43, v);
}));
c.add(42);
c.close();
});
test("$name-asyncExpand", () {
var c = create();
var s = getStream(c);
Stream newStream = s.asyncExpand((x) => new Stream.fromIterable([x + 1]));
Expect.equals(s.isBroadcast, newStream.isBroadcast);
newStream.single.then(expectAsync((v) {
Expect.equals(43, v);
}));
c.add(42);
c.close();
});
}
main() {
testStream("singlesub", () => new StreamController(), (c) => c.stream);
testStream("broadcast", () => new StreamController.broadcast(),
(c) => c.stream);
testStream("asBroadcast", () => new StreamController(),
(c) => c.stream.asBroadcastStream());
testStream("broadcast.asBroadcast", () => new StreamController.broadcast(),
(c) => c.stream.asBroadcastStream());
}