diff --git a/tests/SharpCompress.Test/Arc/ArcReaderTests.cs b/tests/SharpCompress.Test/Arc/ArcReaderTests.cs index cb8c67e0d..77e5a75db 100644 --- a/tests/SharpCompress.Test/Arc/ArcReaderTests.cs +++ b/tests/SharpCompress.Test/Arc/ArcReaderTests.cs @@ -27,5 +27,13 @@ public ArcReaderTests() [Fact] public void Arc_Crunched_Read() => Read("Arc.crunched.arc"); + + [Theory] + [InlineData("Arc.uncompressed.largefile.arc", CompressionType.None)] + [InlineData("Arc.squeezed.largefile.arc", CompressionType.Squeezed)] + public void Arc_LargeFileTest_Read(string fileName, CompressionType compressionType) + { + ReadForBufferBoundaryCheck(fileName, compressionType); + } } } diff --git a/tests/SharpCompress.Test/Arj/ArjReaderTests.cs b/tests/SharpCompress.Test/Arj/ArjReaderTests.cs index 0b51b08db..96e7e465a 100644 --- a/tests/SharpCompress.Test/Arj/ArjReaderTests.cs +++ b/tests/SharpCompress.Test/Arj/ArjReaderTests.cs @@ -65,7 +65,7 @@ public void Arj_Multi_Reader() public void Arj_LargeFile_ShouldThrow(string fileName, CompressionType compressionType) { var exception = Assert.Throws(() => - Arj_LargeFileTest_Read(fileName, compressionType) + ReadForBufferBoundaryCheck(fileName, compressionType) ); } @@ -74,24 +74,7 @@ public void Arj_LargeFile_ShouldThrow(string fileName, CompressionType compressi [InlineData("Arj.method4.largefile.arj", CompressionType.ArjLZ77)] public void Arj_LargeFileTest_Read(string fileName, CompressionType compressionType) { - using (var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, fileName))) - using ( - var reader = ReaderFactory.Open(stream, new ReaderOptions { LookForHeader = true }) - ) - { - while (reader.MoveToNextEntry()) - { - Assert.Equal(compressionType, reader.Entry.CompressionType); - reader.WriteEntryToDirectory( - SCRATCH_FILES_PATH, - new ExtractionOptions { ExtractFullPath = true, Overwrite = true } - ); - } - } - CompareFilesByPath( - Path.Combine(SCRATCH_FILES_PATH, "news.txt"), - Path.Combine(MISC_TEST_FILES_PATH, "news.txt") - ); + ReadForBufferBoundaryCheck(fileName, compressionType); } private void DoArj_Multi_Reader(string[] archives) diff --git a/tests/SharpCompress.Test/ReaderTests.cs b/tests/SharpCompress.Test/ReaderTests.cs index c5539fc8e..9c89684f4 100644 --- a/tests/SharpCompress.Test/ReaderTests.cs +++ b/tests/SharpCompress.Test/ReaderTests.cs @@ -176,6 +176,27 @@ await reader.WriteEntryToDirectoryAsync( } } + protected void ReadForBufferBoundaryCheck(string fileName, CompressionType compressionType) + { + using var stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, fileName)); + using var reader = ReaderFactory.Open(stream, new ReaderOptions { LookForHeader = true }); + + while (reader.MoveToNextEntry()) + { + Assert.Equal(compressionType, reader.Entry.CompressionType); + + reader.WriteEntryToDirectory( + SCRATCH_FILES_PATH, + new ExtractionOptions { ExtractFullPath = true, Overwrite = true } + ); + } + + CompareFilesByPath( + Path.Combine(SCRATCH_FILES_PATH, "news.txt"), + Path.Combine(MISC_TEST_FILES_PATH, "news.txt") + ); + } + protected void Iterate( string testArchive, string fileOrder, diff --git a/tests/TestArchives/Archives/Arc.squeezed.largefile.arc b/tests/TestArchives/Archives/Arc.squeezed.largefile.arc new file mode 100644 index 000000000..52b872bab Binary files /dev/null and b/tests/TestArchives/Archives/Arc.squeezed.largefile.arc differ diff --git a/tests/TestArchives/Archives/Arc.uncompressed.largefile.arc b/tests/TestArchives/Archives/Arc.uncompressed.largefile.arc new file mode 100644 index 000000000..ecb842607 Binary files /dev/null and b/tests/TestArchives/Archives/Arc.uncompressed.largefile.arc differ