blob: 2118ae75ffa070d731f384812b06cfbca443422a [file] [log] [blame]
// 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 filevents.
import 'dart:async';
import 'package:async/async.dart';
import 'package:test/test.dart';
void main() {
group('.slices', () {
test('empty', () {
expect(Stream.empty().slices(1).toList(), completion(equals([])));
});
test('with the same length as the iterable', () {
expect(
Stream.fromIterable([1, 2, 3]).slices(3).toList(),
completion(equals([
[1, 2, 3]
])));
});
test('with a longer length than the iterable', () {
expect(
Stream.fromIterable([1, 2, 3]).slices(5).toList(),
completion(equals([
[1, 2, 3]
])));
});
test('with a shorter length than the iterable', () {
expect(
Stream.fromIterable([1, 2, 3]).slices(2).toList(),
completion(equals([
[1, 2],
[3]
])));
});
test('with length divisible by the iterable\'s', () {
expect(
Stream.fromIterable([1, 2, 3, 4]).slices(2).toList(),
completion(equals([
[1, 2],
[3, 4]
])));
});
test('refuses negative length', () {
expect(() => Stream.fromIterable([1]).slices(-1), throwsRangeError);
});
test('refuses length 0', () {
expect(() => Stream.fromIterable([1]).slices(0), throwsRangeError);
});
});
group('.firstOrNull', () {
test('returns the first data event', () {
expect(
Stream.fromIterable([1, 2, 3, 4]).firstOrNull, completion(equals(1)));
});
test('returns the first error event', () {
expect(Stream.error('oh no').firstOrNull, throwsA('oh no'));
});
test('returns null for an empty stream', () {
expect(Stream.empty().firstOrNull, completion(isNull));
});
test('cancels the subscription after an event', () async {
var isCancelled = false;
var controller = StreamController<int>(onCancel: () {
isCancelled = true;
});
controller.add(1);
await expectLater(controller.stream.firstOrNull, completion(equals(1)));
expect(isCancelled, isTrue);
});
test('cancels the subscription after an error', () async {
var isCancelled = false;
var controller = StreamController<int>(onCancel: () {
isCancelled = true;
});
controller.addError('oh no');
await expectLater(controller.stream.firstOrNull, throwsA('oh no'));
expect(isCancelled, isTrue);
});
});
}