public async Task PartialStream_WithOffsetAndLength_Seek_WorksCorrectly() { // Arrange #if !NET461 && !NETCOREAPP2_1 await #endif using var originalStream = new MemoryStream(); await originalStream.FillWithRandomBytesAsync(1024); const int offset = 10; const int length = 100; #if !NET461 && !NETCOREAPP2_1 await #endif using var partialStream = new PartialStream(originalStream, offset, length); // Act const int additionalOffset = 40; partialStream.Seek(additionalOffset, SeekOrigin.Begin); // Assert #if !NET461 && !NETCOREAPP2_1 await #endif using var outputStream = new MemoryStream(); await partialStream.CopyToAsync(outputStream); var originalPortion = originalStream .ToArray() .Skip(offset + additionalOffset) .Take(length - additionalOffset) .ToArray(); outputStream.ToArray().Should().Equal(originalPortion); }
public async Task PartialStream_WithOffset_ReadToEnd_ReturnsOnlyDataInRange() { // Arrange #if !NET461 && !NETCOREAPP2_1 await #endif using var originalStream = new MemoryStream(); await originalStream.FillWithRandomBytesAsync(1024); const int offset = 10; #if !NET461 && !NETCOREAPP2_1 await #endif using var partialStream = new PartialStream(originalStream, offset, null); // Act #if !NET461 && !NETCOREAPP2_1 await #endif using var outputStream = new MemoryStream(); await partialStream.CopyToAsync(outputStream); // Assert var originalPortion = originalStream.ToArray().Skip(offset).ToArray(); outputStream.Length.Should().Be(originalStream.Length - offset); outputStream.ToArray().Should().Equal(originalPortion); }
public async Task PartialStream_WithOffsetAndLength_InnerPositionChanged_StillReadsCorrectly() { // Arrange #if !NET461 && !NETCOREAPP2_1 await #endif using var originalStream = new MemoryStream(); await originalStream.FillWithRandomBytesAsync(1024); const int offset = 10; const int length = 100; #if !NET461 && !NETCOREAPP2_1 await #endif using var partialStream = new PartialStream(originalStream, offset, length); // Act originalStream.Position = 1000; // Assert #if !NET461 && !NETCOREAPP2_1 await #endif using var outputStream = new MemoryStream(); await partialStream.CopyToAsync(outputStream); var originalPortion = originalStream.ToArray().Skip(offset).Take(length).ToArray(); outputStream.ToArray().Should().Equal(originalPortion); }
public async Task ExportAsync(Stream stream) { var ms = new MemoryStream(); // find version // -> http://dageron.com/?page_id=5446&lang=en var version = ((file.GraphicsFlags & 0xF0000000) >> 28) | ((file.SystemFlags & 0xF0000000) >> 24); var writer = new DataWriter(ms); writer.Write((uint)0x07435352); writer.Write((uint)version); writer.Write((uint)file.SystemFlags); writer.Write((uint)file.GraphicsFlags); ms.Position = 0; await ms.CopyToAsync(stream); var resourceStream = new PartialStream( archiveWrapper.archive_.BaseStream, delegate() // offset { return((file.FileOffset * RageArchiveWrapper7.BLOCK_SIZE) + 16); }, delegate() // size { return(file.FileSize); } ); await resourceStream.CopyToAsync(stream); }
public async Task PartialStream_WithOffsetAndLength_ReadToEnd_ReturnsOnlyDataInRange() { // Arrange using var originalStream = new MemoryStream(); await originalStream.FillWithRandomBytesAsync(1024); const int offset = 10; const int length = 100; using var partialStream = new PartialStream(originalStream, offset, length); // Act using var outputStream = new MemoryStream(); await partialStream.CopyToAsync(outputStream); // Assert var originalPortion = originalStream.ToArray().Skip(offset).Take(length).ToArray(); outputStream.Length.Should().Be(length); outputStream.ToArray().Should().Equal(originalPortion); }