1 /* -*- Mode: csharp; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 // GZipStreamTest.cs - NUnit Test Cases for the System.IO.Compression.GZipStream class
6 // Christopher James Lahey <clahey@ximian.com>
8 // (C) 2004 Novell, Inc. <http://www.novell.com>
11 using NUnit.Framework;
14 using System.IO.Compression;
17 namespace MonoTests.System.IO.Compression
20 public class GZipStreamTest
22 private static void CopyStream (Stream src, Stream dest)
24 byte[] array = new byte[1024];
26 bytes_read = src.Read (array, 0, 1024);
27 while (bytes_read != 0) {
28 dest.Write (array, 0, bytes_read);
29 bytes_read = src.Read (array, 0, 1024);
33 private static bool compare_buffers (byte[] first, byte[] second, int length)
35 if (first.Length < length || second.Length < length) {
38 for (int i = 0; i < length; i++) {
39 if (first[i] != second[i]) {
47 [ExpectedException (typeof (ArgumentNullException))]
48 public void Constructor_Null ()
50 GZipStream ds = new GZipStream (null, CompressionMode.Compress);
54 [ExpectedException (typeof (ArgumentException))]
55 public void Constructor_InvalidCompressionMode ()
57 GZipStream ds = new GZipStream (new MemoryStream (), (CompressionMode)Int32.MinValue);
61 public void CheckCompressDecompress ()
63 byte [] data = new byte[100000];
64 for (int i = 0; i < 100000; i++) {
67 MemoryStream dataStream = new MemoryStream (data);
68 MemoryStream backing = new MemoryStream ();
69 GZipStream compressing = new GZipStream (backing, CompressionMode.Compress, true);
70 CopyStream (dataStream, compressing);
73 backing.Seek (0, SeekOrigin.Begin);
74 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
75 MemoryStream output = new MemoryStream ();
76 CopyStream (decompressing, output);
77 Assert.IsTrue (compare_buffers (data, output.GetBuffer(), (int) output.Length));
78 decompressing.Close();
83 public void CheckDecompress ()
85 byte [] data = {0x1f, 0x8b, 0x08, 0x08, 0x70, 0xbb, 0x5d, 0x41, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0xe7, 0x02, 0x00, 0x16, 0x35, 0x96, 0x31, 0x06, 0x00, 0x00, 0x00 };
86 MemoryStream backing = new MemoryStream (data);
87 GZipStream decompressing = new GZipStream (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 byte [] data = {0x1f, 0x8b, 0x08, 0x08, 0x70, 0xbb, 0x5d, 0x41, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0xe7, 0x02, 0x00, 0x16, 0x35, 0x96, 0x31, 0x06, 0x00, 0x00, 0x00 };
98 MemoryStream backing = new MemoryStream (data);
99 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
100 decompressing.Read (null, 0, 20);
104 [ExpectedException (typeof (InvalidOperationException))]
105 public void CheckCompressingRead ()
107 byte [] dummy = new byte[20];
108 MemoryStream backing = new MemoryStream ();
109 GZipStream compressing = new GZipStream (backing, CompressionMode.Compress);
110 compressing.Read (dummy, 0, 20);
114 [ExpectedException (typeof (ArgumentException))]
115 public void CheckRangeRead ()
117 byte [] data = {0x1f, 0x8b, 0x08, 0x08, 0x70, 0xbb, 0x5d, 0x41, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0xe7, 0x02, 0x00, 0x16, 0x35, 0x96, 0x31, 0x06, 0x00, 0x00, 0x00 };
118 byte [] dummy = new byte[20];
119 MemoryStream backing = new MemoryStream (data);
120 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
121 decompressing.Read (dummy, 10, 20);
126 [Category("NotWorking")]
127 public void CheckInvalidDataRead ()
129 byte [] data = {0x1f, 0x8b, 0x08, 0x08, 0x70, 0xbb, 0x5d, 0x41, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0x11, 0x78, 0x89, 0x91, 0xbe, 0xf3, 0x48, 0xcd, 0xc9, 0xc9, 0xe7, 0x02, 0x00, 0x16, 0x35, 0x96, 0x31, 0x06, 0x00, 0x00, 0x00 };
130 byte [] dummy = new byte[20];
131 MemoryStream backing = new MemoryStream (data);
132 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
134 decompressing.Read (dummy, 0, 20);
136 } catch (InvalidDataException) {
142 public void CheckClosedRead ()
144 byte [] dummy = new byte[20];
145 MemoryStream backing = new MemoryStream (compressed_data);
146 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
147 decompressing.Close ();
149 decompressing.Read (dummy, 0, 20);
151 } catch (ObjectDisposedException) {
156 [ExpectedException (typeof (ObjectDisposedException))]
157 public void CheckClosedFlush ()
159 MemoryStream backing = new MemoryStream ();
160 GZipStream compressing = new GZipStream (backing, CompressionMode.Compress);
161 compressing.Close ();
162 compressing.Flush ();
166 [ExpectedException (typeof (NotSupportedException))]
167 public void CheckSeek ()
169 MemoryStream backing = new MemoryStream (compressed_data);
170 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
171 decompressing.Seek (20, SeekOrigin.Current);
175 [ExpectedException (typeof (NotSupportedException))]
176 public void CheckSetLength ()
178 MemoryStream backing = new MemoryStream (compressed_data);
179 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
180 decompressing.SetLength (20);
184 public void CheckGetCanSeekProp ()
186 MemoryStream backing = new MemoryStream (compressed_data);
187 GZipStream decompress = new GZipStream (backing, CompressionMode.Decompress);
188 Assert.IsFalse (decompress.CanSeek, "#A1");
189 Assert.IsTrue (backing.CanSeek, "#A2");
190 decompress.Dispose ();
191 Assert.IsFalse (decompress.CanSeek, "#A3");
192 Assert.IsFalse (backing.CanSeek, "#A4");
194 backing = new MemoryStream ();
195 GZipStream compress = new GZipStream (backing, CompressionMode.Compress);
196 Assert.IsFalse (compress.CanSeek, "#B1");
197 Assert.IsTrue (backing.CanSeek, "#B2");
199 Assert.IsFalse (decompress.CanSeek, "#B3");
200 Assert.IsFalse (backing.CanSeek, "#B4");
204 public void CheckGetCanReadProp ()
206 MemoryStream backing = new MemoryStream (compressed_data);
207 GZipStream decompress = new GZipStream (backing, CompressionMode.Decompress);
208 Assert.IsTrue (decompress.CanRead, "#A1");
209 Assert.IsTrue (backing.CanRead, "#A2");
210 decompress.Dispose ();
211 Assert.IsFalse (decompress.CanRead, "#A3");
212 Assert.IsFalse (backing.CanRead, "#A4");
214 backing = new MemoryStream ();
215 GZipStream compress = new GZipStream (backing, CompressionMode.Compress);
216 Assert.IsFalse (compress.CanRead, "#B1");
217 Assert.IsTrue (backing.CanRead, "#B2");
219 Assert.IsFalse (decompress.CanRead, "#B3");
220 Assert.IsFalse (backing.CanRead, "#B4");
224 public void CheckGetCanWriteProp ()
226 MemoryStream backing = new MemoryStream (compressed_data);
227 GZipStream decompress = new GZipStream (backing, CompressionMode.Decompress);
228 Assert.IsFalse (decompress.CanWrite, "#A1");
229 Assert.IsTrue (backing.CanWrite, "#A2");
230 decompress.Dispose ();
231 Assert.IsFalse (decompress.CanWrite, "#A3");
232 Assert.IsFalse (backing.CanWrite, "#A4");
234 backing = new MemoryStream ();
235 GZipStream compress = new GZipStream (backing, CompressionMode.Compress);
236 Assert.IsTrue (compress.CanWrite, "#B1");
237 Assert.IsTrue (backing.CanWrite, "#B2");
239 Assert.IsFalse (decompress.CanWrite, "#B3");
240 Assert.IsFalse (backing.CanWrite, "#B4");
244 [ExpectedException (typeof (NotSupportedException))]
245 public void CheckSetLengthProp ()
247 MemoryStream backing = new MemoryStream (compressed_data);
248 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
249 decompressing.SetLength (20);
253 [ExpectedException (typeof (NotSupportedException))]
254 public void CheckGetLengthProp ()
256 MemoryStream backing = new MemoryStream (compressed_data);
257 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
258 long length = decompressing.Length;
262 [ExpectedException (typeof (NotSupportedException))]
263 public void CheckGetPositionProp ()
265 MemoryStream backing = new MemoryStream (compressed_data);
266 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
267 long position = decompressing.Position;
271 public void DisposeTest ()
273 MemoryStream backing = new MemoryStream (compressed_data);
274 GZipStream decompress = new GZipStream (backing, CompressionMode.Decompress);
275 decompress.Dispose ();
276 decompress.Dispose ();
280 public void DisposeOrderTest ()
282 var fs = new MemoryStream();
283 GZipStream compressed = new GZipStream(fs, CompressionMode.Compress);
284 byte[] buffer = new byte[1024];
285 compressed.Write(buffer, 0, buffer.Length);
291 } catch (ObjectDisposedException) {
295 static byte [] compressed_data = {
296 0x1f, 0x8b, 0x08, 0x08, 0x70, 0xbb, 0x5d, 0x41, 0x00,
297 0x03, 0x74, 0x65, 0x73, 0x74, 0x00, 0xf3, 0x48, 0xcd,
298 0xc9, 0xc9, 0xe7, 0x02, 0x00, 0x16, 0x35, 0x96, 0x31,
299 0x06, 0x00, 0x00, 0x00};
301 public MemoryStream GenerateStreamFromString(string s)
303 return new MemoryStream (Encoding.UTF8.GetBytes (s));
308 public void CheckNet45Overloads () // Xambug #21982
310 MemoryStream dataStream = GenerateStreamFromString("Hello");
311 MemoryStream backing = new MemoryStream ();
312 GZipStream compressing = new GZipStream (backing, CompressionLevel.Fastest, true);
313 CopyStream (dataStream, compressing);
317 backing.Seek (0, SeekOrigin.Begin);
318 GZipStream decompressing = new GZipStream (backing, CompressionMode.Decompress);
319 StreamReader reader = new StreamReader (decompressing);
320 Assert.AreEqual ("Hello", reader.ReadLine ());
321 decompressing.Close();