In Test/System.IO:
[mono.git] / mcs / class / corlib / Test / System.IO / MemoryStreamTest.cs
index b325edf299398098c4fccb3d8c4c357265405062..88ad55cab9f50c9be11458b5f4a04a4728c4495f 100644 (file)
 // Copyright (C) 2004 Novell (http://www.novell.com)
 //
 
-using NUnit.Framework;
-using System.IO;
 using System;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
 using System.Text;
 
+using NUnit.Framework;
+
 namespace MonoTests.System.IO
 {
        [TestFixture]
-       public class MemoryStreamTest : Assertion
+       public class MemoryStreamTest
        {
                MemoryStream testStream;
                byte [] testStreamData;
@@ -41,7 +43,7 @@ namespace MonoTests.System.IO
                void VerifyTestData (string id, byte [] testBytes, int start, int count)
                {
                        if (testBytes == null)
-                               Fail (id + "+1 testBytes is null");
+                               Assert.Fail (id + "+1 testBytes is null");
 
                        if (start < 0 ||
                            count < 0  ||
@@ -59,10 +61,25 @@ namespace MonoTests.System.IO
                                                        start + test,
                                                        testBytes [test],
                                                        testStreamData [start + test]);
-                               Fail (id + "-3" + failStr);
+                               Assert.Fail (id + "-3" + failStr);
                        }
                }
 
+               public void AssertEquals (string message, int expected, int actual)
+               {
+                       Assert.AreEqual (expected, actual, message);
+               }
+
+               public void AssertEquals (string message, long expected, long actual)
+               {
+                       Assert.AreEqual (expected, actual, message);
+               }
+
+               public void AssertEquals (string message, bool expected, bool actual)
+               {
+                       Assert.AreEqual (expected, actual, message);
+               }
+
                [Test]
                public void ConstructorsOne ()
                {
@@ -84,7 +101,7 @@ namespace MonoTests.System.IO
                        byte [] buffer = ms.GetBuffer ();
                        // Begin: wow!!!
                        AssertEquals ("#03", -1, ms.ReadByte ());
-                       AssertEquals ("#04", null, buffer); // <--
+                       Assert.IsNull (buffer, "#04"); // <--
                        ms.Read (new byte [5], 0, 5);
                        AssertEquals ("#05", 0, ms.Position);
                        AssertEquals ("#06", 0, ms.Length);
@@ -119,7 +136,7 @@ namespace MonoTests.System.IO
                        } catch (Exception) {
                                return;
                        }
-                       Fail ("#04");
+                       Assert.Fail ("#04");
                }
 
                [Test]
@@ -146,17 +163,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!gotException)
-                               Fail ("#05");
-
-                       gotException = false;
-                       try {
-                               ms.GetBuffer ();
-                       } catch (UnauthorizedAccessException) {
-                               gotException = true;
-                       }
-
-                       if (!gotException)
-                               Fail ("#06");
+                               Assert.Fail ("#05");
 
                        ms.Capacity = 100; // Allowed. It's the same as the one in the ms.
                                           // This is lame, as the length is 50!!!
@@ -169,7 +176,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!gotException)
-                               Fail ("#07");
+                               Assert.Fail ("#07");
 
                        AssertEquals ("#08", 50, ms.ToArray ().Length);
                }
@@ -204,7 +211,7 @@ namespace MonoTests.System.IO
                        VerifyTestData ("R3", readBytes, 80, 20);
 
                        int readByte = testStream.ReadByte();
-                       AssertEquals (-1, readByte);
+                       Assert.AreEqual (-1, readByte, "R4");
                }
 
                [Test]
@@ -220,7 +227,7 @@ namespace MonoTests.System.IO
                        ms.Seek (0, SeekOrigin.Begin); 
                        testStream.Read (readBytes, 0, 100);
                        VerifyTestData ("W1", readBytes, 0, 100);
-               }               
+               }
 
                [Test]
                public void WriteBlock ()
@@ -297,7 +304,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!thrown)
-                               Fail ("#01");
+                               Assert.Fail ("#01");
 
                        thrown = false;
                        try {
@@ -307,7 +314,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!thrown)
-                               Fail ("#02");
+                               Assert.Fail ("#02");
 
                        // The first exception thrown is ObjectDisposed, not ArgumentNull
                        thrown = false;
@@ -318,7 +325,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!thrown)
-                               Fail ("#03");
+                               Assert.Fail ("#03");
 
                        thrown = false;
                        try {
@@ -328,7 +335,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!thrown)
-                               Fail ("#03");
+                               Assert.Fail ("#03");
                }
 
                [Test]
@@ -376,7 +383,7 @@ namespace MonoTests.System.IO
                                thrown = true;
                        }
                        if (!thrown)
-                               Fail ("#01");
+                               Assert.Fail ("#01");
                        
                        thrown = false;
                        try {
@@ -386,7 +393,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!thrown)
-                               Fail ("#02");
+                               Assert.Fail ("#02");
 
                        thrown=false;
                        try {
@@ -397,7 +404,7 @@ namespace MonoTests.System.IO
                        }
 
                        if (!thrown)
-                               Fail ("#03");
+                               Assert.Fail ("#03");
 
                        ms=new MemoryStream (256);
 
@@ -420,12 +427,15 @@ namespace MonoTests.System.IO
                }
 
                [Test]
-               [ExpectedException (typeof (ObjectDisposedException))]
                public void Seek_Disposed () 
                {
                        MemoryStream ms = new MemoryStream ();
                        ms.Close ();
-                       ms.Seek (0, SeekOrigin.Begin);
+                       try {
+                               ms.Seek (0, SeekOrigin.Begin);
+                               Assert.Fail ();
+                       } catch (ObjectDisposedException) {
+                       }
                }
 
                [Test]
@@ -450,6 +460,32 @@ namespace MonoTests.System.IO
                        ms.SetLength (10);
                }
 
+               [Test] // bug #327053
+               [Category ("NotWorking")]
+               public void ZeroingOnExpand ()
+               {
+                       byte [] values = { 3, 2, 1 };
+                       byte [] reference = { 3, 2, 1 };
+                       byte [] cropped = { 3, 0, 0 };
+                       MemoryStream ms = new MemoryStream (values);
+                       Assert.AreEqual (values, reference, "#A1");
+                       ms.Seek (3, SeekOrigin.Begin);
+                       Assert.AreEqual (reference, values, "#A2");
+                       ms.SetLength (1);
+                       Assert.AreEqual (reference, values, "#B1");
+                       byte [] read = new byte [5];
+                       ms.Read (read, 0, 5);
+                       Assert.AreEqual (new byte [] { 0, 0, 0, 0, 0 }, read, "#B2");
+                       Assert.AreEqual (reference, values, "#B3");
+                       ms.SetLength (3);
+                       Assert.AreEqual (cropped, values, "#C1");
+                       ms.Seek (0, SeekOrigin.Begin);
+                       read = new byte [3];
+                       ms.Read (read, 0, 3);
+                       Assert.AreEqual (cropped, read, "#C2");
+                       Assert.AreEqual (cropped, values, "#C3");
+               }
+
                [Test]
                [ExpectedException (typeof (NotSupportedException))]
                public void WriteNonWritable ()
@@ -540,8 +576,169 @@ namespace MonoTests.System.IO
                        ms.SetLength (4);
                        ms.Seek (4, SeekOrigin.End);
                        ms.WriteByte (0xFF);
-                       AssertEquals ("Result", "01-01-01-01-00-00-00-00-FF", BitConverter.ToString (ms.ToArray ()));
+                       Assert.AreEqual ("01-01-01-01-00-00-00-00-FF", BitConverter.ToString (ms.ToArray ()), "Result");
                }
+
+               [Test]
+               public void PubliclyVisible ()
+               {
+                       MemoryStream ms = new MemoryStream ();
+                       Assert.IsNotNull (ms.GetBuffer (), "ctor()");
+
+                       ms = new MemoryStream (1);
+                       Assert.IsNotNull (ms.GetBuffer (), "ctor(1)");
+
+                       ms = new MemoryStream (new byte[1], 0, 1, true, true);
+                       Assert.IsNotNull (ms.GetBuffer (), "ctor(byte[],int,int,bool,bool");
+               }
+
+               [Test]
+               [ExpectedException (typeof (UnauthorizedAccessException))]
+               public void PubliclyVisible_Ctor_ByteArray ()
+               {
+                       MemoryStream ms = new MemoryStream (new byte[0]);
+                       Assert.IsNotNull (ms.GetBuffer ());
+               }
+
+               [Test]
+               [ExpectedException (typeof (UnauthorizedAccessException))]
+               public void PubliclyVisible_Ctor_ByteArray_Boolean ()
+               {
+                       MemoryStream ms = new MemoryStream (new byte[0], true);
+                       Assert.IsNotNull (ms.GetBuffer ());
+               }
+
+               [Test]
+               [ExpectedException (typeof (UnauthorizedAccessException))]
+               public void PubliclyVisible_Ctor_ByteArray_Int_Int ()
+               {
+                       MemoryStream ms = new MemoryStream (new byte[1], 0, 1);
+                       Assert.IsNotNull (ms.GetBuffer ());
+               }
+
+               [Test]
+               [ExpectedException (typeof (UnauthorizedAccessException))]
+               public void PubliclyVisible_Ctor_ByteArray_Int_Int_Boolean ()
+               {
+                       MemoryStream ms = new MemoryStream (new byte[1], 0, 1, true);
+                       Assert.IsNotNull (ms.GetBuffer ());
+               }
+
+               [Test]
+               [ExpectedException (typeof (UnauthorizedAccessException))]
+               public void PubliclyVisible_Ctor_ByteArray_Int_Int_Boolean_Boolean ()
+               {
+                       MemoryStream ms = new MemoryStream (new byte[1], 0, 1, true, false);
+                       Assert.IsNotNull (ms.GetBuffer ());
+               }
+
+               [Test] // bug #350860
+               public void ToArray_Empty ()
+               {
+                       MemoryStream ms = new MemoryStream (1);
+                       ms.Capacity = 0;
+                       ms.ToArray ();
+               }
+
+               [Test] // bug #80205
+               [Category ("NotWorking")]
+               public void SerializeTest ()
+               {
+                       MemoryStream input = new MemoryStream ();
+                       byte [] bufferIn = Encoding.UTF8.GetBytes ("some test");
+                       input.Write (bufferIn, 0, bufferIn.Length);
+                       input.Position = 0;
+
+                       BinaryFormatter bf = new BinaryFormatter ();
+                       MemoryStream ms = new MemoryStream ();
+                       bf.Serialize (ms, input);
+
+                       byte [] bufferOut = new byte [ms.Length];
+                       ms.Position = 0;
+                       ms.Read (bufferOut, 0, bufferOut.Length);
+
+                       Assert.AreEqual (_serialized, bufferOut);
+               }
+
+               [Test] // bug #80205
+               [Category ("NotWorking")]
+               public void DeserializeTest ()
+               {
+                       MemoryStream ms = new MemoryStream ();
+                       ms.Write (_serialized, 0, _serialized.Length);
+                       ms.Position = 0;
+
+                       BinaryFormatter bf = new BinaryFormatter ();
+                       MemoryStream output = (MemoryStream) bf.Deserialize (ms);
+                       using (StreamReader sr = new StreamReader (output)) {
+                               Assert.AreEqual ("some test", sr.ReadToEnd ());
+                       }
+               }
+
+               private static byte [] _serialized = new byte [] {
+                       0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00,
+                       0x16, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x49, 0x4f, 0x2e,
+                       0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61,
+                       0x6d, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x5f, 0x62, 0x75, 0x66, 0x66,
+                       0x65, 0x72, 0x07, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x09,
+                       0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x07, 0x5f,
+                       0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x09, 0x5f, 0x63, 0x61, 0x70,
+                       0x61, 0x63, 0x69, 0x74, 0x79, 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x61,
+                       0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x09, 0x5f, 0x77, 0x72, 0x69,
+                       0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a, 0x5f, 0x65, 0x78, 0x70, 0x6f,
+                       0x73, 0x61, 0x62, 0x6c, 0x65, 0x07, 0x5f, 0x69, 0x73, 0x4f, 0x70,
+                       0x65, 0x6e, 0x1d, 0x4d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x42,
+                       0x79, 0x52, 0x65, 0x66, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2b,
+                       0x5f, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x07,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x08,
+                       0x08, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
+                       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x0a,
+                       0x0f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x73,
+                       0x6f, 0x6d, 0x65, 0x20, 0x74, 0x65, 0x73, 0x74, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                       0x00, 0x00, 0x0b };
+#if NET_2_0
+               class MyMemoryStream : MemoryStream {
+
+                       public bool DisposedCalled = false;
+
+                       protected override void Dispose(bool disposing)
+                       {
+                               DisposedCalled = true;
+                       }
+               }
+
+               [Test] // https://bugzilla.novell.com/show_bug.cgi?id=322672
+               public void BaseDisposeCalled ()
+               {
+                       MyMemoryStream ms = new MyMemoryStream ();
+                       Assert.IsFalse (ms.DisposedCalled, "Before");
+                       ms.Close ();
+                       Assert.IsTrue (ms.DisposedCalled, "After");
+               }
+#endif
        }
 }
-