Skip to content
This repository has been archived by the owner on Apr 9, 2024. It is now read-only.

Commit

Permalink
Run tests for .NET Framework 4.7.2 as well. Enable Async tests again.
Browse files Browse the repository at this point in the history
  • Loading branch information
squid-box committed Apr 3, 2023
1 parent 6a22efd commit bdb6e96
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 96 deletions.
39 changes: 23 additions & 16 deletions SevenZip.Tests/MiscellaneousTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text.Json;
using NUnit.Framework;

using SevenZip;
Expand All @@ -16,13 +15,17 @@ public class MiscellaneousTests : TestBase
public void SerializationTest()
{
var argumentException = new ArgumentException("blahblah");
var binaryFormatter = new BinaryFormatter();

using var ms = new MemoryStream();
using var fileStream = File.Create(TemporaryFile);

JsonSerializer.Serialize(ms, argumentException);
var compressor = new SevenZipCompressor();
compressor.CompressStream(ms, fileStream);
using (var ms = new MemoryStream())
{
using (var fileStream = File.Create(TemporaryFile))
{
binaryFormatter.Serialize(ms, argumentException);
var compressor = new SevenZipCompressor();
compressor.CompressStream(ms, fileStream);
}
}
}

#if SFX
Expand Down Expand Up @@ -90,23 +93,27 @@ public void LzmaEncodeDecodeTest()
using (var input = new FileStream(TemporaryFile, FileMode.Open))
{
var decoder = new LzmaDecodeStream(input);
using var output = new FileStream(newZip, FileMode.Create);
using (var output = new FileStream(newZip, FileMode.Create))
{

int bufSize = 24576, count;
var buf = new byte[bufSize];
int bufSize = 24576, count;
var buf = new byte[bufSize];

while ((count = decoder.Read(buf, 0, bufSize)) > 0)
{
output.Write(buf, 0, count);
while ((count = decoder.Read(buf, 0, bufSize)) > 0)
{
output.Write(buf, 0, count);
}
}
}

Assert.IsTrue(File.Exists(newZip));

using var extractor = new SevenZipExtractor(newZip);
using (var extractor = new SevenZipExtractor(newZip))
{

Assert.AreEqual(1, extractor.FilesCount);
Assert.AreEqual("zip.txt", extractor.ArchiveFileNames[0]);
Assert.AreEqual(1, extractor.FilesCount);
Assert.AreEqual("zip.txt", extractor.ArchiveFileNames[0]);
}
}
}
}
2 changes: 1 addition & 1 deletion SevenZip.Tests/SevenZip.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0</TargetFrameworks>
<TargetFrameworks>net6.0;net472</TargetFrameworks>
<AssemblyTitle>SevenZip.Tests</AssemblyTitle>
<Product>SevenZipTests</Product>
<Copyright>Copyright © Joel Ahlgren 2023</Copyright>
Expand Down
34 changes: 18 additions & 16 deletions SevenZip.Tests/SevenZipCompressorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -381,24 +381,26 @@ public void AppendToArchiveWithEncryptedHeadersTest()
[Test]
public void AppendEncryptedFileToStreamTest()
{
using var fileStream = new FileStream(TemporaryFile, FileMode.Create);

var compressor = new SevenZipCompressor
using (var fileStream = new FileStream(TemporaryFile, FileMode.Create))
{
ArchiveFormat = OutArchiveFormat.SevenZip,
CompressionMethod = CompressionMethod.Lzma2,
CompressionMode = CompressionMode.Append,
ZipEncryptionMethod = ZipEncryptionMethod.Aes256,
CompressionLevel = CompressionLevel.Normal,
EncryptHeaders = true
};

compressor.CompressFilesEncrypted(fileStream, "password", @"TestData\zip.zip");

using var extractor = new SevenZipExtractor(TemporaryFile, "password");
var compressor = new SevenZipCompressor
{
ArchiveFormat = OutArchiveFormat.SevenZip,
CompressionMethod = CompressionMethod.Lzma2,
CompressionMode = CompressionMode.Append,
ZipEncryptionMethod = ZipEncryptionMethod.Aes256,
CompressionLevel = CompressionLevel.Normal,
EncryptHeaders = true
};

compressor.CompressFilesEncrypted(fileStream, "password", @"TestData\zip.zip");
}

Assert.AreEqual(1, extractor.FilesCount);
Assert.AreEqual("zip.zip", extractor.ArchiveFileNames[0]);
using (var extractor = new SevenZipExtractor(TemporaryFile, "password"))
{
Assert.AreEqual(1, extractor.FilesCount);
Assert.AreEqual("zip.zip", extractor.ArchiveFileNames[0]);
}
}
}
}
4 changes: 2 additions & 2 deletions SevenZip.Tests/SevenZipExtractorAsynchronousTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using System.Threading.Tasks;
using NUnit.Framework;

[TestFixture, Ignore("Flaky tests, need to be re-written to run consistently in AppVeyor.")]
[TestFixture]
public class SevenZipExtractorAsynchronousTests : TestBase
{
[Test]
Expand All @@ -29,7 +29,7 @@ public void AsynchronousExtractArchiveEventsTest()

extractor.BeginExtractArchive(OutputDirectory);

var timeToWait = 1000;
var timeToWait = 2000;
while (extractionFinishedInvoked == 0)
{
if (timeToWait <= 0)
Expand Down
140 changes: 79 additions & 61 deletions SevenZip.Tests/SevenZipExtractorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,12 @@ public static List<TestFile> TestFiles
[Test]
public void ExtractFilesTest()
{
using var extractor = new SevenZipExtractor(@"TestData\multiple_files.7z");

for (var i = 0; i < extractor.ArchiveFileData.Count; i++)
using (var extractor = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
extractor.ExtractFiles(OutputDirectory, extractor.ArchiveFileData[i].Index);
for (var i = 0; i < extractor.ArchiveFileData.Count; i++)
{
extractor.ExtractFiles(OutputDirectory, extractor.ArchiveFileData[i].Index);
}
}

Assert.AreEqual(3, Directory.GetFiles(OutputDirectory).Length);
Expand Down Expand Up @@ -75,35 +76,37 @@ public void ExtractArchiveMultiVolumesTest()
[Test]
public void ExtractionWithCancellationTest()
{
using var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z");

tmp.FileExtractionStarted += (_, args) =>
using (var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
if (args.FileInfo.Index == 2)
tmp.FileExtractionStarted += (_, args) =>
{
args.Cancel = true;
}
};

tmp.ExtractArchive(OutputDirectory);
if (args.FileInfo.Index == 2)
{
args.Cancel = true;
}
};

tmp.ExtractArchive(OutputDirectory);
}

Assert.AreEqual(2, Directory.GetFiles(OutputDirectory).Length);
}

[Test]
public void ExtractionWithSkipTest()
{
using var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z");

tmp.FileExtractionStarted += (_, args) =>
using (var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
if (args.FileInfo.Index == 1)
tmp.FileExtractionStarted += (_, args) =>
{
args.Skip = true;
}
};
if (args.FileInfo.Index == 1)
{
args.Skip = true;
}
};

tmp.ExtractArchive(OutputDirectory);
tmp.ExtractArchive(OutputDirectory);
}

Assert.AreEqual(2, Directory.GetFiles(OutputDirectory).Length);
}
Expand All @@ -113,38 +116,43 @@ public void ExtractionFromStreamTest()
{
// TODO: Rewrite this to test against more/all TestData archives.

using var tmp = new SevenZipExtractor(File.OpenRead(@"TestData\multiple_files.7z"));

tmp.ExtractArchive(OutputDirectory);
Assert.AreEqual(3, Directory.GetFiles(OutputDirectory).Length);
using (var tmp = new SevenZipExtractor(File.OpenRead(@"TestData\multiple_files.7z")))
{
tmp.ExtractArchive(OutputDirectory);
Assert.AreEqual(3, Directory.GetFiles(OutputDirectory).Length);
}
}

[Test]
public void ExtractionFromStream_LeaveStreamOpenTest()
{
using var fileStream = new FileStream(@"TestData\multiple_files.7z", FileMode.Open);
using var extractor1 = new SevenZipExtractor(fileStream, leaveOpen: true);

extractor1.ExtractArchive(OutputDirectory);

Assert.IsTrue(fileStream.CanRead);

extractor1.Dispose();
using (var fileStream = new FileStream(@"TestData\multiple_files.7z", FileMode.Open))
{
using (var extractor1 = new SevenZipExtractor(fileStream, leaveOpen: true))
{
extractor1.ExtractArchive(OutputDirectory);

using var extractor2 = new SevenZipExtractor(fileStream, leaveOpen: false);
Assert.IsTrue(fileStream.CanRead);
}

extractor2.ExtractArchive(OutputDirectory);
using (var extractor2 = new SevenZipExtractor(fileStream, leaveOpen: false))
{
extractor2.ExtractArchive(OutputDirectory);
}

Assert.IsFalse(fileStream.CanRead);
Assert.IsFalse(fileStream.CanRead);
}
}

[Test]
public void ExtractionToStreamTest()
{
using (var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
using var fileStream = new FileStream(Path.Combine(OutputDirectory, "streamed_file.txt"), FileMode.Create);
tmp.ExtractFile(1, fileStream);
using (var fileStream = new FileStream(Path.Combine(OutputDirectory, "streamed_file.txt"), FileMode.Create))
{
tmp.ExtractFile(1, fileStream);
}
}

Assert.AreEqual(1, Directory.GetFiles(OutputDirectory).Length);
Expand Down Expand Up @@ -178,13 +186,17 @@ public void ThreadedExtractionTest()

var t1 = new Thread(() =>
{
using var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z");
tmp.ExtractArchive(destination1);
using (var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
tmp.ExtractArchive(destination1);
}
});
var t2 = new Thread(() =>
{
using var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z");
tmp.ExtractArchive(destination2);
using (var tmp = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
tmp.ExtractArchive(destination2);
}
});

t1.Start();
Expand All @@ -201,42 +213,48 @@ public void ThreadedExtractionTest()
[Test, Ignore("Figure out why this fails, later.")]
public void ExtractArchiveWithLongPath()
{
using var extractor = new SevenZipExtractor(@"TestData\long_path.7z");
Assert.Throws<PathTooLongException>(() => extractor.ExtractArchive(OutputDirectory));
using (var extractor = new SevenZipExtractor(@"TestData\long_path.7z"))
{
Assert.Throws<PathTooLongException>(() => extractor.ExtractArchive(OutputDirectory));
}
}

[Test]
public void ReadArchivedFileNames()
{
using var extractor = new SevenZipExtractor(@"TestData\multiple_files.7z");

var fileNames = extractor.ArchiveFileNames;
Assert.AreEqual(3, fileNames.Count);
using (var extractor = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
var fileNames = extractor.ArchiveFileNames;
Assert.AreEqual(3, fileNames.Count);

Assert.AreEqual("file1.txt", fileNames[0]);
Assert.AreEqual("file2.txt", fileNames[1]);
Assert.AreEqual("file3.txt", fileNames[2]);
Assert.AreEqual("file1.txt", fileNames[0]);
Assert.AreEqual("file2.txt", fileNames[1]);
Assert.AreEqual("file3.txt", fileNames[2]);
}
}

[Test]
public void ReadArchivedFileData()
{
using var extractor = new SevenZipExtractor(@"TestData\multiple_files.7z");

var fileData = extractor.ArchiveFileData;
Assert.AreEqual(3, fileData.Count);
using (var extractor = new SevenZipExtractor(@"TestData\multiple_files.7z"))
{
var fileData = extractor.ArchiveFileData;
Assert.AreEqual(3, fileData.Count);

Assert.AreEqual("file1.txt", fileData[0].FileName);
Assert.IsFalse(fileData[0].Encrypted);
Assert.IsFalse(fileData[0].IsDirectory);
Assert.AreEqual("file1.txt", fileData[0].FileName);
Assert.IsFalse(fileData[0].Encrypted);
Assert.IsFalse(fileData[0].IsDirectory);
}
}

[Test, TestCaseSource(nameof(TestFiles))]
public void ExtractDifferentFormatsTest(TestFile file)
{
using var extractor = new SevenZipExtractor(file.FilePath);
using (var extractor = new SevenZipExtractor(file.FilePath))
{
extractor.ExtractArchive(OutputDirectory);
}

extractor.ExtractArchive(OutputDirectory);
Assert.AreEqual(1, Directory.GetFiles(OutputDirectory).Length);
}
}
Expand Down
3 changes: 3 additions & 0 deletions SevenZip/SevenZipBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,9 @@ internal void CheckedExecute(int hresult, string message, CallbackBase handler)
case -2147024891:
exception = new SevenZipException("Access is denied. (0x80070005: E_ACCESSDENIED)");
break;
case -2146233086:
exception = new SevenZipException("Argument is out of range. (0x80131502: E_ARGUMENTOUTOFRANGE)");
break;
default:
exception = new SevenZipException(
$"Execution has failed due to an internal SevenZipSharp issue (0x{hresult:x} / {hresult}).\n" +
Expand Down

0 comments on commit bdb6e96

Please sign in to comment.