void Inflate(MemoryStream ms, byte[] original, int level, bool zlib) { ms.Seek(0, SeekOrigin.Begin); Inflater inflater = new Inflater(!zlib); InflaterInputStream inStream = new InflaterInputStream(ms, inflater); byte[] buf2 = new byte[original.Length]; int currentIndex = 0; int count = buf2.Length; try { while (true) { int numRead = inStream.Read(buf2, currentIndex, count); if (numRead <= 0) { break; } currentIndex += numRead; count -= numRead; } } catch(Exception ex) { Console.WriteLine("Unexpected exception - '{0}'", ex.Message); throw; } if ( currentIndex != original.Length ) { Console.WriteLine("Original {0}, new {1}", original.Length, currentIndex); Assert.Fail("Lengths different"); } for (int i = 0; i < original.Length; ++i) { if ( buf2[i] != original[i] ) { string description = string.Format("Difference at {0} level {1} zlib {2} ", i, level, zlib); if ( original.Length < 2048 ) { StringBuilder builder = new StringBuilder(description); for (int d = 0; d < original.Length; ++d) { builder.AppendFormat("{0} ", original[d]); } Assert.Fail(builder.ToString()); } else { Assert.Fail(description); } } } }
public void CloseInflatorWithNestedUsing() { string tempFile = null; try { tempFile = Path.GetTempPath(); } catch (SecurityException) { } Assert.IsNotNull(tempFile, "No permission to execute this test?"); if (tempFile != null) { tempFile = Path.Combine(tempFile, "SharpZipTest.Zip"); using (FileStream diskFile = File.Create(tempFile)) using (DeflaterOutputStream deflator = new DeflaterOutputStream(diskFile)) using (StreamWriter textWriter = new StreamWriter(deflator)) { textWriter.Write("Hello"); textWriter.Flush(); } using (FileStream diskFile = File.OpenRead(tempFile)) using (InflaterInputStream deflator = new InflaterInputStream(diskFile)) using (StreamReader textReader = new StreamReader(deflator)) { char[] buffer = new char[5]; int readCount = textReader.Read(buffer, 0, 5); Assert.AreEqual(5, readCount); StringBuilder b = new StringBuilder(); b.Append(buffer); Assert.AreEqual("Hello", b.ToString()); } File.Delete(tempFile); } }
public void InflatorStreamOwnership() { MemoryStreamEx memStream = new MemoryStreamEx(); InflaterInputStream s = new InflaterInputStream(memStream); Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); s.Close(); Assert.IsTrue(memStream.IsClosed, "Should be closed after parent owner close"); Assert.IsTrue(memStream.IsDisposed, "Should be disposed after parent owner close"); memStream = new MemoryStreamEx(); s = new InflaterInputStream(memStream); Assert.IsFalse(memStream.IsClosed, "Shouldnt be closed initially"); Assert.IsFalse(memStream.IsDisposed, "Shouldnt be disposed initially"); s.IsStreamOwner = false; s.Close(); Assert.IsFalse(memStream.IsClosed, "Should not be closed after parent owner close"); Assert.IsFalse(memStream.IsDisposed, "Should not be disposed after parent owner close"); }