예제 #1
0
        public void OutputToSmall_ReturnsError()
        {
            using (XZDecompressor decompressor = new XZDecompressor())
            {
                Span <byte> source      = File.ReadAllBytes("Lzma/hello.xz");
                Span <byte> destination = Array.Empty <byte>();

                Assert.Equal(OperationStatus.NeedMoreData, decompressor.Decompress(source, destination, out int bytesConsumed, out int bytesWritten));
                Assert.Equal(0x19, bytesConsumed);
                Assert.Equal(0, bytesWritten);

                source = source.Slice(bytesConsumed);

                Assert.Equal(OperationStatus.NeedMoreData, decompressor.Decompress(source, destination, out bytesConsumed, out bytesWritten));
                Assert.Equal(2, bytesConsumed);
                Assert.Equal(0, bytesWritten);

                source = source.Slice(bytesConsumed);
                Assert.Equal(OperationStatus.NeedMoreData, decompressor.Decompress(source, destination, out bytesConsumed, out bytesWritten));
                Assert.Equal(0, bytesConsumed);
                Assert.Equal(0, bytesWritten);

                destination = new byte[0x100];
                Assert.Equal(OperationStatus.NeedMoreData, decompressor.Decompress(source, destination, out bytesConsumed, out bytesWritten));
                Assert.Equal(source.Length, bytesConsumed);
                Assert.Equal(0xe, bytesWritten);

                source = source.Slice(bytesConsumed);
                Assert.Equal(OperationStatus.Done, decompressor.Decompress(source, destination, out bytesConsumed, out bytesWritten));
                Assert.Equal(0, bytesConsumed);
                Assert.Equal(0, bytesWritten);
            }
        }
예제 #2
0
        public void Decompress_ThrowsWhenDisposed()
        {
            XZDecompressor decompressor = new XZDecompressor();

            decompressor.Dispose();

            Assert.Throws <ObjectDisposedException>(() => decompressor.Decompress(Array.Empty <byte>(), Array.Empty <byte>(), out _, out _));
        }
예제 #3
0
        public void Dispose_Idempotent()
        {
            XZDecompressor decompressor = new XZDecompressor();

            decompressor.Dispose();

            // .Dispose() can be invoked twice without errors
            decompressor.Dispose();
        }
예제 #4
0
        public void Read_InvalidFormat_ReturnsError(string path, LzmaFormat format)
        {
            byte[] data   = File.ReadAllBytes(path);
            byte[] output = new byte[100];

            using (XZDecompressor decompressor = new XZDecompressor(format))
            {
                Assert.Equal(OperationStatus.InvalidData, decompressor.Decompress(data, output, out int bytesConsumed, out int bytesWritten));
            }
        }
예제 #5
0
        public void InvalidData_ReturnsError()
        {
            using (XZDecompressor decompressor = new XZDecompressor())
            {
                Span <byte> source      = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
                Span <byte> destination = new byte[0x10];

                Assert.Equal(OperationStatus.InvalidData, decompressor.Decompress(source, destination, out int bytesConsumed, out int bytesWritten));
                Assert.Equal(0x4, bytesConsumed);
                Assert.Equal(0, bytesWritten);
            }
        }
예제 #6
0
        public void NoData_ReturnsNeedMoreData()
        {
            using (XZDecompressor decompressor = new XZDecompressor())
            {
                byte[] source      = Array.Empty <byte>();
                byte[] destination = Array.Empty <byte>();

                Assert.Equal(OperationStatus.NeedMoreData, decompressor.Decompress(source, destination, out int bytesConsumed, out int bytesWritten));
                Assert.Equal(0, bytesConsumed);
                Assert.Equal(0, bytesWritten);
            }
        }
예제 #7
0
        public unsafe void Decode_Works(string path)
        {
            using (XZDecompressor decompressor = new XZDecompressor())
            {
                Span <byte> source      = File.ReadAllBytes(path);
                Span <byte> destination = new byte[100];

                Assert.Equal(OperationStatus.NeedMoreData, decompressor.Decompress(source, destination, out int bytesConsumed, out int bytesWritten));
                Assert.Equal(source.Length, bytesConsumed);
                Assert.Equal(0xe, bytesWritten);

                Assert.Equal(OperationStatus.Done, decompressor.Decompress(Array.Empty <byte>(), destination, out bytesConsumed, out bytesWritten));
                Assert.Equal(0, bytesConsumed);
                Assert.Equal(0, bytesWritten);
            }
        }