remove TARGET_JVM
[mono.git] / mcs / class / corlib / Test / System.IO / BinaryWriterTest.cs
index 373a489ed5312674ece1a7c7cfe92fec60165b38..fc63e4c750d5fb17b576a9d9c45a1df57585e8cd 100644 (file)
-//\r
-// System.IO.StringWriter\r
-//\r
-// Authors: \r
-//     Ville Palo (vi64pa@kolumbus.fi)\r
-//\r
-// (C) 2003 Ville Palo\r
-//\r
-\r
-using NUnit.Framework;\r
-using System.IO;\r
-using System.Text;\r
-using System;\r
-\r
-namespace MonoTests.System.IO {\r
-\r
-[TestFixture]\r
-public class BinaryWriterTest : Assertion {\r
-       \r
-       \r
-       string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");\r
-       \r
-       [SetUp]\r
-        protected void SetUp() {\r
-               if (Directory.Exists (TempFolder))\r
-                       Directory.Delete (TempFolder, true);\r
-               Directory.CreateDirectory (TempFolder);\r
-       }\r
-\r
-       [TearDown]\r
-       public void TearDown()\r
-       {\r
-               if (Directory.Exists (TempFolder))\r
-                       Directory.Delete (TempFolder, true);\r
-       }\r
-\r
-       [Test]\r
-       public void Ctor ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               AssertEquals ("test#01", true, writer.BaseStream.CanRead);\r
-               AssertEquals ("test#02", true, writer.BaseStream.CanSeek);\r
-               AssertEquals ("test#03", true, writer.BaseStream.CanWrite);\r
-               \r
-               writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               AssertEquals ("test#04", true, writer.BaseStream.CanRead);\r
-               AssertEquals ("test#05", true, writer.BaseStream.CanSeek);\r
-               AssertEquals ("test#06", true, writer.BaseStream.CanWrite);                     \r
-               \r
-       }\r
-\r
-       /// <summary>\r
-       /// Throws an exception if stream is null\r
-       /// </summary>\r
-       [Test]\r
-       [ExpectedException(typeof(ArgumentNullException))]\r
-       public void CtorNullExceptionStream () \r
-       {\r
-               BinaryWriter reader = new BinaryWriter (null);\r
-       }\r
-\r
-       /// <summary>\r
-       /// Throws an exception if encoding is null\r
-       /// </summary>\r
-       [Test]\r
-       [ExpectedException(typeof(ArgumentNullException))]\r
-       public void CtorNullExceptionStreamEncoding () \r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter reader = new BinaryWriter (stream, null);\r
-       }\r
-       \r
-       /// <summary>\r
-       /// Throws an exception if stream is closed\r
-       /// </summary>\r
-       [Test]\r
-       [ExpectedException(typeof(ArgumentException))]\r
-       public void CtorExceptionStreamClosed () \r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               stream.Close ();                \r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-       }\r
-       \r
-       /// <summary>\r
-       /// Throws an exception if stream does not support writing\r
-       /// </summary>\r
-       [Test]\r
-       [ExpectedException(typeof(ArgumentException))]\r
-       public void CtorArgumentExceptionStreamCannotWrite ()\r
-       {\r
-               string path = TempFolder + "/BinaryWriterTest.1";\r
-               DeleteFile (path);\r
-               FileStream stream = null;\r
-               BinaryWriter reader = null;\r
-                       \r
-               try {\r
-                       stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Read);\r
-                       reader = new BinaryWriter (stream);\r
-               } finally {\r
-                       if (reader != null)\r
-                               reader.Close ();\r
-                       if (stream != null)\r
-                               stream.Close ();\r
-                       DeleteFile (path);\r
-               }\r
-       }\r
-\r
-       [Test]\r
-       public void Encoding ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               writer.Write ("t*st");\r
-               \r
-               byte [] bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 4, bytes [0]);\r
-               AssertEquals ("test#02", 116, bytes [1]);\r
-               AssertEquals ("test#03", 42, bytes [2]);\r
-               AssertEquals ("test#04", 115, bytes [3]);\r
-               AssertEquals ("test#05", 116, bytes [4]);\r
-               AssertEquals ("test#06", 0, bytes [5]);\r
-               \r
-               stream = new MemoryStream ();\r
-               writer = new BinaryWriter (stream, new UnicodeEncoding ());\r
-               writer.Write ("t*st");\r
-               \r
-               bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#07", 8, bytes [0]);\r
-               AssertEquals ("test#08", 116, bytes [1]);\r
-               AssertEquals ("test#09", 0, bytes [2]);\r
-               AssertEquals ("test#10", 42, bytes [3]);\r
-               AssertEquals ("test#11", 0, bytes [4]);\r
-               AssertEquals ("test#12", 115, bytes [5]);\r
-               AssertEquals ("test#13", 0, bytes [6]);\r
-               AssertEquals ("test#14", 116, bytes [7]);\r
-               AssertEquals ("test#15", 0, bytes [8]);\r
-\r
-               stream = new MemoryStream ();\r
-               writer = new BinaryWriter (stream, new UTF7Encoding ());\r
-               writer.Write ("t*st");\r
-               \r
-               bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#16", 8, bytes [0]);\r
-               AssertEquals ("test#17", 116, bytes [1]);\r
-               AssertEquals ("test#18", 43, bytes [2]);\r
-               AssertEquals ("test#19", 65, bytes [3]);\r
-               AssertEquals ("test#21", 67, bytes [4]);\r
-               AssertEquals ("test#22", 111, bytes [5]);\r
-               AssertEquals ("test#23", 45, bytes [6]);\r
-               AssertEquals ("test#24", 115, bytes [7]);\r
-               AssertEquals ("test#25", 116, bytes [8]);\r
-               AssertEquals ("test#26", 0, bytes [9]);\r
-               AssertEquals ("test#27", 0, bytes [10]);                \r
-\r
-               stream = new MemoryStream ();\r
-               writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               writer.Write ("t*st");\r
-               bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#28", 4, bytes [0]);\r
-               AssertEquals ("test#29", 116, bytes [1]);\r
-               AssertEquals ("test#30", 42, bytes [2]);\r
-               AssertEquals ("test#31", 115, bytes [3]);\r
-               AssertEquals ("test#32", 116, bytes [4]);\r
-               AssertEquals ("test#33", 0, bytes [5]);\r
-       }\r
-       \r
-       [Test]\r
-       [ExpectedException(typeof(ObjectDisposedException))]\r
-       public void Close1 ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               writer.Close ();\r
-               writer.Write ("Test");  \r
-       }\r
-\r
-       [Test]\r
-       public void Close2 ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               writer.Close ();\r
-               writer.Flush ();\r
-               stream.Flush ();\r
-       }\r
-\r
-       [Test]\r
-       [ExpectedException(typeof(ObjectDisposedException))]\r
-       public void Close3 ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               writer.Close ();\r
-               writer.Seek (1, SeekOrigin.Begin);\r
-       }\r
-       \r
-       [Test]\r
-       public void Close4 ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               writer.Close ();\r
-               AssertEquals ("test#01", false, writer.BaseStream.CanRead);\r
-               AssertEquals ("test#01", false, writer.BaseStream.CanWrite);\r
-               AssertEquals ("test#01", false, writer.BaseStream.CanSeek);             \r
-       }\r
-       \r
-       [Test]\r
-       public void Seek ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());\r
-               \r
-               writer.Write ("Test");\r
-               writer.Seek (2, SeekOrigin.Begin);\r
-               writer.Write ("-");\r
-               writer.Seek (400, SeekOrigin.Begin);\r
-               writer.Write ("-");             \r
-               writer.Seek (-394, SeekOrigin.End);\r
-               writer.Write ("-");\r
-               writer.Seek (-2, SeekOrigin.Current);\r
-               writer.Write ("-");\r
-               \r
-               byte [] bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 512, bytes.Length);\r
-               AssertEquals ("test#02", 4, bytes [0]);\r
-               AssertEquals ("test#03", 84, bytes [1]);\r
-               AssertEquals ("test#04", 1, bytes [2]);\r
-               AssertEquals ("test#05", 45, bytes [3]);\r
-               AssertEquals ("test#06", 116, bytes [4]);\r
-               AssertEquals ("test#07", 0, bytes [5]);\r
-               AssertEquals ("test#08", 0, bytes [6]);\r
-               AssertEquals ("test#09", 0, bytes [7]);\r
-               AssertEquals ("test#10", 1, bytes [8]);\r
-               AssertEquals ("test#11", 45, bytes [9]);\r
-               AssertEquals ("test#12", 0, bytes [10]);\r
-               AssertEquals ("test#13", 0, bytes [11]);\r
-               AssertEquals ("test#14", 0, bytes [12]);\r
-               AssertEquals ("test#15", 1, bytes [400]);                               \r
-       }\r
-       \r
-       [Test]\r
-       [ExpectedException(typeof(IOException))]\r
-       public void SeekException ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               \r
-               writer.Write ("Test");\r
-               writer.Seek (-12, SeekOrigin.Begin);            \r
-       }\r
-       \r
-       [Test]\r
-       public void WriteCharArray ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               \r
-               writer.Write (new char [] {'m', 'o', 'n', 'o', ':', ':'});\r
-               writer.Write (new char [] {':', ':', 'O', 'N', 'O', 'M'});\r
-\r
-               byte [] bytes = stream.GetBuffer ();\r
-               \r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 109, bytes [0]);\r
-               AssertEquals ("test#03", 111, bytes [1]);\r
-               AssertEquals ("test#04", 110, bytes [2]);\r
-               AssertEquals ("test#05", 111, bytes [3]);\r
-               AssertEquals ("test#06", 58, bytes [4]);\r
-               AssertEquals ("test#07", 58, bytes [5]);\r
-               AssertEquals ("test#08", 58, bytes [6]);\r
-               AssertEquals ("test#09", 58, bytes [7]);\r
-               AssertEquals ("test#10", 79, bytes [8]);\r
-               AssertEquals ("test#11", 78, bytes [9]);\r
-               AssertEquals ("test#12", 79, bytes [10]);\r
-               AssertEquals ("test#13", 77, bytes [11]);\r
-               AssertEquals ("test#14", 0, bytes [12]);\r
-               AssertEquals ("test#15", 0, bytes [13]);                \r
-       }\r
-       \r
-       [Test]\r
-       public void WriteByteArray ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);                \r
-               \r
-               writer.Write (new byte [] {1, 2, 3, 4, 5, 6});\r
-               writer.Write (new byte [] {6, 5, 4, 3, 2, 1});\r
-\r
-               byte [] bytes = stream.GetBuffer ();            \r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 1, bytes [0]);\r
-               AssertEquals ("test#03", 2, bytes [1]);\r
-               AssertEquals ("test#04", 3, bytes [2]);\r
-               AssertEquals ("test#05", 4, bytes [3]);\r
-               AssertEquals ("test#06", 5, bytes [4]);\r
-               AssertEquals ("test#07", 6, bytes [5]);\r
-               AssertEquals ("test#08", 6, bytes [6]);\r
-               AssertEquals ("test#09", 5, bytes [7]);\r
-               AssertEquals ("test#10", 4, bytes [8]);\r
-               AssertEquals ("test#11", 3, bytes [9]);\r
-               AssertEquals ("test#12", 2, bytes [10]);\r
-               AssertEquals ("test#13", 1, bytes [11]);\r
-               AssertEquals ("test#14", 0, bytes [12]);\r
-               AssertEquals ("test#15", 0, bytes [13]);                \r
-               \r
-       }\r
-\r
-       [Test]\r
-       public void WriteInt ()\r
-       {\r
-               short s = 64;\r
-               int i = 64646464;\r
-               long l = 9999999999999;\r
-               \r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);                \r
-               writer.Write (s);\r
-               byte [] bytes;\r
-               bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 64, bytes [0]);\r
-               AssertEquals ("test#03", 0, bytes [1]);\r
-               \r
-               writer.Write (i);\r
-               bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#04", 256, bytes.Length);\r
-               AssertEquals ("test#05", 64, bytes [0]);\r
-               AssertEquals ("test#06", 0, bytes [1]);\r
-               AssertEquals ("test#07", 64, bytes [2]);\r
-               AssertEquals ("test#08", 109, bytes [3]);\r
-               AssertEquals ("test#09", 218, bytes [4]);\r
-               AssertEquals ("test#10", 3, bytes [5]);\r
-               AssertEquals ("test#11", 0, bytes [6]);\r
-\r
-               writer.Write (l);\r
-               bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#12", 256, bytes.Length);\r
-               AssertEquals ("test#13", 255, bytes [6]);\r
-               AssertEquals ("test#14", 159, bytes [7]);\r
-               AssertEquals ("test#15", 114, bytes [8]);\r
-               AssertEquals ("test#16", 78, bytes [9]);\r
-               AssertEquals ("test#17", 24, bytes [10]);\r
-               AssertEquals ("test#18", 9, bytes [11]);\r
-               AssertEquals ("test#19", 0, bytes [12]);\r
-       }\r
-       \r
-       [Test]\r
-       public void WriteDecimal ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-       \r
-               decimal d1 = 19932143214312.32M;\r
-               decimal d2 = -8995034512332157M;\r
-               \r
-               writer.Write (d1);\r
-               writer.Write (d2);\r
-               byte [] bytes = stream.GetBuffer ();\r
-               \r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 192, bytes [0]);\r
-               AssertEquals ("test#03", 18, bytes [1]);\r
-               AssertEquals ("test#04", 151, bytes [2]);\r
-               AssertEquals ("test#05", 95, bytes [3]);\r
-               AssertEquals ("test#06", 209, bytes [4]);\r
-               AssertEquals ("test#07", 20, bytes [5]);\r
-               AssertEquals ("test#08", 7, bytes [6]);\r
-               AssertEquals ("test#09", 0, bytes [7]);\r
-               AssertEquals ("test#10", 0, bytes [8]);\r
-               AssertEquals ("test#11", 0, bytes [9]);\r
-               AssertEquals ("test#12", 0, bytes [10]);\r
-               AssertEquals ("test#13", 0, bytes [11]);\r
-               AssertEquals ("test#14", 0, bytes [12]);\r
-               AssertEquals ("test#15", 0, bytes [13]);\r
-               AssertEquals ("test#16", 2, bytes [14]);\r
-               AssertEquals ("test#17", 0, bytes [15]);\r
-               AssertEquals ("test#18", 125, bytes [16]);\r
-               AssertEquals ("test#19", 149, bytes [17]);\r
-               AssertEquals ("test#20", 217, bytes [18]);\r
-               AssertEquals ("test#21", 172, bytes [19]);\r
-               AssertEquals ("test#22", 239, bytes [20]);\r
-               AssertEquals ("test#23", 244, bytes [21]);\r
-               AssertEquals ("test#24", 31, bytes [22]);\r
-               AssertEquals ("test#25", 0, bytes [23]);\r
-               AssertEquals ("test#26", 0, bytes [24]);\r
-               AssertEquals ("test#27", 0, bytes [25]);\r
-               AssertEquals ("test#28", 0, bytes [26]);                \r
-               AssertEquals ("test#29", 0, bytes [27]);\r
-               AssertEquals ("test#30", 0, bytes [28]);\r
-               AssertEquals ("test#31", 0, bytes [29]);\r
-               AssertEquals ("test#32", 0, bytes [30]);\r
-               AssertEquals ("test#33", 128, bytes [31]);\r
-               AssertEquals ("test#34", 0, bytes [32]);\r
-               AssertEquals ("test#35", 0, bytes [33]);\r
-               AssertEquals ("test#36", 0, bytes [34]);\r
-               AssertEquals ("test#37", 0, bytes [35]);\r
-               AssertEquals ("test#38", 0, bytes [36]);\r
-               AssertEquals ("test#39", 0, bytes [37]);\r
-               AssertEquals ("test#40", 0, bytes [38]);\r
-               AssertEquals ("test#41", 0, bytes [39]);\r
-               AssertEquals ("test#42", 0, bytes [40]);\r
-               AssertEquals ("test#43", 0, bytes [41]);\r
-               AssertEquals ("test#44", 0, bytes [42]);\r
-               AssertEquals ("test#45", 0, bytes [43]);\r
-               AssertEquals ("test#46", 0, bytes [44]);\r
-               AssertEquals ("test#47", 0, bytes [45]);\r
-               AssertEquals ("test#48", 0, bytes [46]);                \r
-       }\r
-       \r
-       [Test]\r
-       public void WriteFloat ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               float f1 = 1.543E+10F;\r
-               float f2 = -9.6534E-6f;\r
-               writer.Write (f1);\r
-               writer.Write (f2);\r
-               \r
-               byte [] bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 199, bytes [0]);\r
-               AssertEquals ("test#03", 236, bytes [1]);\r
-               AssertEquals ("test#04", 101, bytes [2]);\r
-               AssertEquals ("test#05", 80, bytes [3]);\r
-               AssertEquals ("test#06", 10, bytes [4]);\r
-               AssertEquals ("test#07", 245, bytes [5]);\r
-               AssertEquals ("test#08", 33, bytes [6]);\r
-               AssertEquals ("test#09", 183, bytes [7]);\r
-               AssertEquals ("test#10", 0, bytes [8]);\r
-               AssertEquals ("test#11", 0, bytes [9]);         \r
-       }\r
-\r
-       [Test]\r
-       public void WriteDouble ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               double d1 = 1.543E+100;\r
-               double d2 = -9.6534E-129;\r
-               writer.Write (d1);\r
-               writer.Write (d2);\r
-               \r
-               byte [] bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 49, bytes [0]);\r
-               AssertEquals ("test#03", 69, bytes [1]);\r
-               AssertEquals ("test#04", 15, bytes [2]);\r
-               AssertEquals ("test#05", 157, bytes [3]);\r
-               AssertEquals ("test#06", 211, bytes [4]);\r
-               AssertEquals ("test#07", 55, bytes [5]);\r
-               AssertEquals ("test#08", 188, bytes [6]);\r
-               AssertEquals ("test#09", 84, bytes [7]);\r
-               AssertEquals ("test#10", 76, bytes [8]);\r
-               AssertEquals ("test#11", 59, bytes [9]);\r
-               AssertEquals ("test#12", 59, bytes [10]);\r
-               AssertEquals ("test#13", 60, bytes [11]);\r
-               AssertEquals ("test#14", 4, bytes [12]);\r
-               AssertEquals ("test#15", 196, bytes [13]);\r
-               AssertEquals ("test#16", 90, bytes [14]);\r
-               AssertEquals ("test#17", 165, bytes [15]);\r
-               AssertEquals ("test#18", 0, bytes [16]);\r
-       }\r
-       \r
-       [Test]\r
-       public void WriteByteAndChar ()\r
-       {\r
-               byte b1 = 12;\r
-               byte b2 = 64;\r
-               char c1 = '-';\r
-               char c2 = 'M';\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               writer.Write (b1);\r
-               writer.Write (c1);\r
-               writer.Write (b2);\r
-               writer.Write (c2);\r
-               \r
-               byte [] bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 12, bytes [0]);\r
-               AssertEquals ("test#03", 45, bytes [1]);\r
-               AssertEquals ("test#04", 64, bytes [2]);\r
-               AssertEquals ("test#05", 77, bytes [3]);\r
-               AssertEquals ("test#06", 0, bytes [4]);\r
-       }\r
-       \r
-       [Test]\r
-       public void WriteString ()\r
-       {\r
-               MemoryStream stream = new MemoryStream ();\r
-               BinaryWriter writer = new BinaryWriter (stream);\r
-               string s1 = "abc";\r
-               string s2 = "DeF\n";\r
-               writer.Write (s1);\r
-               writer.Write (s2);\r
-\r
-               byte [] bytes = stream.GetBuffer ();\r
-               AssertEquals ("test#01", 256, bytes.Length);\r
-               AssertEquals ("test#02", 3, bytes [0]);\r
-               AssertEquals ("test#03", 97, bytes [1]);\r
-               AssertEquals ("test#04", 98, bytes [2]);\r
-               AssertEquals ("test#05", 99, bytes [3]);\r
-               AssertEquals ("test#06", 4, bytes [4]);\r
-               AssertEquals ("test#07", 68, bytes [5]);\r
-               AssertEquals ("test#08", 101, bytes [6]);\r
-               AssertEquals ("test#09", 70, bytes [7]);\r
-               AssertEquals ("test#10", 10, bytes [8]);\r
-               AssertEquals ("test#11", 0, bytes [9]);         \r
-       }\r
-\r
-       private void DeleteFile (string path)\r
-       {\r
-               if (File.Exists (path))\r
-                       File.Delete (path);\r
-       }\r
-}\r
-\r
-}\r
-\r
+//
+// System.IO.StringWriter
+//
+// Authors: 
+//     Ville Palo (vi64pa@kolumbus.fi)
+//
+// (C) 2003 Ville Palo
+//
+
+using NUnit.Framework;
+using System.IO;
+using System.Text;
+using System;
+
+namespace MonoTests.System.IO {
+
+[TestFixture]
+public class BinaryWriterTest : Assertion {
+       
+       
+       string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
+       
+       [SetUp]
+        protected void SetUp() {
+               if (Directory.Exists (TempFolder))
+                       Directory.Delete (TempFolder, true);
+               Directory.CreateDirectory (TempFolder);
+       }
+
+       [TearDown]
+       public void TearDown()
+       {
+               if (Directory.Exists (TempFolder))
+                       Directory.Delete (TempFolder, true);
+       }
+
+       [Test]
+       public void Ctor ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               AssertEquals ("test#01", true, writer.BaseStream.CanRead);
+               AssertEquals ("test#02", true, writer.BaseStream.CanSeek);
+               AssertEquals ("test#03", true, writer.BaseStream.CanWrite);
+               
+               writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               AssertEquals ("test#04", true, writer.BaseStream.CanRead);
+               AssertEquals ("test#05", true, writer.BaseStream.CanSeek);
+               AssertEquals ("test#06", true, writer.BaseStream.CanWrite);                     
+               
+       }
+
+       /// <summary>
+       /// Throws an exception if stream is null
+       /// </summary>
+       [Test]
+       [ExpectedException(typeof(ArgumentNullException))]
+       public void CtorNullExceptionStream () 
+       {
+               BinaryWriter reader = new BinaryWriter (null);
+       }
+
+       /// <summary>
+       /// Throws an exception if encoding is null
+       /// </summary>
+       [Test]
+       [ExpectedException(typeof(ArgumentNullException))]
+       public void CtorNullExceptionStreamEncoding () 
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter reader = new BinaryWriter (stream, null);
+       }
+       
+       /// <summary>
+       /// Throws an exception if stream is closed
+       /// </summary>
+       [Test]
+       [ExpectedException(typeof(ArgumentException))]
+       public void CtorExceptionStreamClosed () 
+       {
+               MemoryStream stream = new MemoryStream ();
+               stream.Close ();                
+               BinaryWriter writer = new BinaryWriter (stream);
+       }
+       
+       /// <summary>
+       /// Throws an exception if stream does not support writing
+       /// </summary>
+       [Test]
+       [ExpectedException(typeof(ArgumentException))]
+       public void CtorArgumentExceptionStreamCannotWrite ()
+       {
+               string path = TempFolder + "/BinaryWriterTest.1";
+               DeleteFile (path);
+               FileStream stream = null;
+               BinaryWriter reader = null;
+                       
+               try {
+                       stream = new FileStream (path, FileMode.OpenOrCreate, FileAccess.Read);
+                       reader = new BinaryWriter (stream);
+               } finally {
+                       if (reader != null)
+                               reader.Close ();
+                       if (stream != null)
+                               stream.Close ();
+                       DeleteFile (path);
+               }
+       }
+
+       [Test]
+       public void Encoding ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               writer.Write ("t*st");
+               
+               byte [] bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 4, bytes [0]);
+               AssertEquals ("test#02", 116, bytes [1]);
+               AssertEquals ("test#03", 42, bytes [2]);
+               AssertEquals ("test#04", 115, bytes [3]);
+               AssertEquals ("test#05", 116, bytes [4]);
+               AssertEquals ("test#06", 0, bytes [5]);
+               
+               stream = new MemoryStream ();
+               writer = new BinaryWriter (stream, new UnicodeEncoding ());
+               writer.Write ("t*st");
+               
+               bytes = stream.GetBuffer ();
+               AssertEquals ("test#07", 8, bytes [0]);
+               AssertEquals ("test#08", 116, bytes [1]);
+               AssertEquals ("test#09", 0, bytes [2]);
+               AssertEquals ("test#10", 42, bytes [3]);
+               AssertEquals ("test#11", 0, bytes [4]);
+               AssertEquals ("test#12", 115, bytes [5]);
+               AssertEquals ("test#13", 0, bytes [6]);
+               AssertEquals ("test#14", 116, bytes [7]);
+               AssertEquals ("test#15", 0, bytes [8]);
+
+               stream = new MemoryStream ();
+               writer = new BinaryWriter (stream, new UTF7Encoding ());
+               writer.Write ("t*st");
+               
+               bytes = stream.GetBuffer ();
+               AssertEquals ("test#16", 8, bytes [0]);
+               AssertEquals ("test#17", 116, bytes [1]);
+               AssertEquals ("test#18", 43, bytes [2]);
+               AssertEquals ("test#19", 65, bytes [3]);
+               AssertEquals ("test#21", 67, bytes [4]);
+               AssertEquals ("test#22", 111, bytes [5]);
+               AssertEquals ("test#23", 45, bytes [6]);
+               AssertEquals ("test#24", 115, bytes [7]);
+               AssertEquals ("test#25", 116, bytes [8]);
+               AssertEquals ("test#26", 0, bytes [9]);
+               AssertEquals ("test#27", 0, bytes [10]);                
+
+               stream = new MemoryStream ();
+               writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               writer.Write ("t*st");
+               bytes = stream.GetBuffer ();
+               AssertEquals ("test#28", 4, bytes [0]);
+               AssertEquals ("test#29", 116, bytes [1]);
+               AssertEquals ("test#30", 42, bytes [2]);
+               AssertEquals ("test#31", 115, bytes [3]);
+               AssertEquals ("test#32", 116, bytes [4]);
+               AssertEquals ("test#33", 0, bytes [5]);
+       }
+       
+       [Test]
+       [ExpectedException(typeof(ObjectDisposedException))]
+       public void Close1 ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               writer.Close ();
+               writer.Write ("Test");  
+       }
+
+       [Test]
+       public void Close2 ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               writer.Close ();
+               writer.Flush ();
+               stream.Flush ();
+       }
+
+       [Test]
+       [ExpectedException(typeof(ObjectDisposedException))]
+       public void Close3 ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               writer.Close ();
+               writer.Seek (1, SeekOrigin.Begin);
+       }
+       
+       [Test]
+       public void Close4 ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               writer.Close ();
+               AssertEquals ("test#01", false, writer.BaseStream.CanRead);
+               AssertEquals ("test#01", false, writer.BaseStream.CanWrite);
+               AssertEquals ("test#01", false, writer.BaseStream.CanSeek);             
+       }
+       
+       [Test]
+       public void Seek ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream, new ASCIIEncoding ());
+               
+               writer.Write ("Test");
+               writer.Seek (2, SeekOrigin.Begin);
+               writer.Write ("-");
+               writer.Seek (400, SeekOrigin.Begin);
+               writer.Write ("-");             
+               writer.Seek (-394, SeekOrigin.End);
+               writer.Write ("-");
+               writer.Seek (-2, SeekOrigin.Current);
+               writer.Write ("-");
+               
+               byte [] bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 512, bytes.Length);
+               AssertEquals ("test#02", 4, bytes [0]);
+               AssertEquals ("test#03", 84, bytes [1]);
+               AssertEquals ("test#04", 1, bytes [2]);
+               AssertEquals ("test#05", 45, bytes [3]);
+               AssertEquals ("test#06", 116, bytes [4]);
+               AssertEquals ("test#07", 0, bytes [5]);
+               AssertEquals ("test#08", 0, bytes [6]);
+               AssertEquals ("test#09", 0, bytes [7]);
+               AssertEquals ("test#10", 1, bytes [8]);
+               AssertEquals ("test#11", 45, bytes [9]);
+               AssertEquals ("test#12", 0, bytes [10]);
+               AssertEquals ("test#13", 0, bytes [11]);
+               AssertEquals ("test#14", 0, bytes [12]);
+               AssertEquals ("test#15", 1, bytes [400]);                               
+       }
+       
+       [Test]
+       [ExpectedException(typeof(IOException))]
+       public void SeekException ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               
+               writer.Write ("Test");
+               writer.Seek (-12, SeekOrigin.Begin);            
+       }
+       
+       [Test]
+       public void WriteCharArray ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               
+               writer.Write (new char [] {'m', 'o', 'n', 'o', ':', ':'});
+               writer.Write (new char [] {':', ':', 'O', 'N', 'O', 'M'});
+
+               byte [] bytes = stream.GetBuffer ();
+               
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 109, bytes [0]);
+               AssertEquals ("test#03", 111, bytes [1]);
+               AssertEquals ("test#04", 110, bytes [2]);
+               AssertEquals ("test#05", 111, bytes [3]);
+               AssertEquals ("test#06", 58, bytes [4]);
+               AssertEquals ("test#07", 58, bytes [5]);
+               AssertEquals ("test#08", 58, bytes [6]);
+               AssertEquals ("test#09", 58, bytes [7]);
+               AssertEquals ("test#10", 79, bytes [8]);
+               AssertEquals ("test#11", 78, bytes [9]);
+               AssertEquals ("test#12", 79, bytes [10]);
+               AssertEquals ("test#13", 77, bytes [11]);
+               AssertEquals ("test#14", 0, bytes [12]);
+               AssertEquals ("test#15", 0, bytes [13]);                
+       }
+       
+       [Test]
+       public void WriteByteArray ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);                
+               
+               writer.Write (new byte [] {1, 2, 3, 4, 5, 6});
+               writer.Write (new byte [] {6, 5, 4, 3, 2, 1});
+
+               byte [] bytes = stream.GetBuffer ();            
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 1, bytes [0]);
+               AssertEquals ("test#03", 2, bytes [1]);
+               AssertEquals ("test#04", 3, bytes [2]);
+               AssertEquals ("test#05", 4, bytes [3]);
+               AssertEquals ("test#06", 5, bytes [4]);
+               AssertEquals ("test#07", 6, bytes [5]);
+               AssertEquals ("test#08", 6, bytes [6]);
+               AssertEquals ("test#09", 5, bytes [7]);
+               AssertEquals ("test#10", 4, bytes [8]);
+               AssertEquals ("test#11", 3, bytes [9]);
+               AssertEquals ("test#12", 2, bytes [10]);
+               AssertEquals ("test#13", 1, bytes [11]);
+               AssertEquals ("test#14", 0, bytes [12]);
+               AssertEquals ("test#15", 0, bytes [13]);                
+               
+       }
+
+       [Test]
+       public void WriteInt ()
+       {
+               short s = 64;
+               int i = 64646464;
+               long l = 9999999999999;
+               
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);                
+               writer.Write (s);
+               byte [] bytes;
+               bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 64, bytes [0]);
+               AssertEquals ("test#03", 0, bytes [1]);
+               
+               writer.Write (i);
+               bytes = stream.GetBuffer ();
+               AssertEquals ("test#04", 256, bytes.Length);
+               AssertEquals ("test#05", 64, bytes [0]);
+               AssertEquals ("test#06", 0, bytes [1]);
+               AssertEquals ("test#07", 64, bytes [2]);
+               AssertEquals ("test#08", 109, bytes [3]);
+               AssertEquals ("test#09", 218, bytes [4]);
+               AssertEquals ("test#10", 3, bytes [5]);
+               AssertEquals ("test#11", 0, bytes [6]);
+
+               writer.Write (l);
+               bytes = stream.GetBuffer ();
+               AssertEquals ("test#12", 256, bytes.Length);
+               AssertEquals ("test#13", 255, bytes [6]);
+               AssertEquals ("test#14", 159, bytes [7]);
+               AssertEquals ("test#15", 114, bytes [8]);
+               AssertEquals ("test#16", 78, bytes [9]);
+               AssertEquals ("test#17", 24, bytes [10]);
+               AssertEquals ("test#18", 9, bytes [11]);
+               AssertEquals ("test#19", 0, bytes [12]);
+       }
+       
+       [Test]
+       public void WriteDecimal ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+       
+               decimal d1 = 19932143214312.32M;
+               decimal d2 = -8995034512332157M;
+               
+               writer.Write (d1);
+               writer.Write (d2);
+               byte [] bytes = stream.GetBuffer ();
+               
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 192, bytes [0]);
+               AssertEquals ("test#03", 18, bytes [1]);
+               AssertEquals ("test#04", 151, bytes [2]);
+               AssertEquals ("test#05", 95, bytes [3]);
+               AssertEquals ("test#06", 209, bytes [4]);
+               AssertEquals ("test#07", 20, bytes [5]);
+               AssertEquals ("test#08", 7, bytes [6]);
+               AssertEquals ("test#09", 0, bytes [7]);
+               AssertEquals ("test#10", 0, bytes [8]);
+               AssertEquals ("test#11", 0, bytes [9]);
+               AssertEquals ("test#12", 0, bytes [10]);
+               AssertEquals ("test#13", 0, bytes [11]);
+               AssertEquals ("test#14", 0, bytes [12]);
+               AssertEquals ("test#15", 0, bytes [13]);
+               AssertEquals ("test#16", 2, bytes [14]);
+               AssertEquals ("test#17", 0, bytes [15]);
+               AssertEquals ("test#18", 125, bytes [16]);
+               AssertEquals ("test#19", 149, bytes [17]);
+               AssertEquals ("test#20", 217, bytes [18]);
+               AssertEquals ("test#21", 172, bytes [19]);
+               AssertEquals ("test#22", 239, bytes [20]);
+               AssertEquals ("test#23", 244, bytes [21]);
+               AssertEquals ("test#24", 31, bytes [22]);
+               AssertEquals ("test#25", 0, bytes [23]);
+               AssertEquals ("test#26", 0, bytes [24]);
+               AssertEquals ("test#27", 0, bytes [25]);
+               AssertEquals ("test#28", 0, bytes [26]);                
+               AssertEquals ("test#29", 0, bytes [27]);
+               AssertEquals ("test#30", 0, bytes [28]);
+               AssertEquals ("test#31", 0, bytes [29]);
+               AssertEquals ("test#32", 0, bytes [30]);
+               AssertEquals ("test#33", 128, bytes [31]);
+               AssertEquals ("test#34", 0, bytes [32]);
+               AssertEquals ("test#35", 0, bytes [33]);
+               AssertEquals ("test#36", 0, bytes [34]);
+               AssertEquals ("test#37", 0, bytes [35]);
+               AssertEquals ("test#38", 0, bytes [36]);
+               AssertEquals ("test#39", 0, bytes [37]);
+               AssertEquals ("test#40", 0, bytes [38]);
+               AssertEquals ("test#41", 0, bytes [39]);
+               AssertEquals ("test#42", 0, bytes [40]);
+               AssertEquals ("test#43", 0, bytes [41]);
+               AssertEquals ("test#44", 0, bytes [42]);
+               AssertEquals ("test#45", 0, bytes [43]);
+               AssertEquals ("test#46", 0, bytes [44]);
+               AssertEquals ("test#47", 0, bytes [45]);
+               AssertEquals ("test#48", 0, bytes [46]);                
+       }
+       
+       [Test]
+#if TARGET_JVM
+    [Category("NotWorking")]
+#endif
+       public void WriteFloat ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               float f1 = 1.543E+10F;
+               float f2 = -9.6534E-6f;
+               writer.Write (f1);
+               writer.Write (f2);
+               
+               byte [] bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 199, bytes [0]);
+               AssertEquals ("test#03", 236, bytes [1]);
+               AssertEquals ("test#04", 101, bytes [2]);
+               AssertEquals ("test#05", 80, bytes [3]);
+               AssertEquals ("test#06", 10, bytes [4]);
+               AssertEquals ("test#07", 245, bytes [5]);
+               AssertEquals ("test#08", 33, bytes [6]);
+               AssertEquals ("test#09", 183, bytes [7]);
+               AssertEquals ("test#10", 0, bytes [8]);
+               AssertEquals ("test#11", 0, bytes [9]);         
+       }
+
+       [Test]
+       public void WriteDouble ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               double d1 = 1.543E+100;
+               double d2 = -9.6534E-129;
+               writer.Write (d1);
+               writer.Write (d2);
+               
+               byte [] bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 49, bytes [0]);
+               AssertEquals ("test#03", 69, bytes [1]);
+               AssertEquals ("test#04", 15, bytes [2]);
+               AssertEquals ("test#05", 157, bytes [3]);
+               AssertEquals ("test#06", 211, bytes [4]);
+               AssertEquals ("test#07", 55, bytes [5]);
+               AssertEquals ("test#08", 188, bytes [6]);
+               AssertEquals ("test#09", 84, bytes [7]);
+               AssertEquals ("test#10", 76, bytes [8]);
+               AssertEquals ("test#11", 59, bytes [9]);
+               AssertEquals ("test#12", 59, bytes [10]);
+               AssertEquals ("test#13", 60, bytes [11]);
+               AssertEquals ("test#14", 4, bytes [12]);
+               AssertEquals ("test#15", 196, bytes [13]);
+               AssertEquals ("test#16", 90, bytes [14]);
+               AssertEquals ("test#17", 165, bytes [15]);
+               AssertEquals ("test#18", 0, bytes [16]);
+       }
+       
+       [Test]
+       public void WriteByteAndChar ()
+       {
+               byte b1 = 12;
+               byte b2 = 64;
+               char c1 = '-';
+               char c2 = 'M';
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               writer.Write (b1);
+               writer.Write (c1);
+               writer.Write (b2);
+               writer.Write (c2);
+               
+               byte [] bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 12, bytes [0]);
+               AssertEquals ("test#03", 45, bytes [1]);
+               AssertEquals ("test#04", 64, bytes [2]);
+               AssertEquals ("test#05", 77, bytes [3]);
+               AssertEquals ("test#06", 0, bytes [4]);
+       }
+       
+       [Test]
+       public void WriteString ()
+       {
+               MemoryStream stream = new MemoryStream ();
+               BinaryWriter writer = new BinaryWriter (stream);
+               string s1 = "abc";
+               string s2 = "DeF\n";
+               writer.Write (s1);
+               writer.Write (s2);
+
+               byte [] bytes = stream.GetBuffer ();
+               AssertEquals ("test#01", 256, bytes.Length);
+               AssertEquals ("test#02", 3, bytes [0]);
+               AssertEquals ("test#03", 97, bytes [1]);
+               AssertEquals ("test#04", 98, bytes [2]);
+               AssertEquals ("test#05", 99, bytes [3]);
+               AssertEquals ("test#06", 4, bytes [4]);
+               AssertEquals ("test#07", 68, bytes [5]);
+               AssertEquals ("test#08", 101, bytes [6]);
+               AssertEquals ("test#09", 70, bytes [7]);
+               AssertEquals ("test#10", 10, bytes [8]);
+               AssertEquals ("test#11", 0, bytes [9]);         
+       }
+
+       private void DeleteFile (string path)
+       {
+               if (File.Exists (path))
+                       File.Delete (path);
+       }
+}
+
+}
+