public void UpdateLengthIfInputStreamGrowsAfterStartReading() {
using (var stream = new MemoryStream()) {
long initialLength = 100;
long length = initialLength;
byte[] buffer = new byte[initialLength];
stream.Write(buffer, 0, buffer.Length);
using (var progress = new ProgressStream(stream)) {
progress.PropertyChanged += delegate(object sender, System.ComponentModel.PropertyChangedEventArgs e) {
var t = sender as ProgressStream;
if (e.PropertyName == Utils.NameOf(() => t.Position)) {
Assert.That(t.Position, Is.LessThanOrEqualTo(length));
Assert.That(t.Length, Is.LessThanOrEqualTo(length));
}
};
progress.Read(buffer, 0, buffer.Length / 2);
stream.Write(buffer, 0, buffer.Length);
length = length + buffer.Length;
progress.Read(buffer, 0, buffer.Length / 2);
progress.Read(buffer, 0, buffer.Length / 2);
progress.Read(buffer, 0, buffer.Length / 2);
stream.Write(buffer, 0, buffer.Length);
length = length + buffer.Length;
progress.Read(buffer, 0, buffer.Length);
}
}
}