コード例 #1
0
        public void deflate()
        {
            Assert.Throws <ArgumentNullException>(() => StreamExtensions.Deflate(null, CompressionMode.Compress));
            Assert.Throws <ArgumentNullException>(() => StreamExtensions.Deflate <Stream>(null, Enumerable.Empty <byte>().ToArray()));
            Assert.Throws <ArgumentNullException>(() => Stream.Null.Deflate(null));
            Assert.Throws <ArgumentNullException>(() => StreamExtensions.Deflate(null));

            var bytes = Guid.NewGuid().ToByteArray();

            var stream     = new MemoryStream();
            var compressed = new byte[] { };

            using (var deflate = stream.Deflate(CompressionMode.Compress))
            {
                Assert.True(ReferenceEquals(deflate.BaseStream, stream));
                Assert.Throws <InvalidOperationException>(() => deflate.ReadByte());
                deflate.Write(bytes);
            }
            compressed = stream.ToArray();
            Assert.False(compressed.SequenceEqual(bytes));
            Assert.Throws <ObjectDisposedException>(() => stream.ReadByte());

            stream = new MemoryStream(compressed);
            var decompressed = new byte[] { };

            using (var deflate = stream.Deflate(CompressionMode.Decompress))
            {
                Assert.True(ReferenceEquals(deflate.BaseStream, stream));
                decompressed = deflate.Bytes();
            }
            Assert.True(decompressed.SequenceEqual(bytes));
            Assert.Throws <ObjectDisposedException>(() => stream.ReadByte());

            using (var s = new MemoryStream())
            {
                Assert.True(ReferenceEquals(s.Deflate(bytes), s));
                Assert.True(s.ToArray().SequenceEqual(compressed));
                Assert.Equal(0, s.Bytes().Length);
                Assert.True(s.CanRead);
                Assert.True(s.CanWrite);
            }

            using (var s = new MemoryStream(compressed))
            {
                Assert.True(s.Deflate().SequenceEqual(bytes));
                Assert.Equal(0, s.Bytes().Length);
                Assert.True(s.CanRead);
                Assert.True(s.CanWrite);
            }

            Assert.True(new MemoryStream().Deflate(bytes).Rewind().Deflate().SequenceEqual(bytes));
        }