blob: 76634cb7abad0ed0a8b0c6fb12b1b885cf015b64 [file] [log] [blame]
// Copyright (c) 2022, 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.
@Retry(0)
@Timeout(Duration(minutes: 2))
import 'dart:async';
import 'dart:io';
import 'package:dwds/shared/batched_stream.dart';
import 'package:test/expect.dart';
import 'package:test/scaffolding.dart';
void main() {
group('Batched stream controller', () {
test(
'emits batches',
() async {
const size = 100;
const delay = Duration(milliseconds: 1000);
final batchOne = List<int>.generate(size, (index) => index);
final batchTwo = List<int>.generate(size, (index) => size + index);
// Setup controller.
final controller = BatchedStreamController<int>(delay: 500);
// Verify the output.
expect(
controller.stream,
emitsInOrder([
batchOne,
batchTwo,
]),
);
// Add input.
final inputController = StreamController<int>();
final inputAdded = controller.sink.addStream(inputController.stream);
batchOne.forEach(inputController.sink.add);
await Future.delayed(delay);
batchTwo.forEach(inputController.sink.add);
await inputController.close();
await inputAdded;
await controller.close();
},
// https://github.com/dart-lang/webdev/issues/2126
skip: Platform.isWindows,
);
test('emits all inputs in order', () async {
const size = 10;
const delay = Duration(milliseconds: 200);
// Setup controller.
final controller = BatchedStreamController<int>(delay: 500);
// Setup output listener.
final output = controller.stream.toList();
// Add input.
final inputController = StreamController<int>();
final inputAdded = controller.sink.addStream(inputController.stream);
final input = List<int>.generate(size, (index) => index);
for (var e in input) {
inputController.sink.add(e);
await Future.delayed(delay);
}
await inputController.close();
await inputAdded;
await controller.close();
// Verify the output.
final result = await output;
expect(result.length, greaterThan(1));
final flattened = <int>[];
result.forEach(flattened.addAll);
expect(flattened, input);
});
});
}