public void Seek_ThrowsIfBeforeOrigin(int offset, SeekOrigin origin) { // Arrange var mockInnerStream = new Mock <Stream>(); mockInnerStream.Setup(s => s.CanSeek).Returns(true); mockInnerStream.Setup(s => s.Length).Returns(10L); var range = new RangeItemHeaderValue(0, 25L); using (var rangeStream = new ByteRangeStream(mockInnerStream.Object, range)) { // Act & Assert Assert.Throws <IOException>(() => rangeStream.Seek(offset, origin)); } }
public void Seek_CanMoveAfterLength(int offset, SeekOrigin origin) { // Arrange var expectedPosition = 25L; var mockInnerStream = new Mock <Stream>(); mockInnerStream.Setup(s => s.CanSeek).Returns(true); mockInnerStream.Setup(s => s.Length).Returns(10L); var range = new RangeItemHeaderValue(0L, 10L); using (var rangeStream = new ByteRangeStream(mockInnerStream.Object, range)) { // Act var newPosition = rangeStream.Seek(offset, origin); // Assert Assert.Equal(expectedPosition, newPosition); Assert.Equal(expectedPosition, rangeStream.Position); } }
public async Task Seek_PositionsNextRead(int offset, SeekOrigin origin) { // Arrange var originalText = "890123456789"; var range = new RangeItemHeaderValue(2L, null); using (var innerStream = new MemoryStream()) using (var writer = new StreamWriter(innerStream)) { await writer.WriteAsync(originalText); await writer.FlushAsync(); using (var rangeStream = new ByteRangeStream(innerStream, range)) { // Act rangeStream.Seek(offset, origin); // Assert var read = rangeStream.ReadByte(); Assert.Equal('5', (char)read); } } }