Adding System.IO.StreamReaderTest. Only non-inherited methods are tested.
authorDavid Brandt <dbrandt@mono-cvs.ximian.com>
Fri, 15 Feb 2002 16:06:22 +0000 (16:06 -0000)
committerDavid Brandt <dbrandt@mono-cvs.ximian.com>
Fri, 15 Feb 2002 16:06:22 +0000 (16:06 -0000)
svn path=/trunk/mcs/; revision=2429

mcs/class/corlib/Test/System.IO/StreamReaderTest.cs [new file with mode: 0644]

diff --git a/mcs/class/corlib/Test/System.IO/StreamReaderTest.cs b/mcs/class/corlib/Test/System.IO/StreamReaderTest.cs
new file mode 100644 (file)
index 0000000..40ef3ba
--- /dev/null
@@ -0,0 +1,488 @@
+// StreamReaderTest.cs - NUnit Test Cases for the SystemIO.StreamReader class\r
+//\r
+// David Brandt (bucky@keystreams.com)\r
+//\r
+// (C) Ximian, Inc.  http://www.ximian.com\r
+// \r
+\r
+using NUnit.Framework;\r
+using System;\r
+using System.IO;\r
+using System.Text;\r
+\r
+namespace MonoTests.System.IO\r
+{\r
+\r
+public class StreamReaderTest : TestCase\r
+{\r
+       public StreamReaderTest() : \r
+               base ("MonoTests.System.StreamReaderTest testsuite") {}\r
+       public StreamReaderTest(string name) : base(name) {}\r
+\r
+       protected override void SetUp() \r
+       {\r
+       }\r
+\r
+       protected override void TearDown() \r
+       {\r
+       }\r
+\r
+       public static ITest Suite {\r
+               get { \r
+                       return new TestSuite(typeof(StreamReaderTest)); \r
+               }\r
+       }\r
+\r
+       // assume testing pwd is corlib/Test\r
+       private string _codeFileName = "System.IO/StreamReaderTest.cs";\r
+\r
+       public void TestCtor1() {\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader((Stream)null);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       FileStream f = new FileStream(_codeFileName, FileMode.Open, FileAccess.Write);\r
+                       try {\r
+                               StreamReader r = new StreamReader(f);\r
+                               r.Close();\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       f.Close();\r
+                       Assert("no read error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       // this is probably incestuous, but, oh well.\r
+                       FileStream f = new FileStream(_codeFileName, \r
+                                                     FileMode.Open, \r
+                                                     FileAccess.Read);\r
+                       StreamReader r = new StreamReader(_codeFileName);\r
+                       AssertNotNull("no stream reader", r);\r
+                       r.Close();\r
+                       f.Close();\r
+               }\r
+       }\r
+       public void TestCtor2() {\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("");\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("empty string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader((string)null);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("nonexistentfile");\r
+                       } catch (FileNotFoundException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("fileNotFound error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("nonexistentdir/file");\r
+                       } catch (DirectoryNotFoundException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("dirNotFound error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("!$what? what? Huh? !$*#");\r
+                       } catch (IOException) {\r
+                               errorThrown = true;\r
+                       } catch (ArgumentException) {\r
+                               // FIXME - the spec says 'IOExc', but the\r
+                               //   compiler says 'ArgExc'...\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("invalid filename error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       // this is probably incestuous, but, oh well.\r
+                       StreamReader r = new StreamReader(_codeFileName);\r
+                       AssertNotNull("no stream reader", r);\r
+                       r.Close();\r
+               }\r
+       }\r
+       public void TestCtor3() {\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader((Stream)null, false);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       FileStream f = new FileStream(_codeFileName, FileMode.Open, FileAccess.Write);\r
+                       try {\r
+                               StreamReader r = new StreamReader(f, false);\r
+                               r.Close();\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       f.Close();\r
+                       Assert("no read error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       // this is probably incestuous, but, oh well.\r
+                       FileStream f = new FileStream(_codeFileName, \r
+                                                     FileMode.Open, \r
+                                                     FileAccess.Read);\r
+                       StreamReader r = new StreamReader(_codeFileName, false);\r
+                       AssertNotNull("no stream reader", r);\r
+                       r.Close();\r
+                       f.Close();\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader((Stream)null, true);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       FileStream f = new FileStream(_codeFileName, FileMode.Open, FileAccess.Write);\r
+                       try {\r
+                               StreamReader r = new StreamReader(f, true);\r
+                               r.Close();\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       f.Close();\r
+                       Assert("no read error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       // this is probably incestuous, but, oh well.\r
+                       FileStream f = new FileStream(_codeFileName, \r
+                                                     FileMode.Open, \r
+                                                     FileAccess.Read);\r
+                       StreamReader r = new StreamReader(_codeFileName, true);\r
+                       AssertNotNull("no stream reader", r);\r
+                       r.Close();\r
+                       f.Close();\r
+               }\r
+       }\r
+       public void TestCtor4() {\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("", false);\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("empty string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader((string)null, false);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("nonexistentfile", false);\r
+                       } catch (FileNotFoundException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("fileNotFound error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("nonexistentdir/file", false);\r
+                       } catch (DirectoryNotFoundException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("dirNotFound error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("!$what? what? Huh? !$*#", false);\r
+                       } catch (IOException) {\r
+                               errorThrown = true;\r
+                       } catch (ArgumentException) {\r
+                               // FIXME - the spec says 'IOExc', but the\r
+                               //   compiler says 'ArgExc'...\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("invalid filename error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       // this is probably incestuous, but, oh well.\r
+                       StreamReader r = new StreamReader(_codeFileName, false);\r
+                       AssertNotNull("no stream reader", r);\r
+                       r.Close();\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("", true);\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("empty string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader((string)null, true);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null string error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("nonexistentfile", true);\r
+                       } catch (FileNotFoundException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("fileNotFound error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("nonexistentdir/file", true);\r
+                       } catch (DirectoryNotFoundException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("dirNotFound error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               StreamReader r = new StreamReader("!$what? what? Huh? !$*#", true);\r
+                       } catch (IOException) {\r
+                               errorThrown = true;\r
+                       } catch (ArgumentException) {\r
+                               // FIXME - the spec says 'IOExc', but the\r
+                               //   compiler says 'ArgExc'...\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("invalid filename error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       // this is probably incestuous, but, oh well.\r
+                       StreamReader r = new StreamReader(_codeFileName, true);\r
+                       AssertNotNull("no stream reader", r);\r
+                       r.Close();\r
+               }\r
+       }\r
+\r
+       // TODO - Ctor with Encoding\r
+       \r
+       public void TestBaseStream() {\r
+               FileStream f = new FileStream(_codeFileName, \r
+                                             FileMode.Open, \r
+                                             FileAccess.Read);\r
+               StreamReader r = new StreamReader(f);\r
+               //AssertEquals("wrong base stream ", f.Name, ((FileStream)r.BaseStream).Name);\r
+               AssertEquals("wrong base stream ", f, r.BaseStream);\r
+               r.Close();\r
+               f.Close();\r
+       }\r
+\r
+       public void TestCurrentEncoding() {\r
+               StreamReader r = new StreamReader(_codeFileName);\r
+               AssertEquals("wrong encoding", \r
+                            Encoding.UTF8, r.CurrentEncoding);\r
+       }\r
+\r
+       // TODO - Close - annoying spec - won't commit to any exceptions. How to test?\r
+       // TODO - DiscardBufferedData - I have no clue how to test this function.\r
+\r
+       public void TestPeek() {\r
+               // FIXME - how to get an IO Exception?\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               Byte[] b = {};\r
+                               MemoryStream m = new MemoryStream(b);\r
+                               StreamReader r = new StreamReader(m);\r
+                               m.Close();\r
+                               int nothing = r.Peek();\r
+                       } catch (ObjectDisposedException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("nothing-to-peek-at error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       Byte[] b = {1, 2, 3, 4, 5, 6};\r
+                       MemoryStream m = new MemoryStream(b);\r
+                       \r
+                       StreamReader r = new StreamReader(m);\r
+                       for (int i = 1; i <= 6; i++) {\r
+                               AssertEquals("peek incorrect", i, r.Peek());\r
+                               r.Read();\r
+                       }\r
+                       AssertEquals("should be none left", -1, r.Peek());\r
+               }\r
+       }\r
+\r
+       public void TestRead() {\r
+               // FIXME - how to get an IO Exception?\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               Byte[] b = {};\r
+                               MemoryStream m = new MemoryStream(b);\r
+                               StreamReader r = new StreamReader(m);\r
+                               m.Close();\r
+                               int nothing = r.Read();\r
+                       } catch (ObjectDisposedException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("nothing-to-read error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       Byte[] b = {1, 2, 3, 4, 5, 6};\r
+                       MemoryStream m = new MemoryStream(b);\r
+                       \r
+                       StreamReader r = new StreamReader(m);\r
+                       for (int i = 1; i <= 6; i++) {\r
+                               AssertEquals("read incorrect", i, r.Read());\r
+                       }\r
+                       AssertEquals("Should be none left", -1, r.Read());\r
+               }\r
+\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               Byte[] b = {};\r
+                               StreamReader r = new StreamReader(new MemoryStream(b));\r
+                               r.Read(null, 0, 0);\r
+                       } catch (ArgumentNullException) {\r
+                               errorThrown = true;\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("null buffer error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               Byte[] b = {};\r
+                               StreamReader r = new StreamReader(new MemoryStream(b));\r
+                               Char[] c = new Char[1];\r
+                               r.Read(c, 0, 2);\r
+                       } catch (ArgumentException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("too-long range error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               Byte[] b = {};\r
+                               StreamReader r = new StreamReader(new MemoryStream(b));\r
+                               Char[] c = new Char[1];\r
+                               r.Read(c, -1, 2);\r
+                       } catch (ArgumentOutOfRangeException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("out of range error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       bool errorThrown = false;\r
+                       try {\r
+                               Byte[] b = {};\r
+                               StreamReader r = new StreamReader(new MemoryStream(b));\r
+                               Char[] c = new Char[1];\r
+                               r.Read(c, 0, -1);\r
+                       } catch (ArgumentOutOfRangeException) {\r
+                               errorThrown = true;\r
+                       }\r
+                       Assert("out of range error not thrown", errorThrown);\r
+               }\r
+               {\r
+                       Byte[] b = {(byte)'a', (byte)'b', (byte)'c', \r
+                                   (byte)'d', (byte)'e', (byte)'f', \r
+                                   (byte)'g'};\r
+                       MemoryStream m = new MemoryStream(b);\r
+                       StreamReader r = new StreamReader(m);\r
+\r
+                       char[] buffer = new Char[7];\r
+                       char[] target = {'g','d','e','f','b','c','a'};\r
+                       r.Read(buffer, 6, 1);\r
+                       r.Read(buffer, 4, 2);\r
+                       r.Read(buffer, 1, 3);\r
+                       r.Read(buffer, 0, 1);\r
+                       for (int i = 0; i < target.Length; i++) {\r
+                               AssertEquals("read no work", \r
+                                            target[i], buffer[i]);\r
+                       }\r
+               }\r
+       }\r
+\r
+       public void TestReadLine() {\r
+               // TODO Out Of Memory Exc? IO Exc?\r
+               Byte[] b = new Byte[8];\r
+               b[0] = (byte)'a';\r
+               b[1] = (byte)'\n';\r
+               b[2] = (byte)'b';\r
+               b[3] = (byte)'\n';\r
+               b[4] = (byte)'c';\r
+               b[5] = (byte)'\n';\r
+               b[6] = (byte)'d';\r
+               b[7] = (byte)'\n';\r
+               MemoryStream m = new MemoryStream(b);\r
+               StreamReader r = new StreamReader(m);\r
+               AssertEquals("line doesn't match", "a", r.ReadLine());\r
+               AssertEquals("line doesn't match", "b", r.ReadLine());\r
+               AssertEquals("line doesn't match", "c", r.ReadLine());\r
+               AssertEquals("line doesn't match", "d", r.ReadLine());\r
+               AssertEquals("line doesn't match", null, r.ReadLine());\r
+       }\r
+\r
+       public void TestReadToEnd() {\r
+               // TODO Out Of Memory Exc? IO Exc?\r
+               Byte[] b = new Byte[8];\r
+               b[0] = (byte)'a';\r
+               b[1] = (byte)'\n';\r
+               b[2] = (byte)'b';\r
+               b[3] = (byte)'\n';\r
+               b[4] = (byte)'c';\r
+               b[5] = (byte)'\n';\r
+               b[6] = (byte)'d';\r
+               b[7] = (byte)'\n';\r
+               MemoryStream m = new MemoryStream(b);\r
+               StreamReader r = new StreamReader(m);\r
+               AssertEquals("line doesn't match", "a\nb\nc\nd\n", r.ReadToEnd());\r
+               AssertEquals("line doesn't match", "", r.ReadToEnd());\r
+       }\r
+}\r
+}\r