blob: 722ec1fbc872e6fdc49393c31ef0048c11414fbd [file] [log] [blame]
// Copyright 2017, 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.
import 'dart:async';
import 'dart:convert';
import 'package:io/io.dart' hide sharedStdIn;
import 'package:test/test.dart';
void main() {
StreamController<String> fakeStdIn;
SharedStdIn sharedStdIn;
setUp(() async {
fakeStdIn = new StreamController<String>(sync: true);
sharedStdIn = new SharedStdIn(fakeStdIn.stream.map((s) => s.codeUnits));
});
test('should allow a single subscriber', () async {
final logs = <String>[];
final sub = sharedStdIn.transform(UTF8.decoder).listen(logs.add);
fakeStdIn.add('Hello World');
await sub.cancel();
expect(logs, ['Hello World']);
});
test('should allow multiple subscribers', () async {
final logs = <String>[];
final asUtf8 = sharedStdIn.transform(UTF8.decoder);
var sub = asUtf8.listen(logs.add);
fakeStdIn.add('Hello World');
await sub.cancel();
sub = asUtf8.listen(logs.add);
fakeStdIn.add('Goodbye World');
await sub.cancel();
expect(logs, ['Hello World', 'Goodbye World']);
});
test('should throw if a subscriber is still active', () async {
final active = sharedStdIn.listen((_) {});
expect(() => sharedStdIn.listen((_) {}), throwsStateError);
await active.cancel();
expect(() => sharedStdIn.listen((_) {}), returnsNormally);
});
}