2 // System.IO.StringWriter
4 // Author: Marcin Szczepanski (marcins@zipworld.com.au)
6 // TODO: Add some testing for exceptions
8 // TODO: Some of the tests could be a bit more thorough
11 using NUnit.Framework;
15 namespace MonoTests.System.IO {
18 public class StringReaderTest {
20 public void TestReadLine() {
21 string testme = "a\nb\nc\n";
22 StringReader sr = new StringReader (testme);
25 while ((inputLine = sr.ReadLine ()) != null)
28 Assert.AreEqual (3, lines, "Incorrect number of lines");
32 public void TestPeekRead() {
33 StringReader reader = new StringReader( "Test String" );
35 char c = (char)reader.Peek();
36 Assert.AreEqual ('T', c, "A1");
38 char read = (char)reader.Read();
40 Assert.AreEqual ('T', read, "A2");
42 c = (char)reader.Peek();
44 Assert.AreEqual ('e', c, "A3");
48 public void TestPeekAndReadAtEndOfString() {
49 StringReader reader = new StringReader("x");
51 char c = (char)reader.Peek();
52 Assert.AreEqual ('x', c, "A1");
54 c = (char)reader.Read();
55 Assert.AreEqual ('x', c, "A2");
57 int i = reader.Peek();
58 Assert.AreEqual (-1, i, "A3");
61 Assert.AreEqual (-1, i, "A4");
64 Assert.AreEqual (-1, i, "A5");
68 public void TestPeekAndReadEmptyString() {
69 StringReader reader = new StringReader("");
71 int i = reader.Peek();
72 Assert.AreEqual (-1, i, "A1");
75 Assert.AreEqual (-1, i, "A2");
79 public void TestRead() {
80 StringReader reader = new StringReader( "Test String" );
82 /* Read from start of string */
83 char[] test = new char[5];
85 int charsRead = reader.Read( test, 0, 5 );
87 Assert.AreEqual (5, charsRead);
88 Assert.AreEqual ("Test ", new String(test));
90 /* Read to end of string */
91 //reader = new StringReader( "Test String" );
94 charsRead = reader.Read( test, 0, 6 );
95 Assert.AreEqual (6, charsRead);
96 Assert.AreEqual ("String", new String( test ));
98 /* Read past end of string */
101 reader = new StringReader( "Foo" );
102 charsRead = reader.Read( test, 0, 6 );
103 Assert.AreEqual (3, charsRead);
104 Assert.AreEqual ("Foo\0\0\0", new String( test ));
106 /* Check that a new invocation on the empty reader will return 0 */
107 charsRead = reader.Read (test, 0, 6);
108 Assert.AreEqual (0, charsRead);
113 public void TestReadEOL() {
114 StringReader reader = new StringReader( "Line1\rLine2\r\nLine3\nLine4" );
116 string test = reader.ReadLine();
118 Assert.AreEqual ("Line1", test);
120 test = reader.ReadLine();
122 Assert.AreEqual ("Line2", test);
124 test = reader.ReadLine();
126 Assert.AreEqual ("Line3", test);
128 test = reader.ReadLine();
130 Assert.AreEqual ("Line4", test);
134 public void TestClose() {
136 StringReader reader = new StringReader("reader");
142 } catch (Exception e) {
143 Assert.AreEqual (typeof (ObjectDisposedException), e.GetType (), "Close 1");
149 } catch (Exception e) {
150 Assert.AreEqual (typeof (ObjectDisposedException), e.GetType (), "Close 2");
155 public void TestExceptions() {
160 reader = new StringReader(null);
162 } catch (Exception e) {
163 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "Exception 1");
166 reader = new StringReader ("this is a test\nAnd nothing else");
169 reader.Read (null, 0, 12);
171 } catch (Exception e) {
172 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "Exception 2");
177 public void MoreEOL ()
179 TextReader tr = new StringReader ("There she was just a walking\n" +
180 "Down the street singin'\r" +
181 "Do wah diddy diddy dum diddy do");
184 while (tr.ReadLine () != null)
187 Assert.AreEqual (3, i, "#01");
191 [ExpectedException (typeof (ArgumentException))]
192 public void Read_IndexOverflow ()
194 StringReader sr = new StringReader ("Mono");
195 sr.Read (new char [4], Int32.MaxValue, 1);
199 [ExpectedException (typeof (ArgumentException))]
200 public void Read_CountOverflow ()
202 StringReader sr = new StringReader ("Mono");
203 sr.Read (new char [4], 1, Int32.MaxValue);
207 public void Read_DoesntStopAtLineEndings ()
209 StringReader reader = new StringReader ("Line1\rLine2\r\nLine3\nLine4");
210 Assert.AreEqual (reader.Read (new char[24], 0, 24), 24);
214 public void MixedLineEnding ()
216 string foobar = "Foo\n\r\n\rBar";
217 StringReader reader = new StringReader (foobar);
219 while (reader.ReadLine () != null)
221 Assert.AreEqual (4, count);