2023-11-15 11:05:30 +00:00
|
|
|
|
using System.IO;
|
2026-06-15 09:59:48 +01:00
|
|
|
|
using SharpCompress.Common;
|
2023-11-15 11:05:30 +00:00
|
|
|
|
using SharpCompress.Compressors.Xz;
|
2026-02-14 10:16:01 +00:00
|
|
|
|
using SharpCompress.IO;
|
|
|
|
|
|
using SharpCompress.Test.Mocks;
|
2017-06-11 13:44:01 +01:00
|
|
|
|
using Xunit;
|
|
|
|
|
|
|
2022-12-20 15:20:49 +00:00
|
|
|
|
namespace SharpCompress.Test.Xz;
|
|
|
|
|
|
|
2024-03-14 08:53:08 +00:00
|
|
|
|
public class XzStreamTests : XzTestsBase
|
2017-06-11 13:44:01 +01:00
|
|
|
|
{
|
2022-12-20 15:20:49 +00:00
|
|
|
|
[Fact]
|
|
|
|
|
|
public void CanReadEmptyStream()
|
2017-06-11 13:44:01 +01:00
|
|
|
|
{
|
2024-03-14 08:38:12 +00:00
|
|
|
|
var xz = new XZStream(CompressedEmptyStream);
|
2024-03-14 08:37:17 +00:00
|
|
|
|
using var sr = new StreamReader(xz);
|
2024-03-14 08:38:12 +00:00
|
|
|
|
var uncompressed = sr.ReadToEnd();
|
2024-03-14 08:37:17 +00:00
|
|
|
|
Assert.Equal(OriginalEmpty, uncompressed);
|
2022-12-20 15:20:49 +00:00
|
|
|
|
}
|
2017-09-17 23:14:23 +02:00
|
|
|
|
|
2022-12-20 15:20:49 +00:00
|
|
|
|
[Fact]
|
|
|
|
|
|
public void CanReadStream()
|
|
|
|
|
|
{
|
2024-03-14 08:38:12 +00:00
|
|
|
|
var xz = new XZStream(CompressedStream);
|
2024-03-14 08:37:17 +00:00
|
|
|
|
using var sr = new StreamReader(xz);
|
2024-03-14 08:38:12 +00:00
|
|
|
|
var uncompressed = sr.ReadToEnd();
|
2024-03-14 08:37:17 +00:00
|
|
|
|
Assert.Equal(Original, uncompressed);
|
2022-12-20 15:20:49 +00:00
|
|
|
|
}
|
2017-09-17 23:14:23 +02:00
|
|
|
|
|
2022-12-20 15:20:49 +00:00
|
|
|
|
[Fact]
|
|
|
|
|
|
public void CanReadIndexedStream()
|
|
|
|
|
|
{
|
2024-03-14 08:38:12 +00:00
|
|
|
|
var xz = new XZStream(CompressedIndexedStream);
|
2024-03-14 08:37:17 +00:00
|
|
|
|
using var sr = new StreamReader(xz);
|
2024-03-14 08:38:12 +00:00
|
|
|
|
var uncompressed = sr.ReadToEnd();
|
2024-03-14 08:37:17 +00:00
|
|
|
|
Assert.Equal(OriginalIndexed, uncompressed);
|
2017-06-11 13:44:01 +01:00
|
|
|
|
}
|
2026-02-14 10:16:01 +00:00
|
|
|
|
|
|
|
|
|
|
[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);
|
|
|
|
|
|
}
|
2026-06-15 09:59:48 +01:00
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
|
public void Throws_On_Corrupt_Block_Check()
|
|
|
|
|
|
{
|
|
|
|
|
|
var compressed = (byte[])Compressed.Clone();
|
|
|
|
|
|
compressed[compressed.Length - 29] ^= 1;
|
|
|
|
|
|
using var xz = new XZStream(new MemoryStream(compressed));
|
|
|
|
|
|
using var output = new MemoryStream();
|
|
|
|
|
|
|
|
|
|
|
|
Assert.Throws<InvalidFormatException>(() => xz.CopyTo(output));
|
|
|
|
|
|
}
|
2017-06-11 13:44:01 +01:00
|
|
|
|
}
|