--- /dev/null
+// 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