2 // System.IO.BufferedStream Unit Tests
\r
5 // Ville Palo (vi64pa@kolumbus.fi)
\r
6 // Sebastien Pouliot <sebastien@ximian.com>
\r
8 // (C) 2003 Ville Palo
\r
9 // Copyright (C) 2004 Novell (http://www.novell.com)
\r
12 using NUnit.Framework;
\r
17 namespace MonoTests.System.IO {
\r
20 public class BufferedStreamTest : Assertion {
\r
22 private MemoryStream mem;
\r
25 protected void SetUp ()
\r
27 mem = new MemoryStream ();
\r
31 protected void TearDown ()
\r
33 //Some tests might mess with mem, so let's check it first
\r
42 MemoryStream str = new MemoryStream ();
\r
43 str.Write (new byte [] {1, 2, 3, 4, 5, 6}, 0, 6);
\r
44 BufferedStream stream = new BufferedStream (str);
\r
46 AssertEquals ("test#01", true, stream.CanRead);
\r
47 AssertEquals ("test#02", true, stream.CanSeek);
\r
48 AssertEquals ("test#03", true, stream.CanWrite);
\r
49 AssertEquals ("test#04", 6, stream.Length);
\r
50 AssertEquals ("test#05", 6, stream.Position);
\r
52 string path = Path.GetTempFileName ();
\r
53 if (File.Exists (path))
\r
56 FileStream file = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write);
\r
57 stream = new BufferedStream (file);
\r
58 AssertEquals ("test#06", false, stream.CanRead);
\r
59 AssertEquals ("test#07", true, stream.CanSeek);
\r
60 AssertEquals ("test#08", true, stream.CanWrite);
\r
61 AssertEquals ("test#09", 0, stream.Length);
\r
62 AssertEquals ("test#10", 0, stream.Position);
\r
65 if (File.Exists (path))
\r
68 file = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Write);
\r
69 stream = new BufferedStream (file, 12);
\r
70 AssertEquals ("test#11", false, stream.CanRead);
\r
71 AssertEquals ("test#12", true, stream.CanSeek);
\r
72 AssertEquals ("test#13", true, stream.CanWrite);
\r
73 AssertEquals ("test#14", 0, stream.Length);
\r
74 AssertEquals ("test#15", 0, stream.Position);
\r
77 if (File.Exists (path))
\r
82 /// Throws an exception if stream is null
\r
85 [ExpectedException(typeof(ArgumentNullException))]
\r
86 public void CtorNullExceptionStream ()
\r
88 BufferedStream stream = new BufferedStream (null);
\r
92 /// Throws an exception if stream is null
\r
95 [ExpectedException(typeof(ArgumentNullException))]
\r
96 public void CtorNullExceptionStream1 ()
\r
98 BufferedStream stream = new BufferedStream (null, 12);
\r
102 /// Throws an exception if stream is null
\r
105 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
106 public void CtorOutOfRangeExceptionStream1 ()
\r
108 MemoryStream str = new MemoryStream ();
\r
109 BufferedStream stream = new BufferedStream (str, -12);
\r
114 [ExpectedException(typeof(ObjectDisposedException))]
\r
115 public void CtorOutOfRangeException2 ()
\r
117 MemoryStream str = new MemoryStream ();
\r
119 BufferedStream stream = new BufferedStream (str);
\r
123 public void Close1 ()
\r
125 BufferedStream stream = new BufferedStream (mem);
\r
131 public void Close2 ()
\r
133 BufferedStream stream = new BufferedStream (mem);
\r
135 AssertEquals ("test#01", false, stream.CanRead);
\r
136 AssertEquals ("test#02", false, stream.CanSeek);
\r
137 AssertEquals ("test#03", false, stream.CanWrite);
\r
141 [ExpectedException(typeof(ObjectDisposedException))]
\r
142 public void Close3 ()
\r
144 BufferedStream stream = new BufferedStream (mem);
\r
146 long l = stream.Position;
\r
150 [ExpectedException(typeof(ObjectDisposedException))]
\r
151 public void Close4 ()
\r
153 BufferedStream stream = new BufferedStream (mem);
\r
155 long l = stream.Length;
\r
159 [ExpectedException(typeof(ObjectDisposedException))]
\r
160 public void Close5 ()
\r
162 BufferedStream stream = new BufferedStream (mem);
\r
164 stream.WriteByte (1);
\r
168 [ExpectedException(typeof(ObjectDisposedException))]
\r
169 public void Close6 ()
\r
171 BufferedStream stream = new BufferedStream (mem);
\r
173 stream.ReadByte ();
\r
177 [ExpectedException(typeof(NotSupportedException))]
\r
178 public void Close7 ()
\r
180 BufferedStream stream = new BufferedStream (mem);
\r
182 stream.WriteByte (1);
\r
186 public void Read ()
\r
188 mem.Write (new byte [] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 8);
\r
189 BufferedStream stream = new BufferedStream (mem);
\r
191 byte [] bytes = new byte [10];
\r
192 stream.Read (bytes, 0, 3);
\r
193 AssertEquals ("test#01", 0, bytes [0]);
\r
194 AssertEquals ("test#02", 0, bytes [1]);
\r
195 AssertEquals ("test#03", 0, bytes [2]);
\r
197 stream.Seek (0, SeekOrigin.Begin);
\r
198 stream.Read (bytes, 0, 3);
\r
199 AssertEquals ("test#04", 0, bytes [0]);
\r
200 AssertEquals ("test#05", 1, bytes [1]);
\r
201 AssertEquals ("test#06", 2, bytes [2]);
\r
202 AssertEquals ("test#07", 0, bytes [0]);
\r
204 stream.Read (bytes, 5, 3);
\r
205 AssertEquals ("test#08", 3, bytes [5]);
\r
206 AssertEquals ("test#09", 4, bytes [6]);
\r
207 AssertEquals ("test#10", 5, bytes [7]);
\r
208 AssertEquals ("test#11", 0, bytes [8]);
\r
210 stream.Read (bytes, 0, 10);
\r
211 AssertEquals ("test#12", 3, bytes [5]);
\r
212 AssertEquals ("test#13", 4, bytes [6]);
\r
213 AssertEquals ("test#14", 5, bytes [7]);
\r
214 AssertEquals ("test#15", 0, bytes [9]);
\r
218 [ExpectedException(typeof(ArgumentException))]
\r
219 public void ReadException ()
\r
221 mem.Write (new byte [] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 8);
\r
222 BufferedStream stream = new BufferedStream (mem);
\r
224 byte [] bytes = new byte [10];
\r
225 stream.Read (bytes, 0, 30);
\r
229 [ExpectedException(typeof(ArgumentNullException))]
\r
230 public void Read_Null ()
\r
232 BufferedStream stream = new BufferedStream (mem);
\r
233 stream.Read (null, 0, 0);
\r
237 [ExpectedException(typeof(NotSupportedException))]
\r
238 public void Read_CantRead ()
\r
240 WriteOnlyStream wo = new WriteOnlyStream ();
\r
241 BufferedStream stream = new BufferedStream (wo);
\r
242 stream.Read (new byte [1], 0, 1);
\r
246 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
247 public void Read_OffsetNegative ()
\r
249 BufferedStream stream = new BufferedStream (mem);
\r
250 stream.Read (new byte [1], -1, 1);
\r
254 [ExpectedException(typeof(ArgumentException))]
\r
255 public void Read_OffsetOverflow ()
\r
257 BufferedStream stream = new BufferedStream (mem);
\r
258 stream.Read (new byte [1], Int32.MaxValue, 1);
\r
262 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
263 public void Read_CountNegative ()
\r
265 BufferedStream stream = new BufferedStream (mem);
\r
266 stream.Read (new byte [1], 1, -1);
\r
270 [ExpectedException(typeof(ArgumentException))]
\r
271 public void Read_CountOverflow ()
\r
273 BufferedStream stream = new BufferedStream (mem);
\r
274 stream.Read (new byte [1], 1, Int32.MaxValue);
\r
278 public void ReadByte ()
\r
280 mem.Write (new byte [] {0, 1, 2, 3, 4, 5, 6, 7}, 0, 8);
\r
281 BufferedStream stream = new BufferedStream (mem);
\r
283 AssertEquals ("test#01", -1, stream.ReadByte ());
\r
284 AssertEquals ("test#02", -1, stream.ReadByte ());
\r
285 AssertEquals ("test#03", -1, stream.ReadByte ());
\r
287 stream.Seek (0, SeekOrigin.Begin);
\r
288 AssertEquals ("test#04", 0, stream.ReadByte ());
\r
289 AssertEquals ("test#05", 1, stream.ReadByte ());
\r
290 AssertEquals ("test#06", 2, stream.ReadByte ());
\r
291 AssertEquals ("test#07", 3, stream.ReadByte ());
\r
295 public void Write ()
\r
297 BufferedStream stream = new BufferedStream (mem);
\r
299 stream.Write (new byte [] {0, 1, 2, 3, 4}, 0, 4);
\r
300 AssertEquals ("test#01", 4, stream.Length);
\r
301 byte [] bytes = mem.GetBuffer ();
\r
302 AssertEquals ("test#02", 0, bytes [0]);
\r
303 AssertEquals ("test#03", 1, bytes [1]);
\r
304 AssertEquals ("test#04", 2, bytes [2]);
\r
305 AssertEquals ("test#05", 3, bytes [3]);
\r
307 bytes = new byte [] {1, 4, 3};
\r
308 stream.Write (bytes, 0, 3);
\r
310 bytes = mem.GetBuffer ();
\r
311 AssertEquals ("test#06", 0, bytes [0]);
\r
312 AssertEquals ("test#07", 1, bytes [1]);
\r
313 AssertEquals ("test#08", 2, bytes [2]);
\r
314 AssertEquals ("test#09", 3, bytes [3]);
\r
315 AssertEquals ("test#10", 1, bytes [4]);
\r
316 AssertEquals ("test#11", 4, bytes [5]);
\r
317 AssertEquals ("test#10", 3, bytes [6]);
\r
318 AssertEquals ("test#11", 0, bytes [7]);
\r
319 AssertEquals ("test#12", 7, stream.Length);
\r
323 [ExpectedException(typeof (ArgumentException))]
\r
324 public void WriteException ()
\r
326 BufferedStream stream = new BufferedStream (mem);
\r
327 stream.Write (new byte [] {0,1,2,3}, 0, 10);
\r
331 [ExpectedException(typeof(ArgumentNullException))]
\r
332 public void Write_Null ()
\r
334 BufferedStream stream = new BufferedStream (mem);
\r
335 stream.Write (null, 0, 0);
\r
339 [ExpectedException(typeof(NotSupportedException))]
\r
340 public void Write_CantWrite ()
\r
342 ReadOnlyStream ro = new ReadOnlyStream ();
\r
343 BufferedStream stream = new BufferedStream (ro);
\r
344 stream.Write (new byte [1], 0, 1);
\r
348 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
349 public void Write_OffsetNegative ()
\r
351 BufferedStream stream = new BufferedStream (mem);
\r
352 stream.Write (new byte [1], -1, 1);
\r
356 [ExpectedException(typeof(ArgumentException))]
\r
357 public void Write_OffsetOverflow ()
\r
359 BufferedStream stream = new BufferedStream (mem);
\r
360 stream.Write (new byte [1], Int32.MaxValue, 1);
\r
364 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
365 public void Write_CountNegative ()
\r
367 BufferedStream stream = new BufferedStream (mem);
\r
368 stream.Write (new byte [1], 1, -1);
\r
372 [ExpectedException(typeof(ArgumentException))]
\r
373 public void Write_CountOverflow ()
\r
375 BufferedStream stream = new BufferedStream (mem);
\r
376 stream.Write (new byte [1], 1, Int32.MaxValue);
\r
380 public void WriteByte ()
\r
382 BufferedStream stream = new BufferedStream (mem);
\r
383 stream.WriteByte (1);
\r
384 stream.WriteByte (2);
\r
385 stream.WriteByte (3);
\r
387 AssertEquals ("test#01", 256, mem.GetBuffer ().Length);
\r
388 AssertEquals ("test#02", 3, stream.Length);
\r
389 AssertEquals ("test#03", 1, mem.GetBuffer () [0]);
\r
390 AssertEquals ("test#04", 2, mem.GetBuffer () [1]);
\r
391 AssertEquals ("test#05", 3, mem.GetBuffer () [2]);
\r
395 public void Flush ()
\r
397 BufferedStream stream = new BufferedStream (mem);
\r
398 stream.WriteByte (1);
\r
399 stream.WriteByte (2);
\r
401 byte [] bytes = mem.GetBuffer ();
\r
402 AssertEquals ("test#01", 0, bytes.Length);
\r
405 bytes = mem.GetBuffer ();
\r
406 AssertEquals ("test#02", 256, bytes.Length);
\r
407 AssertEquals ("test#03", 1, bytes [0]);
\r
408 AssertEquals ("test#04", 2, bytes [1]);
\r
410 mem = new MemoryStream ();
\r
411 bytes = new byte [] {0, 1, 2, 3, 4, 5};
\r
412 stream = new BufferedStream (mem);
\r
413 stream.Write (bytes, 0, 2);
\r
414 AssertEquals ("test#05", 2, stream.Length);
\r
415 bytes = mem.GetBuffer ();
\r
416 AssertEquals ("test#06", 256, bytes.Length);
\r
418 AssertEquals ("test#07", 0, bytes [0]);
\r
419 AssertEquals ("test#08", 1, bytes [1]);
\r
421 stream.Write (bytes, 0, 2);
\r
423 bytes = mem.GetBuffer ();
\r
424 AssertEquals ("test#09", 0, bytes [0]);
\r
425 AssertEquals ("test#10", 1, bytes [1]);
\r
426 AssertEquals ("test#11", 0, bytes [2]);
\r
427 AssertEquals ("test#12", 0, bytes [3]);
\r
429 bytes = mem.GetBuffer ();
\r
430 AssertEquals ("test#13", 0, bytes [2]);
\r
431 AssertEquals ("test#14", 1, bytes [3]);
\r
435 public void Seek ()
\r
437 BufferedStream stream = new BufferedStream (mem);
\r
438 stream.Write (new byte [] {0, 1, 2, 3, 4, 5}, 0, 6);
\r
440 AssertEquals ("test#01", 6, stream.Position);
\r
442 stream.Seek (-5, SeekOrigin.End);
\r
443 AssertEquals ("test#02", 1, stream.Position);
\r
445 stream.Seek (3, SeekOrigin.Current);
\r
446 AssertEquals ("test#03", 4, stream.Position);
\r
448 stream.Seek (300, SeekOrigin.Current);
\r
449 AssertEquals ("test#04", 304, stream.Position);
\r
453 [ExpectedException(typeof (IOException))]
\r
454 public void SeekException ()
\r
456 BufferedStream stream = new BufferedStream (mem);
\r
457 stream.Seek (-1, SeekOrigin.Begin);
\r
461 public void SetLength ()
\r
463 BufferedStream stream = new BufferedStream (mem);
\r
464 stream.Write (new byte [] {0,1,2,3,4,5}, 0, 6);
\r
466 AssertEquals ("test#01", 6, stream.Length);
\r
467 stream.SetLength (60);
\r
468 AssertEquals ("test#02", 60, stream.Length);
\r
470 stream.SetLength (2);
\r
471 AssertEquals ("test#03", 2, stream.Length);
\r
475 [ExpectedException(typeof(ArgumentOutOfRangeException))]
\r
476 public void SetLengthException ()
\r
478 BufferedStream stream = new BufferedStream (mem);
\r
479 stream.SetLength (-1);
\r
483 [ExpectedException(typeof(NotSupportedException))]
\r
484 public void SetLengthException2 ()
\r
486 BufferedStream stream = new BufferedStream (mem);
\r
488 stream.SetLength (1);
\r
492 public void SetLengthException3 ()
\r
494 BufferedStream stream = new BufferedStream (mem);
\r
496 // Strangely, this does not throw an exception on .NET 1.1
\r
497 stream.SetLength (1);
\r
501 public void Position ()
\r
503 mem = new MemoryStream ();
\r
504 BufferedStream stream = new BufferedStream (mem,5);
\r
505 stream.Write (new byte [] {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, 0, 16);
\r
507 stream.Position = 0;
\r
508 AssertEquals ("test#01", 0, stream.Position);
\r
509 AssertEquals ("test#02", 0, stream.ReadByte ());
\r
511 stream.Position = 5;
\r
512 AssertEquals ("test#01", 5, stream.Position);
\r
513 AssertEquals ("test#02", 5, stream.ReadByte ());
\r
515 // Should not need to read from the underlying stream:
\r
516 stream.Position = 7;
\r
517 AssertEquals ("test#01", 7, stream.Position);
\r
518 AssertEquals ("test#02", 7, stream.ReadByte ());
\r
520 // Should not need to read from the underlying stream:
\r
521 stream.Position = 5;
\r
522 AssertEquals ("test#01", 5, stream.Position);
\r
523 AssertEquals ("test#02", 5, stream.ReadByte ());
\r
525 // Should not need to read from the underlying stream:
\r
526 stream.Position = 9;
\r
527 AssertEquals ("test#01", 9, stream.Position);
\r
528 AssertEquals ("test#02", 9, stream.ReadByte ());
\r
530 stream.Position = 10;
\r
531 AssertEquals ("test#01", 10, stream.Position);
\r
532 AssertEquals ("test#02", 10, stream.ReadByte ());
\r
534 stream.Position = 9;
\r
535 AssertEquals ("test#01", 9, stream.Position);
\r
536 AssertEquals ("test#02", 9, stream.ReadByte ());
\r
540 public void PositionAfterSetLength ()
\r
542 BufferedStream stream = new BufferedStream (new MemoryStream ());
\r
543 stream.SetLength (32);
\r
544 stream.Position = 32;
\r
545 stream.SetLength (16);
\r
546 AssertEquals ("Position==16", 16, stream.Position);
\r
550 [ExpectedException (typeof (ObjectDisposedException))]
\r
551 public void SetLength_Disposed ()
\r
553 BufferedStream stream = new BufferedStream (new MemoryStream ());
\r
555 stream.SetLength (16);
\r
559 [ExpectedException (typeof (NotSupportedException))]
\r
560 public void Seek_ClosedMemoryStream ()
\r
562 MemoryStream ms = new MemoryStream ();
\r
563 BufferedStream stream = new BufferedStream (ms);
\r
565 stream.Seek (0, SeekOrigin.Begin);
\r
569 [ExpectedException (typeof (ObjectDisposedException))]
\r
570 public void Seek_ClosedBufferedStream ()
\r
572 BufferedStream stream = new BufferedStream (new MemoryStream ());
\r
574 stream.Seek (0, SeekOrigin.Begin);
\r