From 0ef7235c98c194330ec1dcc10cb3d41b6cb9e517 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 5 May 2018 22:43:03 +1000 Subject: [PATCH] Add skip test --- .../Components/DoubleBufferedStreamReader.cs | 1 + .../Jpg/DoubleBufferedStreamReaderTests.cs | 42 ++++++++++++++++--- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs index 164ca7cc1..eb91590e8 100644 --- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs +++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs @@ -64,6 +64,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components { // Reset everything. It's easier than tracking. this.position = (int)value; + this.stream.Seek(this.position, SeekOrigin.Begin); this.bytesRead = ChunkLength; } } diff --git a/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs index bc099bdc5..be71e554f 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs @@ -11,12 +11,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg { public class DoubleBufferedStreamReaderTests { - private MemoryManager manager = Configuration.Default.MemoryManager; + private readonly MemoryManager manager = Configuration.Default.MemoryManager; [Fact] public void DoubleBufferedStreamReaderCanReadSingleByteFromOrigin() { - using (MemoryStream stream = CreateTestStream()) + using (MemoryStream stream = this.CreateTestStream()) { byte[] expected = stream.ToArray(); var reader = new DoubleBufferedStreamReader(this.manager, stream); @@ -32,7 +32,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg [Fact] public void DoubleBufferedStreamReaderCanReadSubsequentSingleByteCorrectly() { - using (MemoryStream stream = CreateTestStream()) + using (MemoryStream stream = this.CreateTestStream()) { byte[] expected = stream.ToArray(); var reader = new DoubleBufferedStreamReader(this.manager, stream); @@ -63,7 +63,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg [Fact] public void DoubleBufferedStreamReaderCanReadMultipleBytesFromOrigin() { - using (MemoryStream stream = CreateTestStream()) + using (MemoryStream stream = this.CreateTestStream()) { byte[] buffer = new byte[2]; byte[] expected = stream.ToArray(); @@ -82,7 +82,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg [Fact] public void DoubleBufferedStreamReaderCanReadSubsequentMultipleByteCorrectly() { - using (MemoryStream stream = CreateTestStream()) + using (MemoryStream stream = this.CreateTestStream()) { byte[] buffer = new byte[2]; byte[] expected = stream.ToArray(); @@ -115,6 +115,38 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg } } + [Fact] + public void DoubleBufferedStreamReaderCanSkip() + { + using (MemoryStream stream = this.CreateTestStream()) + { + byte[] expected = stream.ToArray(); + var reader = new DoubleBufferedStreamReader(this.manager, stream); + + int skip = 50; + int plusOne = 1; + int skip2 = DoubleBufferedStreamReader.ChunkLength; + + // Skip + reader.Skip(skip); + Assert.Equal(skip, reader.Position); + Assert.Equal(stream.Position, reader.Position); + + // Read + Assert.Equal(expected[skip], reader.ReadByte()); + + // Skip Again + reader.Skip(skip2); + + // First Skap + First Read + Second Skip + int position = skip + plusOne + skip2; + + Assert.Equal(position, reader.Position); + Assert.Equal(stream.Position, reader.Position); + Assert.Equal(expected[position], reader.ReadByte()); + } + } + private MemoryStream CreateTestStream() { byte[] buffer = new byte[DoubleBufferedStreamReader.ChunkLength * 3];