public void TargetStreamIsNotCommittedIfSourceStreamNotExhausted() { var targetStream = new Mock <Stream> { CallBase = true }; targetStream.As <IStreamTransacted>(); using (var stream = new ReplicatingReadStream(new MemoryStream(_content), targetStream.Object)) { // don't drain the whole stream stream.Read(new byte[1024], 0, 1024); } // Rollback() is never called explicitly when targetStream is disposed, but neither is Commit() targetStream.As <IStreamTransacted>().Verify(s => s.Commit(), Times.Never()); }
public void SourceStreamCannotBeSoughtBeforeExhaustion() { using (var stream = new ReplicatingReadStream(new MemoryStream(_content), new MemoryStream())) { stream.CanSeek.Should().BeFalse(); // don't drain the whole stream stream.Read(new byte[1024], 0, 1024); Action act = () => stream.Position = 0; act.Should().Throw <InvalidOperationException>() .WithMessage($"{typeof(ReplicatingReadStream).Name} is not seekable while the inner stream has not been thoroughly read and replicated."); act = () => stream.Seek(0, SeekOrigin.Begin); act.Should().Throw <InvalidOperationException>() .WithMessage($"{typeof(ReplicatingReadStream).Name} cannot be sought while the inner stream has not been thoroughly read and replicated."); } }
public void SourceStreamCannotBeSoughtBeforeExhaustion() { using (var stream = new ReplicatingReadStream(new MemoryStream(_content), new MemoryStream())) { Assert.That(stream.CanSeek, Is.False); // don't drain the whole stream stream.Read(new byte[1024], 0, 1024); Assert.That( () => stream.Position = 0, Throws.InstanceOf <InvalidOperationException>() .With.Message.EqualTo( string.Format("{0} is not seekable while the inner stream has not been thoroughly read and replicated.", typeof(ReplicatingReadStream).Name))); Assert.That( () => stream.Seek(0, SeekOrigin.Begin), Throws.InstanceOf <InvalidOperationException>() .With.Message.EqualTo( string.Format("{0} cannot be sought while the inner stream has not been thoroughly read and replicated.", typeof(ReplicatingReadStream).Name))); } }