From 40b7c69922c5c9d016d32adcba902aab184a13ad Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 4 Feb 2026 21:53:50 +0000
Subject: [PATCH 01/28] Initial plan
From 479cca3073cb2ea2a3317961fdc214290ad46809 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 4 Feb 2026 21:58:03 +0000
Subject: [PATCH 02/28] Initial analysis
Co-authored-by: gfs <98900+gfs@users.noreply.github.com>
---
nuget.config | 6 +++---
nuget.config.backup | 7 +++++++
2 files changed, 10 insertions(+), 3 deletions(-)
create mode 100644 nuget.config.backup
diff --git a/nuget.config b/nuget.config
index 227ad0c..765346e 100644
--- a/nuget.config
+++ b/nuget.config
@@ -1,7 +1,7 @@
-
+
-
+
-
\ No newline at end of file
+
diff --git a/nuget.config.backup b/nuget.config.backup
new file mode 100644
index 0000000..227ad0c
--- /dev/null
+++ b/nuget.config.backup
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
From e0f18f2efb4d23e399784227615eca2fa3e377d6 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 4 Feb 2026 22:13:02 +0000
Subject: [PATCH 03/28] Changes before error encountered
Co-authored-by: gfs <98900+gfs@users.noreply.github.com>
---
.editorconfig | 1 +
Pipelines/recursive-extractor-pr.yml | 4 +--
Pipelines/recursive-extractor-release.yml | 4 +--
RecursiveExtractor.Tests/AssemblyInfo.cs | 3 +++
.../ExtractorTests/BaseExtractorTestClass.cs | 2 ++
.../ExtractorTests/CustomExtractorTests.cs | 26 ++++++++++---------
.../ExtractorTests/DisposeBehaviorTests.cs | 16 +++++-------
.../ExtractorTests/EncryptedArchiveTests.cs | 8 +++---
.../ExtractorTests/FilterTests.cs | 14 +++++-----
.../ExtractorTests/MiniMagicTests.cs | 2 +-
.../ExtractorTests/MiscTests.cs | 22 +++++++++-------
.../ExtractorTests/TestQuinesAndSlip.cs | 14 ++++++----
.../ExtractorTests/TimeOutTests.cs | 10 +++----
RecursiveExtractor.Tests/SanitizePathTests.cs | 4 +--
RecursiveExtractor.Tests/testconfig.json | 8 ++++++
nuget.config | 6 ++---
nuget.config.backup | 7 -----
17 files changed, 80 insertions(+), 71 deletions(-)
create mode 100644 RecursiveExtractor.Tests/AssemblyInfo.cs
create mode 100644 RecursiveExtractor.Tests/testconfig.json
delete mode 100644 nuget.config.backup
diff --git a/.editorconfig b/.editorconfig
index f195c50..d03ac21 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -191,6 +191,7 @@ dotnet_naming_symbols.non_field_members.required_modifiers =
# Naming styles
dotnet_naming_style.pascal_case.required_prefix =
+
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
diff --git a/Pipelines/recursive-extractor-pr.yml b/Pipelines/recursive-extractor-pr.yml
index 3476419..0baf2e6 100644
--- a/Pipelines/recursive-extractor-pr.yml
+++ b/Pipelines/recursive-extractor-pr.yml
@@ -42,7 +42,7 @@ extends:
poolName: MSSecurity-1ES-Build-Agents-Pool
poolImage: MSSecurity-1ES-Windows-2022
poolOs: windows
- dotnetTestArgs: '-- --coverage --report-trx'
+ dotnetTestArgs: '--logger trx --results-directory $(Build.SourcesDirectory)/TestResults -- --coverage'
includeNuGetOrg: false
nugetFeedsToUse: 'config'
nugetConfigPath: 'nuget.config'
@@ -57,7 +57,7 @@ extends:
poolName: MSSecurity-1ES-Build-Agents-Pool
poolImage: MSSecurity-1ES-Windows-2022
poolOs: windows
- dotnetTestArgs: '-- --coverage --report-trx'
+ dotnetTestArgs: '--logger trx --results-directory $(Build.SourcesDirectory)/TestResults -- --coverage'
includeNuGetOrg: false
nugetFeedsToUse: 'config'
nugetConfigPath: 'nuget.config'
diff --git a/Pipelines/recursive-extractor-release.yml b/Pipelines/recursive-extractor-release.yml
index b2a85fc..9aca225 100644
--- a/Pipelines/recursive-extractor-release.yml
+++ b/Pipelines/recursive-extractor-release.yml
@@ -43,7 +43,7 @@ extends:
poolName: MSSecurity-1ES-Build-Agents-Pool
poolImage: MSSecurity-1ES-Windows-2022
poolOs: windows
- dotnetTestArgs: '-- --coverage --report-trx'
+ dotnetTestArgs: '--logger trx --results-directory $(Build.SourcesDirectory)/TestResults -- --coverage'
includeNuGetOrg: false
nugetFeedsToUse: 'config'
nugetConfigPath: 'nuget.config'
@@ -57,7 +57,7 @@ extends:
poolName: MSSecurity-1ES-Build-Agents-Pool
poolImage: MSSecurity-1ES-Windows-2022
poolOs: windows
- dotnetTestArgs: '-- --coverage --report-trx'
+ dotnetTestArgs: '--logger trx --results-directory $(Build.SourcesDirectory)/TestResults -- --coverage'
includeNuGetOrg: false
nugetFeedsToUse: 'config'
nugetConfigPath: 'nuget.config'
diff --git a/RecursiveExtractor.Tests/AssemblyInfo.cs b/RecursiveExtractor.Tests/AssemblyInfo.cs
new file mode 100644
index 0000000..38707ae
--- /dev/null
+++ b/RecursiveExtractor.Tests/AssemblyInfo.cs
@@ -0,0 +1,3 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+[assembly: Parallelize(Workers = 0, Scope = ExecutionScope.MethodLevel)]
diff --git a/RecursiveExtractor.Tests/ExtractorTests/BaseExtractorTestClass.cs b/RecursiveExtractor.Tests/ExtractorTests/BaseExtractorTestClass.cs
index d223a1a..7c301b5 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/BaseExtractorTestClass.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/BaseExtractorTestClass.cs
@@ -8,6 +8,8 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
public class BaseExtractorTestClass
{
+ public TestContext TestContext { get; set; } = null!;
+
[ClassCleanup]
public static void ClassCleanup()
{
diff --git a/RecursiveExtractor.Tests/ExtractorTests/CustomExtractorTests.cs b/RecursiveExtractor.Tests/ExtractorTests/CustomExtractorTests.cs
index 547ba87..048cf04 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/CustomExtractorTests.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/CustomExtractorTests.cs
@@ -12,6 +12,8 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
[TestClass]
public class CustomExtractorTests
{
+ public TestContext TestContext { get; set; } = null!;
+
///
/// A simple test custom extractor that extracts files with a specific magic number
/// For testing purposes, it recognizes files starting with "CUSTOM1"
@@ -127,7 +129,7 @@ public void Constructor_WithCustomExtractors_RegistersExtractors()
var customExtractor = new TestCustomExtractor(null!);
var extractor = new Extractor(new[] { customExtractor });
- Assert.AreEqual(1, extractor.CustomExtractors.Count);
+ Assert.HasCount(extractor.CustomExtractors, 1);
}
[TestMethod]
@@ -137,7 +139,7 @@ public void Constructor_WithMultipleCustomExtractors_RegistersAll()
var customExtractor2 = new SecondTestCustomExtractor(null!);
var extractor = new Extractor(new ICustomAsyncExtractor[] { customExtractor1, customExtractor2 });
- Assert.AreEqual(2, extractor.CustomExtractors.Count);
+ Assert.HasCount(extractor.CustomExtractors, 2);
}
[TestMethod]
@@ -146,7 +148,7 @@ public void Constructor_WithNullInCollection_IgnoresNull()
var customExtractor = new TestCustomExtractor(null!);
var extractor = new Extractor(new ICustomAsyncExtractor[] { customExtractor, null! });
- Assert.AreEqual(1, extractor.CustomExtractors.Count);
+ Assert.HasCount(extractor.CustomExtractors, 1);
}
[TestMethod]
@@ -154,7 +156,7 @@ public void Constructor_WithNullCollection_CreatesEmptyExtractor()
{
var extractor = new Extractor((IEnumerable)null!);
- Assert.AreEqual(0, extractor.CustomExtractors.Count);
+ Assert.IsEmpty(extractor.CustomExtractors);
}
[TestMethod]
@@ -167,7 +169,7 @@ public void Extract_WithMatchingCustomExtractor_UsesCustomExtractor()
var testData = System.Text.Encoding.ASCII.GetBytes("CUSTOM1 This is test data");
var results = extractor.Extract("test.custom", testData).ToList();
- Assert.AreEqual(1, results.Count);
+ Assert.HasCount(results, 1);
Assert.AreEqual("extracted_from_custom.txt", results[0].Name);
// Read the content to verify it was processed by our custom extractor
@@ -185,9 +187,9 @@ public async Task ExtractAsync_WithMatchingCustomExtractor_UsesCustomExtractor()
// Create a test file with the custom magic bytes
var testData = System.Text.Encoding.ASCII.GetBytes("CUSTOM1 This is test data");
- var results = await extractor.ExtractAsync("test.custom", testData).ToListAsync();
+ var results = await extractor.ExtractAsync("test.custom", testData).ToListAsync(TestContext.CancellationTokenSource.Token);
- Assert.AreEqual(1, results.Count);
+ Assert.HasCount(results, 1);
Assert.AreEqual("extracted_from_custom.txt", results[0].Name);
// Read the content to verify it was processed by our custom extractor
@@ -208,7 +210,7 @@ public void Extract_WithoutMatchingCustomExtractor_ReturnsOriginalFile()
var results = extractor.Extract("test.txt", testData).ToList();
// Should return the original file since no custom extractor matched
- Assert.AreEqual(1, results.Count);
+ Assert.HasCount(results, 1);
Assert.AreEqual("test.txt", results[0].Name);
// Verify it's the original content
@@ -230,13 +232,13 @@ public void Extract_MultipleCustomExtractors_UsesCorrectOne()
// Test with first custom format
var testData1 = System.Text.Encoding.ASCII.GetBytes("CUSTOM1 data");
var results1 = extractor.Extract("test1.custom", testData1).ToList();
- Assert.AreEqual(1, results1.Count);
+ Assert.HasCount(results1, 1);
Assert.AreEqual("extracted_from_custom.txt", results1[0].Name);
// Test with second custom format
var testData2 = System.Text.Encoding.ASCII.GetBytes("CUSTOM2 data");
var results2 = extractor.Extract("test2.custom", testData2).ToList();
- Assert.AreEqual(1, results2.Count);
+ Assert.HasCount(results2, 1);
Assert.AreEqual("extracted_from_second_custom.txt", results2[0].Name);
}
@@ -250,7 +252,7 @@ public void Extract_NoCustomExtractors_ReturnsOriginalFile()
var results = extractor.Extract("test.custom", testData).ToList();
// Should return the original file since no custom extractor is registered
- Assert.AreEqual(1, results.Count);
+ Assert.HasCount(results, 1);
Assert.AreEqual("test.custom", results[0].Name);
}
@@ -267,7 +269,7 @@ public void Extract_CustomExtractorForKnownFormat_UsesBuiltInExtractor()
var results = extractor.Extract(path).ToList();
// Should extract the ZIP normally, not use the custom extractor
- Assert.IsTrue(results.Count > 0);
+ Assert.IsGreaterThan(results.Count, 0);
Assert.IsTrue(results.Any(r => r.Name.Contains("EmptyFile")));
}
}
diff --git a/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs b/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs
index bab3061..08b9b91 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/DisposeBehaviorTests.cs
@@ -11,7 +11,7 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
[TestClass]
public class DisposeBehaviorTests : BaseExtractorTestClass
{
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.7z", 3, false)]
[DataRow("TestData.tar", 6, false)]
[DataRow("TestData.rar", 3, false)]
@@ -43,8 +43,6 @@ public class DisposeBehaviorTests : BaseExtractorTestClass
[DataRow("EmptyFile.txt", 1, true)]
[DataRow("TestDataArchivesNested.Zip", 54, true)]
[DataRow("TestDataArchivesNested.Zip", 54, false)]
- [DataRow("TestDataArchivesNested.Zip", 54, true)]
- [DataRow("TestDataArchivesNested.Zip", 54, false)]
public void ExtractArchiveAndDisposeWhileEnumerating(string fileName, int expectedNumFiles = 3,
bool parallel = false)
{
@@ -63,11 +61,11 @@ public void ExtractArchiveAndDisposeWhileEnumerating(string fileName, int expect
Assert.AreEqual(expectedNumFiles, disposedResults.Count);
foreach (var disposedResult in disposedResults)
{
- Assert.ThrowsException(() => disposedResult.Content.Position);
+ Assert.ThrowsExactly(() => disposedResult.Content.Position);
}
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.7z", 3, false)]
[DataRow("TestData.tar", 6, false)]
[DataRow("TestData.rar", 3, false)]
@@ -99,8 +97,6 @@ public void ExtractArchiveAndDisposeWhileEnumerating(string fileName, int expect
[DataRow("EmptyFile.txt", 1, true)]
[DataRow("TestDataArchivesNested.Zip", 54, true)]
[DataRow("TestDataArchivesNested.Zip", 54, false)]
- [DataRow("TestDataArchivesNested.Zip", 54, true)]
- [DataRow("TestDataArchivesNested.Zip", 54, false)]
public async Task ExtractArchiveAndDisposeWhileEnumeratingAsync(string fileName, int expectedNumFiles = 3,
bool parallel = false)
{
@@ -119,11 +115,11 @@ public async Task ExtractArchiveAndDisposeWhileEnumeratingAsync(string fileName,
Assert.AreEqual(expectedNumFiles, disposedResults.Count);
foreach (var disposedResult in disposedResults)
{
- Assert.ThrowsException(() => disposedResult.Content.Position);
+ Assert.ThrowsExactly(() => disposedResult.Content.Position);
}
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip")]
public void EnsureDisposedWithExtractToDirectory(string fileName)
{
@@ -146,7 +142,7 @@ public void EnsureDisposedWithExtractToDirectory(string fileName)
}
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip")]
public async Task EnsureDisposedWithExtractToDirectoryAsync(string fileName)
{
diff --git a/RecursiveExtractor.Tests/ExtractorTests/EncryptedArchiveTests.cs b/RecursiveExtractor.Tests/ExtractorTests/EncryptedArchiveTests.cs
index 9d034e7..05b7d9e 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/EncryptedArchiveTests.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/EncryptedArchiveTests.cs
@@ -11,7 +11,7 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
[TestClass]
public class EncryptedArchiveTests : BaseExtractorTestClass
{
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestDataEncryptedZipCrypto.zip")]
[DataRow("TestDataEncryptedAes.zip")]
[DataRow("TestDataEncrypted.7z")]
@@ -26,7 +26,7 @@ public void FileTypeSetCorrectlyForEncryptedArchives(string fileName, int expect
Assert.AreEqual(FileEntryStatus.EncryptedArchive, results.First().EntryStatus);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestDataEncryptedZipCrypto.zip")]
[DataRow("TestDataEncryptedAes.zip")]
[DataRow("TestDataEncrypted.7z")]
@@ -46,7 +46,7 @@ public async Task FileTypeSetCorrectlyForEncryptedArchivesAsync(string fileName,
Assert.AreEqual(FileEntryStatus.EncryptedArchive, results.First().EntryStatus);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestDataEncryptedZipCrypto.zip")]
[DataRow("TestDataEncryptedAes.zip")]
[DataRow("TestDataEncrypted.7z")]
@@ -64,7 +64,7 @@ public void ExtractEncryptedArchive(string fileName, int expectedNumFiles = 3)
Assert.AreEqual(0, results.Count(x => x.EntryStatus == FileEntryStatus.EncryptedArchive || x.EntryStatus == FileEntryStatus.FailedArchive));
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestDataEncryptedZipCrypto.zip")]
[DataRow("TestDataEncryptedAes.zip")]
[DataRow("TestDataEncrypted.7z")]
diff --git a/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs b/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs
index 4fcc28a..c5828a0 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/FilterTests.cs
@@ -10,7 +10,7 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
[TestClass]
public class FilterTests : BaseExtractorTestClass
{
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip")]
[DataRow("TestData.7z")]
[DataRow("TestData.tar")]
@@ -42,7 +42,7 @@ public async Task ExtractArchiveAsyncAllowFiltered(string fileName, int expected
Assert.AreEqual(expectedNumFiles, numResults);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip")]
[DataRow("TestData.7z")]
[DataRow("TestData.tar")]
@@ -68,7 +68,7 @@ public void ExtractArchiveAllowFiltered(string fileName, int expectedNumFiles =
Assert.AreEqual(expectedNumFiles, results.Count());
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip")]
[DataRow("TestData.7z")]
[DataRow("TestData.tar")]
@@ -94,7 +94,7 @@ public void ExtractArchiveParallelAllowFiltered(string fileName, int expectedNum
Assert.AreEqual(expectedNumFiles, results.Count());
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip", 4)]
[DataRow("TestData.7z")]
[DataRow("TestData.tar", 5)]
@@ -119,7 +119,7 @@ public void ExtractArchiveDenyFiltered(string fileName, int expectedNumFiles = 2
Assert.AreEqual(expectedNumFiles, results.Count());
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip", 4)]
[DataRow("TestData.7z")]
[DataRow("TestData.tar", 5)]
@@ -145,7 +145,7 @@ public void ExtractArchiveParallelDenyFiltered(string fileName, int expectedNumF
Assert.AreEqual(expectedNumFiles, results.Count());
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip", 4)]
[DataRow("TestData.7z")]
[DataRow("TestData.tar", 5)]
@@ -177,7 +177,7 @@ public async Task ExtractArchiveAsyncDenyFiltered(string fileName, int expectedN
Assert.AreEqual(expectedNumFiles, numResults);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow(ArchiveFileType.ZIP, new[] { ArchiveFileType.ZIP }, new ArchiveFileType[] { }, false)]
[DataRow(ArchiveFileType.ZIP, new[] { ArchiveFileType.TAR }, new ArchiveFileType[] { }, true)]
[DataRow(ArchiveFileType.ZIP, new ArchiveFileType[] { }, new[] { ArchiveFileType.ZIP }, true)]
diff --git a/RecursiveExtractor.Tests/ExtractorTests/MiniMagicTests.cs b/RecursiveExtractor.Tests/ExtractorTests/MiniMagicTests.cs
index 016ef13..d45b91a 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/MiniMagicTests.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/MiniMagicTests.cs
@@ -7,7 +7,7 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
[TestClass]
public class MiniMagicTests : BaseExtractorTestClass
{
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestData.zip", ArchiveFileType.ZIP)]
[DataRow("TestData.7z", ArchiveFileType.P7ZIP)]
[DataRow("TestData.Tar", ArchiveFileType.TAR)]
diff --git a/RecursiveExtractor.Tests/ExtractorTests/MiscTests.cs b/RecursiveExtractor.Tests/ExtractorTests/MiscTests.cs
index e375904..c06a75c 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/MiscTests.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/MiscTests.cs
@@ -10,7 +10,9 @@ namespace RecursiveExtractor.Tests.ExtractorTests;
[TestClass]
public class MiscTests
{
- [DataTestMethod]
+ public TestContext TestContext { get; set; } = null!;
+
+ [TestMethod]
[DataRow("TestDataCorrupt.tar", false, 0, 1)]
[DataRow("TestDataCorrupt.tar", true, 1, 1)]
[DataRow("TestDataCorrupt.tar.zip", false, 0, 2)]
@@ -20,7 +22,7 @@ public async Task ExtractCorruptArchiveAsync(string fileName, bool requireTopLev
var extractor = new Extractor();
var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "TestDataArchives", fileName);
var results = await extractor.ExtractAsync(path,
- new ExtractorOptions() { RequireTopLevelToBeArchive = requireTopLevelToBeArchive }).ToListAsync();
+ new ExtractorOptions() { RequireTopLevelToBeArchive = requireTopLevelToBeArchive }).ToListAsync(TestContext.CancellationTokenSource.Token);
Assert.AreEqual(expectedNumFiles, results.Count);
@@ -28,23 +30,23 @@ public async Task ExtractCorruptArchiveAsync(string fileName, bool requireTopLev
Assert.AreEqual(expectedNumFailures, actualNumberOfFailedArchives);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("Lorem.txt", true, 1)]
[DataRow("Lorem.txt", false, 0)]
public async Task ExtractFlatFileAsync(string fileName, bool requireTopLevelToBeArchive, int expectedNumFailures)
{
var extractor = new Extractor();
var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "TestData", fileName);
- var results = await extractor.ExtractAsync(path, new ExtractorOptions(){ RequireTopLevelToBeArchive = requireTopLevelToBeArchive }).ToListAsync();
+ var results = await extractor.ExtractAsync(path, new ExtractorOptions(){ RequireTopLevelToBeArchive = requireTopLevelToBeArchive }).ToListAsync(TestContext.CancellationTokenSource.Token);
- Assert.AreEqual(1, results.Count);
+ Assert.HasCount(results, 1);
var actualNumberOfFailedArchives = results.Count(x => x.EntryStatus == FileEntryStatus.FailedArchive);
Assert.AreEqual(expectedNumFailures, actualNumberOfFailedArchives);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("TestDataCorrupt.tar", false, 0, 1)]
[DataRow("TestDataCorrupt.tar", true, 1, 1)]
[DataRow("TestDataCorrupt.tar.zip", false, 0, 2)]
@@ -61,7 +63,7 @@ public void ExtractCorruptArchive(string fileName, bool requireTopLevelToBeArchi
Assert.AreEqual(expectedNumFailures, actualNumberOfFailedArchives);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("Lorem.txt", true, 1)]
[DataRow("Lorem.txt", false, 0)]
public void ExtractFlatFile(string fileName, bool requireTopLevelToBeArchive, int expectedNumFailures)
@@ -70,12 +72,12 @@ public void ExtractFlatFile(string fileName, bool requireTopLevelToBeArchive, in
var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "TestData", fileName);
var results = extractor.Extract(path, new ExtractorOptions(){ RequireTopLevelToBeArchive = requireTopLevelToBeArchive }).ToList();
- Assert.AreEqual(1, results.Count);
+ Assert.HasCount(results, 1);
var actualNumberOfFailedArchives = results.Count(x => x.EntryStatus == FileEntryStatus.FailedArchive);
Assert.AreEqual(expectedNumFailures, actualNumberOfFailedArchives);
}
- [DataTestMethod]
+ [TestMethod]
[DataRow("EmptyFile.txt")]
[DataRow("TestData.zip", ".zip")]
public void ExtractAsRaw(string fileName, string? RawExtension = null)
@@ -88,6 +90,6 @@ public void ExtractAsRaw(string fileName, string? RawExtension = null)
var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "TestDataArchives", fileName);
var results = extractor.Extract(path, options);
- Assert.AreEqual(1, results.Count());
+ Assert.HasCount(results, 1);
}
}
\ No newline at end of file
diff --git a/RecursiveExtractor.Tests/ExtractorTests/TestQuinesAndSlip.cs b/RecursiveExtractor.Tests/ExtractorTests/TestQuinesAndSlip.cs
index e2da32d..252820b 100644
--- a/RecursiveExtractor.Tests/ExtractorTests/TestQuinesAndSlip.cs
+++ b/RecursiveExtractor.Tests/ExtractorTests/TestQuinesAndSlip.cs
@@ -42,7 +42,7 @@ public async Task TestZipSlipAsync(string fileName)
{
var extractor = new Extractor();
var path = Path.Combine(Directory.GetCurrentDirectory(), "TestData", "Bombs", fileName);
- var results = await extractor.ExtractAsync(path, new ExtractorOptions()).ToListAsync();
+ var results = await extractor.ExtractAsync(path, new ExtractorOptions()).ToListAsync(TestContext.CancellationTokenSource.Token);
Assert.IsTrue(results.All(x => !x.FullPath.Contains("..")));
}
@@ -65,21 +65,25 @@ public static IEnumerable