blob: 5d9ddcb8a2e8d60a225b020c3ca7807cacd652c0 [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.
import "dart:async";
import "dart:io";
import "package:async_helper/async_helper.dart";
import "package:expect/expect.dart";
void testPauseResumeCancelStream() {
asyncStart();
Directory.systemTemp.createTemp('dart_file_stream').then((d) {
var file = new File("${d.path}/file");
new File(Platform.executable)
.openRead()
.cast<List<int>>()
.pipe(file.openWrite())
.then((_) {
var subscription;
subscription = file.openRead().listen((data) {
subscription.pause();
subscription.resume();
void close() {
d.deleteSync(recursive: true);
asyncEnd();
}
var future = subscription.cancel();
if (future != null) {
future.whenComplete(close);
} else {
close();
}
}, onDone: () {
Expect.fail('the stream was canceled, onDone should not happen');
});
});
});
}
void testStreamIsEmpty() {
asyncStart();
Directory.systemTemp.createTemp('dart_file_stream').then((d) {
var file = new File("${d.path}/file");
new File(Platform.executable)
.openRead()
.cast<List<int>>()
.pipe(file.openWrite())
.then((_) {
// isEmpty will cancel the stream after first data event.
file.openRead().isEmpty.then((empty) {
Expect.isFalse(empty);
d.deleteSync(recursive: true);
asyncEnd();
});
});
});
}
Future<void> testStreamAppendedToAfterOpen() async {
asyncStart();
final pipe = Pipe.createSync();
pipe.write.add("Hello World".codeUnits);
int i = 0;
await pipe.read.listen((event) {
Expect.listEquals("Hello World".codeUnits, event);
if (i < 10) {
pipe.write.add("Hello World".codeUnits);
++i;
} else {
pipe.write.close();
}
}).asFuture();
asyncEnd();
}
void main() async {
testPauseResumeCancelStream();
testStreamIsEmpty();
await testStreamAppendedToAfterOpen();
}