mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-07-08 18:16:30 +00:00
XZBlock accesses stream.Position in its constructor and SkipPadding(), which throws NotSupportedException for non-seekable streams (e.g., HTTP). Fix: XZStream now auto-wraps non-seekable streams with SharpCompressStream.Create() to provide position tracking via ring buffer. Add tests for raw non-seekable streams (sync and async). Co-authored-by: adamhathcock <527620+adamhathcock@users.noreply.github.com>
78 lines
2.3 KiB
C#
78 lines
2.3 KiB
C#
using System.IO;
|
|
using SharpCompress.Compressors.Xz;
|
|
using SharpCompress.IO;
|
|
using SharpCompress.Test.Mocks;
|
|
using Xunit;
|
|
|
|
namespace SharpCompress.Test.Xz;
|
|
|
|
public class XzStreamTests : XzTestsBase
|
|
{
|
|
[Fact]
|
|
public void CanReadEmptyStream()
|
|
{
|
|
var xz = new XZStream(CompressedEmptyStream);
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(OriginalEmpty, uncompressed);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanReadStream()
|
|
{
|
|
var xz = new XZStream(CompressedStream);
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(Original, uncompressed);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanReadIndexedStream()
|
|
{
|
|
var xz = new XZStream(CompressedIndexedStream);
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(OriginalIndexed, uncompressed);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanReadNonSeekableStream()
|
|
{
|
|
var nonSeekable = new ForwardOnlyStream(new MemoryStream(Compressed));
|
|
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(Original, uncompressed);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanReadNonSeekableEmptyStream()
|
|
{
|
|
var nonSeekable = new ForwardOnlyStream(new MemoryStream(CompressedEmpty));
|
|
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(OriginalEmpty, uncompressed);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanReadRawNonSeekableStream()
|
|
{
|
|
var nonSeekable = new ForwardOnlyStream(new MemoryStream(Compressed));
|
|
var xz = new XZStream(nonSeekable);
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(Original, uncompressed);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanReadRawNonSeekableEmptyStream()
|
|
{
|
|
var nonSeekable = new ForwardOnlyStream(new MemoryStream(CompressedEmpty));
|
|
var xz = new XZStream(nonSeekable);
|
|
using var sr = new StreamReader(xz);
|
|
var uncompressed = sr.ReadToEnd();
|
|
Assert.Equal(OriginalEmpty, uncompressed);
|
|
}
|
|
}
|