Merge pull request #3528 from BrzVlad/fix-sgen-check-before-collections
[mono.git] / mcs / class / corlib / Test / System.IO / StreamReaderTest.cs
index 0525e8fb131f81dbe46dc21085eddac7c7bd7e8c..eb29cfa9e4b5f26aef1d9cc09feb0159f0396ba7 100644 (file)
@@ -6,24 +6,26 @@
 // Copyright (C) 2004 Novell (http://www.novell.com)
 // 
 
-using NUnit.Framework;
 using System;
 using System.IO;
 using System.Text;
+using System.Threading.Tasks;
+
+using NUnit.Framework;
 
 namespace MonoTests.System.IO
 {
-
 [TestFixture]
-public class StreamReaderTest : Assertion
+public class StreamReaderTest
 {
        static string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.IO.Tests");
        private string _codeFileName = TempFolder + Path.DirectorySeparatorChar + "AFile.txt";
+       private const string TestString = "Hello World!";
 
        [SetUp]
-       public void SetUp ()
+       public void SetUp ()
        {       
-               if (!Directory.Exists (TempFolder))                             
+               if (!Directory.Exists (TempFolder))
                        Directory.CreateDirectory (TempFolder);
                
                if (!File.Exists (_codeFileName))
@@ -43,11 +45,11 @@ public class StreamReaderTest : Assertion
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader((Stream)null);
+                               new StreamReader((Stream)null);
                        } catch (ArgumentNullException) {
                                errorThrown = true;
                        }
-                       Assert("null string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null string error not thrown");
                }
                {
                        bool errorThrown = false;
@@ -59,7 +61,7 @@ public class StreamReaderTest : Assertion
                                errorThrown = true;
                        }
                        f.Close();
-                       Assert("no read error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "no read error not thrown");
                }
                {
                        // this is probably incestuous, but, oh well.
@@ -67,7 +69,7 @@ public class StreamReaderTest : Assertion
                                                      FileMode.Open, 
                                                      FileAccess.Read);
                        StreamReader r = new StreamReader(f);
-                       AssertNotNull("no stream reader", r);
+                       Assert.IsNotNull (r, "no stream reader");
                        r.Close();
                        f.Close();
                }
@@ -78,51 +80,51 @@ public class StreamReaderTest : Assertion
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("");
+                               new StreamReader("");
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 1: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 1: " + e.ToString());
                        }
-                       Assert("empty string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "empty string error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader((string)null);
+                               new StreamReader((string)null);
                        } catch (ArgumentNullException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 2: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 2: " + e.ToString());
                        }
-                       Assert("null string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null string error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("nonexistentfile");
+                               new StreamReader("nonexistentfile");
                        } catch (FileNotFoundException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 3: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 3: " + e.ToString());
                        }
-                       Assert("fileNotFound error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "fileNotFound error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("nonexistentdir/file");
+                               new StreamReader("nonexistentdir/file");
                        } catch (DirectoryNotFoundException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 4: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 4: " + e.ToString());
                        }
-                       Assert("dirNotFound error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "dirNotFound error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("!$what? what? Huh? !$*#" + Path.InvalidPathChars[0]);
+                               new StreamReader("!$what? what? Huh? !$*#" + Path.InvalidPathChars[0]);
                        } catch (IOException) {
                                errorThrown = true;
                        } catch (ArgumentException) {
@@ -130,14 +132,14 @@ public class StreamReaderTest : Assertion
                                //   compiler says 'ArgExc'...
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 5: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 5: " + e.ToString());
                        }
-                       Assert("invalid filename error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "invalid filename error not thrown");
                }
                {
                        // this is probably incestuous, but, oh well.
                        StreamReader r = new StreamReader(_codeFileName);
-                       AssertNotNull("no stream reader", r);
+                       Assert.IsNotNull (r, "no stream reader");
                        r.Close();
                }
        }
@@ -147,13 +149,13 @@ public class StreamReaderTest : Assertion
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader((Stream)null, false);
+                               new StreamReader((Stream)null, false);
                        } catch (ArgumentNullException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 1: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 1: " + e.ToString());
                        }
-                       Assert("null stream error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null stream error not thrown");
                }
                {
                        bool errorThrown = false;
@@ -164,10 +166,10 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 2: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 2: " + e.ToString());
                        }
                        f.Close();
-                       Assert("no read error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "no read error not thrown");
                }
                {
                        // this is probably incestuous, but, oh well.
@@ -175,7 +177,7 @@ public class StreamReaderTest : Assertion
                                                      FileMode.Open, 
                                                      FileAccess.Read);
                        StreamReader r = new StreamReader(f, false);
-                       AssertNotNull("no stream reader", r);
+                       Assert.IsNotNull (r, "no stream reader");
                        r.Close();
                        f.Close();
                }
@@ -186,9 +188,9 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentNullException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 3: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 3: " + e.ToString());
                        }
-                       Assert("null string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null string error not thrown");
                }
                {
                        bool errorThrown = false;
@@ -199,10 +201,10 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 4: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 4: " + e.ToString());
                        }
                        f.Close();
-                       Assert("no read error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "no read error not thrown");
                }
                {
                        // this is probably incestuous, but, oh well.
@@ -210,7 +212,7 @@ public class StreamReaderTest : Assertion
                                                      FileMode.Open, 
                                                      FileAccess.Read);
                        StreamReader r = new StreamReader(f, true);
-                       AssertNotNull("no stream reader", r);
+                       Assert.IsNotNull (r, "no stream reader");
                        r.Close();
                        f.Close();
                }
@@ -221,51 +223,51 @@ public class StreamReaderTest : Assertion
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("", false);
+                               new StreamReader("", false);
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 1: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 1: " + e.ToString());
                        }
-                       Assert("empty string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "empty string error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader((string)null, false);
+                               new StreamReader((string)null, false);
                        } catch (ArgumentNullException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 2: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 2: " + e.ToString());
                        }
-                       Assert("null string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null string error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader(TempFolder + "/nonexistentfile", false);
+                               new StreamReader(TempFolder + "/nonexistentfile", false);
                        } catch (FileNotFoundException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 3: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 3: " + e.ToString());
                        }
-                       Assert("fileNotFound error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "fileNotFound error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader(TempFolder + "/nonexistentdir/file", false);
+                               new StreamReader(TempFolder + "/nonexistentdir/file", false);
                        } catch (DirectoryNotFoundException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 4: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 4: " + e.ToString());
                        }
-                       Assert("dirNotFound error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "dirNotFound error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("!$what? what? Huh? !$*#" + Path.InvalidPathChars[0], false);
+                               new StreamReader("!$what? what? Huh? !$*#" + Path.InvalidPathChars[0], false);
                        } catch (IOException) {
                                errorThrown = true;
                        } catch (ArgumentException) {
@@ -273,64 +275,64 @@ public class StreamReaderTest : Assertion
                                //   compiler says 'ArgExc'...
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 5: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 5: " + e.ToString());
                        }
-                       Assert("invalid filename error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "invalid filename error not thrown");
                }
                {
                        // this is probably incestuous, but, oh well.
                        StreamReader r = new StreamReader(_codeFileName, false);
-                       AssertNotNull("no stream reader", r);
+                       Assert.IsNotNull (r, "no stream reader");
                        r.Close();
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("", true);
+                               new StreamReader("", true);
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 6: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 6: " + e.ToString());
                        }
-                       Assert("empty string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "empty string error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader((string)null, true);
+                               new StreamReader((string)null, true);
                        } catch (ArgumentNullException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 7: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 7: " + e.ToString());
                        }
-                       Assert("null string error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null string error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader(TempFolder + "/nonexistentfile", true);
+                               new StreamReader(TempFolder + "/nonexistentfile", true);
                        } catch (FileNotFoundException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 8: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 8: " + e.ToString());
                        }
-                       Assert("fileNotFound error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "fileNotFound error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader(TempFolder + "/nonexistentdir/file", true);
+                               new StreamReader(TempFolder + "/nonexistentdir/file", true);
                        } catch (DirectoryNotFoundException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 9: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 9: " + e.ToString());
                        }
-                       Assert("dirNotFound error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "dirNotFound error not thrown");
                }
                {
                        bool errorThrown = false;
                        try {
-                               StreamReader r = new StreamReader("!$what? what? Huh? !$*#" + Path.InvalidPathChars[0], true);
+                               new StreamReader("!$what? what? Huh? !$*#" + Path.InvalidPathChars[0], true);
                        } catch (IOException) {
                                errorThrown = true;
                        } catch (ArgumentException) {
@@ -338,14 +340,14 @@ public class StreamReaderTest : Assertion
                                //   compiler says 'ArgExc'...
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 10: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 10: " + e.ToString());
                        }
-                       Assert("invalid filename error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "invalid filename error not thrown");
                }
                {
                        // this is probably incestuous, but, oh well.
                        StreamReader r = new StreamReader(_codeFileName, true);
-                       AssertNotNull("no stream reader", r);
+                       Assert.IsNotNull (r, "no stream reader");
                        r.Close();
                }
        }
@@ -354,31 +356,20 @@ public class StreamReaderTest : Assertion
        
        [Test]
        public void TestBaseStream() {
-               string progress = "beginning";
-               try {
-                       Byte[] b = {};
-                       MemoryStream m = new MemoryStream(b);
-                       StreamReader r = new StreamReader(m);
-                       AssertEquals("wrong base stream ", m, r.BaseStream);
-                       progress = "Closing StreamReader";
-                       r.Close();
-                       progress = "Closing MemoryStream";
-                       m.Close();
-               } catch (Exception e) {
-                       Fail ("At '" + progress + "' an unexpected exception was thrown: " + e.ToString());
-               }
+               Byte[] b = {};
+               MemoryStream m = new MemoryStream(b);
+               StreamReader r = new StreamReader(m);
+               Assert.AreSame (m, r.BaseStream, "wrong base stream ");
+               r.Close();
+               m.Close();
        }
 
-       public void TestCurrentEncoding() {
-               try {
-                       Byte[] b = {};
-                       MemoryStream m = new MemoryStream(b);
-                       StreamReader r = new StreamReader(m);
-                       AssertEquals("wrong encoding", 
-                                    Encoding.UTF8.GetType (), r.CurrentEncoding.GetType ());
-               } catch (Exception e) {
-                       Fail ("Unexpected exception thrown: " + e.ToString());
-               }
+       public void TestCurrentEncoding()
+       {
+               Byte[] b = {};
+               MemoryStream m = new MemoryStream(b);
+               StreamReader r = new StreamReader(m);
+               Assert.AreSame (Encoding.UTF8, r.CurrentEncoding, "wrong encoding");
        }
 
        // TODO - Close - annoying spec - won't commit to any exceptions. How to test?
@@ -387,30 +378,28 @@ public class StreamReaderTest : Assertion
        [Test]
        public void TestPeek() {
                // FIXME - how to get an IO Exception?
-               {
-                       bool errorThrown = false;
-                       try {
-                               Byte[] b = {};
-                               MemoryStream m = new MemoryStream(b);
-                               StreamReader r = new StreamReader(m);
-                               m.Close();
-                               int nothing = r.Peek();
-                       } catch (ObjectDisposedException) {
-                               errorThrown = true;
-                       }
-                       Assert("nothing-to-peek-at error not thrown", errorThrown);
+               Byte [] b;
+               MemoryStream m;
+               StreamReader r;
+
+               try {
+                       b = new byte [0];
+                       m = new MemoryStream (b);
+                       r = new StreamReader(m);
+                       m.Close();
+                       int nothing = r.Peek();
+                       Assert.Fail ("#1");
+               } catch (ObjectDisposedException) {
                }
-               {
-                       Byte[] b = {1, 2, 3, 4, 5, 6};
-                       MemoryStream m = new MemoryStream(b);
-                       
-                       StreamReader r = new StreamReader(m);
-                       for (int i = 1; i <= 6; i++) {
-                               AssertEquals("peek incorrect", i, r.Peek());
-                               r.Read();
-                       }
-                       AssertEquals("should be none left", -1, r.Peek());
+
+               b = new byte [] {1, 2, 3, 4, 5, 6};
+               m = new MemoryStream (b);
+               r = new StreamReader(m);
+               for (int i = 1; i <= 6; i++) {
+                       Assert.AreEqual (i, r.Peek(), "#2");
+                       r.Read();
                }
+               Assert.AreEqual (-1, r.Peek(), "#3");
        }
 
        [Test]
@@ -427,9 +416,9 @@ public class StreamReaderTest : Assertion
                        } catch (ObjectDisposedException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 1: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 1: " + e.ToString());
                        }
-                       Assert("nothing-to-read error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "nothing-to-read error not thrown");
                }
                {
                        Byte[] b = {1, 2, 3, 4, 5, 6};
@@ -437,9 +426,9 @@ public class StreamReaderTest : Assertion
                        
                        StreamReader r = new StreamReader(m);
                        for (int i = 1; i <= 6; i++) {
-                               AssertEquals("read incorrect", i, r.Read());
+                               Assert.AreEqual (i, r.Read (), "read incorrect");
                        }
-                       AssertEquals("Should be none left", -1, r.Read());
+                       Assert.AreEqual (-1, r.Read (), "Should be none left");
                }
 
                {
@@ -453,9 +442,9 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 2: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 2: " + e.ToString());
                        }
-                       Assert("null buffer error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "null buffer error not thrown");
                }
                {
                        bool errorThrown = false;
@@ -467,9 +456,9 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 3: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 3: " + e.ToString());
                        }
-                       Assert("too-long range error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "too-long range error not thrown");
                }
                {
                        bool errorThrown = false;
@@ -481,9 +470,9 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentOutOfRangeException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 4: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 4: " + e.ToString());
                        }
-                       Assert("out of range error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "out of range error not thrown");
                }
                {
                        bool errorThrown = false;
@@ -495,9 +484,9 @@ public class StreamReaderTest : Assertion
                        } catch (ArgumentOutOfRangeException) {
                                errorThrown = true;
                        } catch (Exception e) {
-                               Fail ("Incorrect exception thrown at 5: " + e.ToString());
+                               Assert.Fail ("Incorrect exception thrown at 5: " + e.ToString());
                        }
-                       Assert("out of range error not thrown", errorThrown);
+                       Assert.IsTrue (errorThrown, "out of range error not thrown");
                }
                {
                        int ii = 1;
@@ -523,13 +512,11 @@ public class StreamReaderTest : Assertion
                                r.Read(buffer, 0, 1);
                                ii++;
                                for (int i = 0; i < target.Length; i++) {
-                                       AssertEquals("read no work", 
-                                                    target[i], buffer[i]);
+                                       Assert.AreEqual (target[i], buffer[i], "read no work");
                                i++;
                                }
-                                                   
                        } catch (Exception e) {
-                               Fail ("Caught when ii=" + ii + ". e:" + e.ToString());
+                               Assert.Fail ("Caught when ii=" + ii + ". e:" + e.ToString());
                        }
                }
        }
@@ -548,11 +535,11 @@ public class StreamReaderTest : Assertion
                b[7] = (byte)'\n';
                MemoryStream m = new MemoryStream(b);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", "a", r.ReadLine());
-               AssertEquals("line doesn't match", "b", r.ReadLine());
-               AssertEquals("line doesn't match", "c", r.ReadLine());
-               AssertEquals("line doesn't match", "d", r.ReadLine());
-               AssertEquals("line doesn't match", null, r.ReadLine());
+               Assert.AreEqual ("a", r.ReadLine(), "#1");
+               Assert.AreEqual ("b", r.ReadLine (), "#2");
+               Assert.AreEqual ("c", r.ReadLine (), "#3");
+               Assert.AreEqual ("d", r.ReadLine(), "#4");
+               Assert.IsNull (r.ReadLine (), "#5");
        }
 
        [Test]
@@ -571,12 +558,12 @@ public class StreamReaderTest : Assertion
                b[9] = (byte)'\n';
                MemoryStream m = new MemoryStream(b);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", "a", r.ReadLine());
-               AssertEquals("line doesn't match", "b", r.ReadLine());
-               AssertEquals("line doesn't match", "c", r.ReadLine());
-               AssertEquals("line doesn't match", "d", r.ReadLine());
-               AssertEquals("line doesn't match", "", r.ReadLine());
-               AssertEquals("line doesn't match", null, r.ReadLine());
+               Assert.AreEqual ("a", r.ReadLine (), "#1");
+               Assert.AreEqual ("b", r.ReadLine (), "#2");
+               Assert.AreEqual ("c", r.ReadLine (), "#3");
+               Assert.AreEqual ("d", r.ReadLine (), "#4");
+               Assert.AreEqual (string.Empty, r.ReadLine (), "#5");
+               Assert.IsNull (r.ReadLine(), "#6");
        }
 
        [Test]
@@ -595,13 +582,13 @@ public class StreamReaderTest : Assertion
                b[9] = (byte)'\n';
                MemoryStream m = new MemoryStream(b);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", "", r.ReadLine());
-               AssertEquals("line doesn't match", "", r.ReadLine());
-               AssertEquals("line doesn't match", "", r.ReadLine());
-               AssertEquals("line doesn't match", "c", r.ReadLine());
-               AssertEquals("line doesn't match", "d", r.ReadLine());
-               AssertEquals("line doesn't match", "", r.ReadLine());
-               AssertEquals("line doesn't match", null, r.ReadLine());
+               Assert.AreEqual (string.Empty, r.ReadLine (), "#1");
+               Assert.AreEqual (string.Empty, r.ReadLine (), "#2");
+               Assert.AreEqual (string.Empty, r.ReadLine (), "#3");
+               Assert.AreEqual ("c", r.ReadLine (), "#4");
+               Assert.AreEqual ("d", r.ReadLine (), "#5");
+               Assert.AreEqual (string.Empty, r.ReadLine (), "#6");
+               Assert.IsNull (r.ReadLine (), "#7");
        }
 
        [Test]
@@ -614,9 +601,9 @@ public class StreamReaderTest : Assertion
                byte [] bytes = Encoding.Default.GetBytes (sb.ToString ());
                MemoryStream m = new MemoryStream(bytes);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", new string ('1', 32767), r.ReadLine());
-               AssertEquals("line doesn't match", "Hola", r.ReadLine());
-               AssertEquals("line doesn't match", null, r.ReadLine());
+               Assert.AreEqual (new string ('1', 32767), r.ReadLine(), "#1");
+               Assert.AreEqual ("Hola", r.ReadLine (), "#2");
+               Assert.IsNull (r.ReadLine (), "#3");
        }
 
        [Test]
@@ -630,11 +617,11 @@ public class StreamReaderTest : Assertion
                byte [] bytes = Encoding.Default.GetBytes (sb.ToString ());
                MemoryStream m = new MemoryStream(bytes);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", new string ('1', 32767), r.ReadLine());
-               AssertEquals("line doesn't match", "Hola", r.ReadLine());
-               AssertEquals("line doesn't match", new string ('1', 32767), r.ReadLine());
-               AssertEquals("line doesn't match", "Hola", r.ReadLine());
-               AssertEquals("line doesn't match", null, r.ReadLine());
+               Assert.AreEqual (new string ('1', 32767), r.ReadLine (), "#1");
+               Assert.AreEqual ("Hola", r.ReadLine (), "#2");
+               Assert.AreEqual (new string ('1', 32767), r.ReadLine (), "#3");
+               Assert.AreEqual ("Hola", r.ReadLine (), "#4");
+               Assert.IsNull (r.ReadLine (), "#5");
        }
 
        [Test]
@@ -647,9 +634,9 @@ public class StreamReaderTest : Assertion
                byte [] bytes = Encoding.Default.GetBytes (sb.ToString ());
                MemoryStream m = new MemoryStream(bytes);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", new string ('1', 32768), r.ReadLine());
-               AssertEquals("line doesn't match", "Hola", r.ReadLine());
-               AssertEquals("line doesn't match", null, r.ReadLine());
+               Assert.AreEqual (new string ('1', 32768), r.ReadLine (), "#1");
+               Assert.AreEqual ("Hola", r.ReadLine (), "#2");
+               Assert.IsNull (r.ReadLine (), "#3");
        }
 
        public void TestReadToEnd() {
@@ -665,8 +652,8 @@ public class StreamReaderTest : Assertion
                b[7] = (byte)'\n';
                MemoryStream m = new MemoryStream(b);
                StreamReader r = new StreamReader(m);
-               AssertEquals("line doesn't match", "a\nb\nc\nd\n", r.ReadToEnd());
-               AssertEquals("line doesn't match", "", r.ReadToEnd());
+               Assert.AreEqual ("a\nb\nc\nd\n", r.ReadToEnd (), "#1");
+               Assert.AreEqual (string.Empty, r.ReadToEnd (), "#2");
        }
 
        [Test]
@@ -676,28 +663,25 @@ public class StreamReaderTest : Assertion
                MemoryStream m = new MemoryStream (b);
                StreamReader r = new StreamReader (m);
                m.Close ();
-               bool thrown = false;
                try {
                        r.Peek ();
+                       Assert.Fail ();
                } catch (ObjectDisposedException) {
-                       thrown = true;
                }
-
-               AssertEquals ("#01", true, thrown);
        }
 
        [Test]
        [ExpectedException (typeof (ArgumentNullException))]
        public void Contructor_Stream_NullEncoding () 
        {
-               StreamReader r = new StreamReader (new MemoryStream (), null);
+               new StreamReader (new MemoryStream (), null);
        }
 
        [Test]
        [ExpectedException (typeof (ArgumentNullException))]
        public void Contructor_Path_NullEncoding () 
        {
-               StreamReader r = new StreamReader (_codeFileName, null);
+               new StreamReader (_codeFileName, null);
        }
 
        [Test]
@@ -731,7 +715,211 @@ public class StreamReaderTest : Assertion
        {
                MemoryStream ms = new MemoryStream (Encoding.ASCII.GetBytes ("Line1\rLine2\r\nLine3\nLine4"));
                StreamReader reader = new StreamReader (ms);
-               AssertEquals (24, reader.Read (new char[24], 0, 24));
-       }       
+               Assert.AreEqual (24, reader.Read (new char[24], 0, 24));
+       }
+
+       [Test]
+       public void EncodingDetection()
+       {
+               if (!CheckEncodingDetected(Encoding.UTF8))
+                       Assert.Fail ("Failed to detect UTF8 encoded string");
+               if (!CheckEncodingDetected(Encoding.Unicode))
+                       Assert.Fail ("Failed to detect UTF16LE encoded string");
+               if (!CheckEncodingDetected(Encoding.BigEndianUnicode))
+                       Assert.Fail ("Failed to detect UTF16BE encoded string");
+               if (!CheckEncodingDetected(Encoding.UTF32))
+                       Assert.Fail ("Failed to detect UTF32LE encoded string");
+               if (!CheckEncodingDetected(new UTF32Encoding(true, true)))
+                       Assert.Fail ("Failed to detect UTF32BE encoded string");
+       }
+
+       // This is a special case, where the StreamReader has less than 4 bytes at 
+       // encoding detection time, so it tries to check for Unicode encoding, instead of
+       // waiting for more bytes to test against the UTF32 BOM.
+       [Test]
+       public void EncodingDetectionUnicode ()
+       {
+               byte [] bytes = new byte [3];
+               bytes [0] = 0xff;
+               bytes [1] = 0xfe;
+               bytes [2] = 0;
+               MemoryStream inStream = new MemoryStream (bytes);
+               StreamReader reader = new StreamReader (inStream, Encoding.UTF8, true);
+
+               // It should start with the encoding we used in the .ctor
+               Assert.AreEqual (Encoding.UTF8, reader.CurrentEncoding, "#A1");
+
+               reader.Read ();
+               //reader.Read ();
+               Assert.AreEqual (Encoding.Unicode, reader.CurrentEncoding, "#B1");
+
+               reader.Close ();
+       }
+
+       private bool CheckEncodingDetected(Encoding encoding)
+       {
+               MemoryStream outStream = new MemoryStream();
+               using (StreamWriter outWriter = new StreamWriter(outStream, encoding))
+               {
+                       outWriter.Write(TestString);
+               }
+               byte[] testBytes = outStream.ToArray();
+
+               StreamReader inReader = new StreamReader(new MemoryStream(testBytes, false));
+               string decodedString = inReader.ReadToEnd();
+
+               return decodedString == TestString;
+       }
+    
+    [Test] // Bug445326
+       [Category ("MobileNotWorking")]
+       public void EndOfBufferIsCR ()
+       {
+               using (StreamReader reader = new StreamReader ("Test/resources/Fergie.GED")) {
+                       string line;
+                       int count = 0;
+                       while ((line = reader.ReadLine ()) != null) {
+                               Assert.IsFalse (line.Length > 1000, "#1 " + count);
+                               count++;
+                       }
+                       Assert.AreEqual (16107, count, "#2");
+               }
+       }
+
+       [Test]
+       public void bug75526 ()
+       {
+               StreamReader sr = new StreamReader (new Bug75526Stream ());
+               int len = sr.Read (new char [10], 0, 10);
+               Assert.AreEqual (2, len);
+       }
+
+       class Bug75526Stream : MemoryStream
+       {
+               public override int Read (byte [] buffer, int offset, int count)
+               {
+                       buffer [offset + 0] = (byte) 'a';
+                       buffer [offset + 1] = (byte) 'b';
+                       return 2;
+               }
+       }
+
+       [Test]
+       public void PeekWhileBlocking ()
+       {
+               StreamReader reader = new StreamReader (new MyStream ());
+               int c = reader.Read ();
+               Assert.IsFalse (reader.EndOfStream);
+               string str = reader.ReadToEnd ();
+               Assert.AreEqual ("bc", str);
+       }
+
+       [Test]
+       public void EncodingChangedAuto ()
+       {
+               int testlines = 2048; // all data should larger than stream reader default buffer size
+               string testdata = "test";
+               MemoryStream ms = new MemoryStream();
+               // write utf8 encoding data.
+               using (StreamWriter sw = new StreamWriter (ms, Encoding.UTF8)) {
+                       for (int i = 0; i < testlines; i++)
+                               sw.WriteLine (testdata);
+               }
+
+               MemoryStream readms = new MemoryStream (ms.GetBuffer());
+               using (StreamReader sr = new StreamReader(readms, Encoding.Unicode, true)) {
+                       for (int i = 0; i < testlines; i++) {
+                               string line = sr.ReadLine ();
+                               if (line != testdata)
+                                       Assert.Fail ("Wrong line content");
+                       }
+               }
+       }
+
+       [Test]
+       public void NullStream ()
+       {
+               var buffer = new char[2];
+               Assert.AreEqual (0, StreamReader.Null.ReadBlock (buffer, 0, buffer.Length));
+       }
+
+       [Test]
+       public void ReadLineAsync ()
+       {
+               MemoryStream ms = new MemoryStream ();
+               StreamWriter sw = new StreamWriter (ms, Encoding.UTF8);
+               sw.WriteLine ("a");
+               sw.WriteLine ("b");
+               sw.Flush ();
+               ms.Seek (0, SeekOrigin.Begin);
+
+               Func<Task<string>> res = async () => {
+                       using (StreamReader reader = new StreamReader (ms)) {
+                               return await reader.ReadLineAsync () + await reader.ReadToEndAsync () + await reader.ReadToEndAsync ();
+                       }
+               };
+
+               var result = res ();
+               Assert.IsTrue (result.Wait (3000), "#1");
+               Assert.AreEqual ("ab" + Environment.NewLine, result.Result);
+       }
+}
+
+class MyStream : Stream {
+       int n;
+
+       public override int Read (byte [] buffer, int offset, int size)
+       {
+               if (n == 0) {
+                       buffer [offset] = (byte) 'a';
+                       n++;
+                       return 1;
+               } else if (n == 1) {
+                       buffer [offset] = (byte) 'b';
+                       buffer [offset + 1] = (byte) 'c';
+                       n++;
+                       return 2;
+               }
+               return 0;
+       }
+
+       public override bool CanRead {
+               get { return true; }
+       }
+
+       public override bool CanSeek {
+               get { return false; }
+       }
+
+       public override bool CanWrite {
+               get { return false; }
+       }
+
+       public override long Length {
+               get { return 0; }
+       }
+
+       public override long Position {
+               get { return 0; }
+                       set { }
+       }
+
+       public override void Flush ()
+       {
+       }
+
+       public override long Seek (long offset, SeekOrigin origin)
+       {
+               return 0;
+       }
+
+       public override void SetLength (long value)
+       {
+       }
+
+       public override void Write (byte[] buffer, int offset, int count)
+       {
+       }
 }
+
 }