Files
sharpcompress/tests/SharpCompress.Test/Xz/XZIndexTests.cs

95 lines
2.5 KiB
C#
Raw Permalink Normal View History

2026-02-13 14:26:54 +00:00
using System.IO;
using SharpCompress.Common;
2023-11-15 11:05:30 +00:00
using SharpCompress.Compressors.Xz;
using Xunit;
2022-12-20 15:20:49 +00:00
namespace SharpCompress.Test.Xz;
2024-03-14 08:53:08 +00:00
public class XzIndexTests : XzTestsBase
2022-12-20 15:20:49 +00:00
{
protected override void RewindEmpty(Stream stream) => stream.Position = 12;
2022-12-20 15:20:49 +00:00
protected override void Rewind(Stream stream) => stream.Position = 356;
2022-12-20 15:20:49 +00:00
protected override void RewindIndexed(Stream stream) => stream.Position = 612;
2022-12-20 15:20:49 +00:00
[Fact]
public void RecordsStreamStartOnInit()
{
2024-03-14 08:57:16 +00:00
using Stream badStream = new MemoryStream([1, 2, 3, 4, 5]);
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(badStream);
2024-03-14 08:37:17 +00:00
var index = new XZIndex(br, false);
Assert.Equal(0, index.StreamStartPosition);
2022-12-20 15:20:49 +00:00
}
2022-12-20 15:20:49 +00:00
[Fact]
public void ThrowsIfHasNoIndexMarker()
{
2024-03-14 08:57:16 +00:00
using Stream badStream = new MemoryStream([1, 2, 3, 4, 5]);
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(badStream);
2024-03-14 08:37:17 +00:00
var index = new XZIndex(br, false);
Assert.Throws<InvalidFormatException>(() => index.Process());
2022-12-20 15:20:49 +00:00
}
2022-12-20 15:20:49 +00:00
[Fact]
public void ReadsNoRecord()
{
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(CompressedEmptyStream);
2022-12-20 15:20:49 +00:00
var index = new XZIndex(br, false);
index.Process();
Assert.Equal((ulong)0, index.NumberOfRecords);
}
[Fact]
public void ReadsOneRecord()
{
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(CompressedStream);
2022-12-20 15:20:49 +00:00
var index = new XZIndex(br, false);
index.Process();
Assert.Equal((ulong)1, index.NumberOfRecords);
}
[Fact]
public void ReadsMultipleRecords()
{
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(CompressedIndexedStream);
2022-12-20 15:20:49 +00:00
var index = new XZIndex(br, false);
index.Process();
Assert.Equal((ulong)2, index.NumberOfRecords);
}
2022-12-20 15:20:49 +00:00
[Fact]
public void ReadsFirstRecord()
{
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(CompressedStream);
2022-12-20 15:20:49 +00:00
var index = new XZIndex(br, false);
index.Process();
Assert.Equal((ulong)OriginalBytes.Length, index.Records[0].UncompressedSize);
}
[Fact]
public void SkipsPadding()
{
// Index with 3-byte padding.
2025-11-25 11:50:21 +00:00
using Stream badStream = new MemoryStream([
0x00,
0x01,
0x10,
0x80,
0x01,
0x00,
0x00,
0x00,
0xB1,
0x01,
0xD9,
0xC9,
0xFF,
]);
2026-02-13 14:26:54 +00:00
using var br = new BinaryReader(badStream);
2024-03-14 08:37:17 +00:00
var index = new XZIndex(br, false);
index.Process();
Assert.Equal(0L, badStream.Position % 4L);
}
}