// 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;
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 ||
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 ()
{
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);
} catch (Exception) {
return;
}
- Fail ("#04");
+ Assert.Fail ("#04");
}
[Test]
}
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!!!
}
if (!gotException)
- Fail ("#07");
+ Assert.Fail ("#07");
AssertEquals ("#08", 50, ms.ToArray ().Length);
}
VerifyTestData ("R3", readBytes, 80, 20);
int readByte = testStream.ReadByte();
- AssertEquals (-1, readByte);
+ Assert.AreEqual (-1, readByte, "R4");
}
[Test]
ms.Seek (0, SeekOrigin.Begin);
testStream.Read (readBytes, 0, 100);
VerifyTestData ("W1", readBytes, 0, 100);
- }
+ }
[Test]
public void WriteBlock ()
}
if (!thrown)
- Fail ("#01");
+ Assert.Fail ("#01");
thrown = false;
try {
}
if (!thrown)
- Fail ("#02");
+ Assert.Fail ("#02");
// The first exception thrown is ObjectDisposed, not ArgumentNull
thrown = false;
}
if (!thrown)
- Fail ("#03");
+ Assert.Fail ("#03");
thrown = false;
try {
}
if (!thrown)
- Fail ("#03");
+ Assert.Fail ("#03");
}
[Test]
thrown = true;
}
if (!thrown)
- Fail ("#01");
+ Assert.Fail ("#01");
thrown = false;
try {
}
if (!thrown)
- Fail ("#02");
+ Assert.Fail ("#02");
thrown=false;
try {
}
if (!thrown)
- Fail ("#03");
+ Assert.Fail ("#03");
ms=new MemoryStream (256);
}
[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]
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 ()
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
}
}
-