Files
sharpcompress/tests/SharpCompress.Test/WriterTests.cs
Adam Hathcock 960920993a Merge remote-tracking branch 'origin/master' into copilot/add-lzwreader-support
# Conflicts:
#	src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs
#	src/SharpCompress/Archives/Tar/TarArchive.Factory.cs
#	src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs
#	src/SharpCompress/Factories/GZipFactory.cs
#	src/SharpCompress/Factories/TarFactory.cs
#	src/SharpCompress/Factories/ZipFactory.cs
#	src/SharpCompress/Writers/IWriterFactory.cs
#	src/SharpCompress/Writers/WriterFactory.cs
2026-02-10 11:23:18 +00:00

101 lines
3.3 KiB
C#

using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using SharpCompress.Common;
using SharpCompress.IO;
using SharpCompress.Readers;
using SharpCompress.Test.Mocks;
using SharpCompress.Writers;
namespace SharpCompress.Test;
public class WriterTests : TestBase
{
private readonly ArchiveType _type;
protected WriterTests(ArchiveType type) => _type = type;
protected void Write(
CompressionType compressionType,
string archive,
string archiveToVerifyAgainst,
Encoding? encoding = null
)
{
using (Stream stream = File.OpenWrite(Path.Combine(SCRATCH2_FILES_PATH, archive)))
{
var writerOptions = new WriterOptions(compressionType) { LeaveStreamOpen = true };
writerOptions.ArchiveEncoding.Default = encoding ?? Encoding.Default;
using var writer = WriterFactory.OpenWriter(stream, _type, writerOptions);
writer.WriteAll(ORIGINAL_FILES_PATH, "*", SearchOption.AllDirectories);
}
CompareArchivesByPath(
Path.Combine(SCRATCH2_FILES_PATH, archive),
Path.Combine(TEST_ARCHIVES_PATH, archiveToVerifyAgainst)
);
using (Stream stream = File.OpenRead(Path.Combine(SCRATCH2_FILES_PATH, archive)))
{
var readerOptions = new ReaderOptions();
readerOptions.ArchiveEncoding.Default = encoding ?? Encoding.Default;
using var reader = ReaderFactory.OpenReader(
SharpCompressStream.CreateNonDisposing(stream),
readerOptions
);
reader.WriteAllToDirectory(SCRATCH_FILES_PATH);
}
VerifyFiles();
}
protected async Task WriteAsync(
CompressionType compressionType,
string archive,
string archiveToVerifyAgainst,
Encoding? encoding = null,
CancellationToken cancellationToken = default
)
{
using (
Stream stream = new AsyncOnlyStream(
File.OpenWrite(Path.Combine(SCRATCH2_FILES_PATH, archive))
)
)
{
var writerOptions = new WriterOptions(compressionType) { LeaveStreamOpen = true };
writerOptions.ArchiveEncoding.Default = encoding ?? Encoding.Default;
using var writer = WriterFactory.OpenAsyncWriter(stream, _type, writerOptions);
await writer.WriteAllAsync(
ORIGINAL_FILES_PATH,
"*",
SearchOption.AllDirectories,
cancellationToken
);
}
CompareArchivesByPath(
Path.Combine(SCRATCH2_FILES_PATH, archive),
Path.Combine(TEST_ARCHIVES_PATH, archiveToVerifyAgainst)
);
using (Stream stream = File.OpenRead(Path.Combine(SCRATCH2_FILES_PATH, archive)))
{
var readerOptions = new ReaderOptions();
readerOptions.ArchiveEncoding.Default = encoding ?? Encoding.Default;
await using var reader = await ReaderFactory.OpenAsyncReader(
new AsyncOnlyStream(SharpCompressStream.CreateNonDisposing(stream)),
readerOptions
);
await reader.WriteAllToDirectoryAsync(SCRATCH_FILES_PATH, cancellationToken);
}
VerifyFiles();
}
}