2025-11-01 10:35:07 +00:00
|
|
|
using System.IO;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using SharpCompress.Compressors.Xz;
|
2026-02-14 10:16:01 +00:00
|
|
|
using SharpCompress.IO;
|
2026-01-14 14:33:20 +00:00
|
|
|
using SharpCompress.Test.Mocks;
|
2025-11-01 10:35:07 +00:00
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
|
|
namespace SharpCompress.Test.Xz;
|
|
|
|
|
|
|
|
|
|
public class XzStreamAsyncTests : XzTestsBase
|
|
|
|
|
{
|
|
|
|
|
[Fact]
|
2026-01-08 12:35:12 +00:00
|
|
|
public async ValueTask CanReadEmptyStreamAsync()
|
2025-11-01 10:35:07 +00:00
|
|
|
{
|
2026-02-13 14:26:54 +00:00
|
|
|
using var xz = new XZStream(CompressedEmptyStream);
|
2026-01-14 14:33:20 +00:00
|
|
|
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
2025-11-01 10:35:07 +00:00
|
|
|
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
|
|
|
|
Assert.Equal(OriginalEmpty, uncompressed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
2026-01-08 12:35:12 +00:00
|
|
|
public async ValueTask CanReadStreamAsync()
|
2025-11-01 10:35:07 +00:00
|
|
|
{
|
2026-02-13 14:26:54 +00:00
|
|
|
using var xz = new XZStream(CompressedStream);
|
2026-01-14 14:33:20 +00:00
|
|
|
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
2025-11-01 10:35:07 +00:00
|
|
|
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
|
|
|
|
Assert.Equal(Original, uncompressed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
2026-01-08 12:35:12 +00:00
|
|
|
public async ValueTask CanReadIndexedStreamAsync()
|
2025-11-01 10:35:07 +00:00
|
|
|
{
|
2026-02-13 14:26:54 +00:00
|
|
|
using var xz = new XZStream(CompressedIndexedStream);
|
2026-01-14 14:33:20 +00:00
|
|
|
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
2025-11-01 10:35:07 +00:00
|
|
|
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
|
|
|
|
Assert.Equal(OriginalIndexed, uncompressed);
|
|
|
|
|
}
|
2026-02-14 10:16:01 +00:00
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async ValueTask CanReadNonSeekableStreamAsync()
|
|
|
|
|
{
|
|
|
|
|
var nonSeekable = new ForwardOnlyStream(new MemoryStream(Compressed));
|
|
|
|
|
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
|
|
|
|
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
|
|
|
|
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
|
|
|
|
Assert.Equal(Original, uncompressed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async ValueTask CanReadNonSeekableEmptyStreamAsync()
|
|
|
|
|
{
|
|
|
|
|
var nonSeekable = new ForwardOnlyStream(new MemoryStream(CompressedEmpty));
|
|
|
|
|
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
|
|
|
|
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
|
|
|
|
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
|
|
|
|
Assert.Equal(OriginalEmpty, uncompressed);
|
|
|
|
|
}
|
2025-11-01 10:35:07 +00:00
|
|
|
}
|