1 /* -*- Mode: csharp; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 // DeflateStreamTest.cs - NUnit Test Cases for the System.IO.Compression.DeflateStream class
6 // Christopher James Lahey <clahey@ximian.com>
8 // (C) 2004 Novell, Inc. <http://www.novell.com>
13 using NUnit.Framework;
16 using System.IO.Compression;
18 namespace MonoTests.System.IO.Compression
21 public class DeflateStreamTest
23 private static void CopyStream (Stream src, Stream dest)
25 byte[] array = new byte[1024];
27 bytes_read = src.Read (array, 0, 1024);
28 while (bytes_read != 0) {
29 dest.Write (array, 0, bytes_read);
30 bytes_read = src.Read (array, 0, 1024);
34 private static bool compare_buffers (byte[] first, byte[] second, int length)
36 if (first.Length < length || second.Length < length) {
39 for (int i = 0; i < length; i++) {
40 if (first[i] != second[i]) {
48 [ExpectedException (typeof (ArgumentNullException))]
49 public void Constructor_Null ()
51 DeflateStream ds = new DeflateStream (null, CompressionMode.Compress);
55 [ExpectedException (typeof (ArgumentException))]
56 public void Constructor_InvalidCompressionMode ()
58 DeflateStream ds = new DeflateStream (new MemoryStream (), (CompressionMode)Int32.MinValue);
62 public void CheckCompressDecompress ()
64 byte [] data = new byte[100000];
65 for (int i = 0; i < 100000; i++) {
68 MemoryStream dataStream = new MemoryStream (data);
69 MemoryStream backing = new MemoryStream ();
70 DeflateStream compressing = new DeflateStream (backing, CompressionMode.Compress, true);
71 CopyStream (dataStream, compressing);
74 backing.Seek (0, SeekOrigin.Begin);
75 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
76 MemoryStream output = new MemoryStream ();
77 CopyStream (decompressing, output);
78 Assert.IsTrue (compare_buffers (data, output.GetBuffer(), (int) output.Length));
79 decompressing.Close();
84 public void CheckDecompress ()
86 MemoryStream backing = new MemoryStream (compressed_data);
87 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
88 StreamReader reader = new StreamReader (decompressing);
89 Assert.AreEqual ("Hello", reader.ReadLine ());
90 decompressing.Close();
94 [ExpectedException (typeof (ArgumentNullException))]
95 public void CheckNullRead ()
97 MemoryStream backing = new MemoryStream (compressed_data);
98 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
99 decompressing.Read (null, 0, 20);
103 [ExpectedException (typeof (InvalidOperationException))]
104 public void CheckCompressingRead ()
106 byte [] dummy = new byte[20];
107 MemoryStream backing = new MemoryStream ();
108 DeflateStream compressing = new DeflateStream (backing, CompressionMode.Compress);
109 compressing.Read (dummy, 0, 20);
113 [ExpectedException (typeof (ArgumentException))]
114 public void CheckRangeRead ()
116 byte [] dummy = new byte[20];
117 MemoryStream backing = new MemoryStream (compressed_data);
118 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
119 decompressing.Read (dummy, 10, 20);
124 [Category("NotWorking")]
125 [ExpectedException (typeof (InvalidDataException))]
126 public void CheckInvalidDataRead ()
128 byte [] data = {0x11, 0x78, 0x89, 0x91, 0xbe, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0xe7, 0x02, 0x00 };
129 byte [] dummy = new byte[20];
130 MemoryStream backing = new MemoryStream (data);
131 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
132 decompressing.Read (dummy, 0, 20);
137 [ExpectedException (typeof (ObjectDisposedException))]
138 public void CheckClosedRead ()
140 byte [] dummy = new byte[20];
141 MemoryStream backing = new MemoryStream (compressed_data);
142 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
143 decompressing.Close ();
144 decompressing.Read (dummy, 0, 20);
148 [ExpectedException (typeof (ObjectDisposedException))]
149 public void CheckClosedFlush ()
151 MemoryStream backing = new MemoryStream ();
152 DeflateStream compressing = new DeflateStream (backing, CompressionMode.Compress);
153 compressing.Close ();
154 compressing.Flush ();
158 [ExpectedException (typeof (NotSupportedException))]
159 public void CheckSeek ()
161 MemoryStream backing = new MemoryStream (compressed_data);
162 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
163 decompressing.Seek (20, SeekOrigin.Current);
167 [ExpectedException (typeof (NotSupportedException))]
168 public void CheckSetLength ()
170 MemoryStream backing = new MemoryStream (compressed_data);
171 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
172 decompressing.SetLength (20);
176 public void CheckGetCanSeekProp ()
178 MemoryStream backing = new MemoryStream (compressed_data);
179 DeflateStream decompress = new DeflateStream (backing, CompressionMode.Decompress);
180 Assert.IsFalse (decompress.CanSeek, "#A1");
181 Assert.IsTrue (backing.CanSeek, "#A2");
182 decompress.Dispose ();
183 Assert.IsFalse (decompress.CanSeek, "#A3");
184 Assert.IsFalse (backing.CanSeek, "#A4");
186 backing = new MemoryStream ();
187 DeflateStream compress = new DeflateStream (backing, CompressionMode.Compress);
188 Assert.IsFalse (compress.CanSeek, "#B1");
189 Assert.IsTrue (backing.CanSeek, "#B2");
191 Assert.IsFalse (decompress.CanSeek, "#B3");
192 Assert.IsFalse (backing.CanSeek, "#B4");
196 public void CheckGetCanReadProp ()
198 MemoryStream backing = new MemoryStream (compressed_data);
199 DeflateStream decompress = new DeflateStream (backing, CompressionMode.Decompress);
200 Assert.IsTrue (decompress.CanRead, "#A1");
201 Assert.IsTrue (backing.CanRead, "#A2");
202 decompress.Dispose ();
203 Assert.IsFalse (decompress.CanRead, "#A3");
204 Assert.IsFalse (backing.CanRead, "#A4");
206 backing = new MemoryStream ();
207 DeflateStream compress = new DeflateStream (backing, CompressionMode.Compress);
208 Assert.IsFalse (compress.CanRead, "#B1");
209 Assert.IsTrue (backing.CanRead, "#B2");
211 Assert.IsFalse (decompress.CanRead, "#B3");
212 Assert.IsFalse (backing.CanRead, "#B4");
216 public void CheckGetCanWriteProp ()
218 MemoryStream backing = new MemoryStream ();
219 DeflateStream decompress = new DeflateStream (backing, CompressionMode.Decompress);
220 Assert.IsFalse (decompress.CanWrite, "#A1");
221 Assert.IsTrue (backing.CanWrite, "#A2");
222 decompress.Dispose ();
223 Assert.IsFalse (decompress.CanWrite, "#A3");
224 Assert.IsFalse (backing.CanWrite, "#A4");
226 backing = new MemoryStream ();
227 DeflateStream compress = new DeflateStream (backing, CompressionMode.Compress);
228 Assert.IsTrue (compress.CanWrite, "#B1");
229 Assert.IsTrue (backing.CanWrite, "#B2");
231 Assert.IsFalse (decompress.CanWrite, "#B3");
232 Assert.IsFalse (backing.CanWrite, "#B4");
236 [ExpectedException (typeof (NotSupportedException))]
237 public void CheckSetLengthProp ()
239 MemoryStream backing = new MemoryStream (compressed_data);
240 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
241 decompressing.SetLength (20);
245 [ExpectedException (typeof (NotSupportedException))]
246 public void CheckGetLengthProp ()
248 MemoryStream backing = new MemoryStream (compressed_data);
249 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
250 long length = decompressing.Length;
254 [ExpectedException (typeof (NotSupportedException))]
255 public void CheckGetPositionProp ()
257 MemoryStream backing = new MemoryStream (compressed_data);
258 DeflateStream decompressing = new DeflateStream (backing, CompressionMode.Decompress);
259 long position = decompressing.Position;
263 public void DisposeTest ()
265 MemoryStream backing = new MemoryStream (compressed_data);
266 DeflateStream decompress = new DeflateStream (backing, CompressionMode.Decompress);
267 decompress.Dispose ();
268 decompress.Dispose ();
271 static byte [] compressed_data = { 0xf3, 0x48, 0xcd, 0xc9, 0xc9,
276 public void JunkAtTheEnd ()
278 // Write a deflated stream, then some additional data...
279 using (MemoryStream ms = new MemoryStream())
281 // The compressed stream
282 using (DeflateStream stream = new DeflateStream(ms, CompressionMode.Compress, true))
291 // Reading: this should not hang
292 using (DeflateStream stream = new DeflateStream(ms, CompressionMode.Decompress))
294 byte[] buffer = new byte[512];
295 int len = stream.Read(buffer, 0, buffer.Length);
296 Console.WriteLine(len == 1);