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 : Assertion {
19 public void TestReadLine() {
20 string testme = "a\nb\nc\n";
21 StringReader sr = new StringReader (testme);
24 while ((inputLine = sr.ReadLine ()) != null)
27 AssertEquals ("Incorrect number of lines", 3, lines);
30 public void TestPeekRead() {
31 StringReader reader = new StringReader( "Test String" );
33 char c = (char)reader.Peek();
34 AssertEquals("A1", 'T', c );
36 char read = (char)reader.Read();
38 AssertEquals("A2", 'T', read );
40 c = (char)reader.Peek();
42 AssertEquals("A3", 'e', c );
45 public void TestPeekAndReadAtEndOfString() {
46 StringReader reader = new StringReader("x");
48 char c = (char)reader.Peek();
49 AssertEquals("A1", 'x', c );
51 c = (char)reader.Read();
52 AssertEquals("A2", 'x', c);
54 int i = reader.Peek();
55 AssertEquals("A3", -1, i);
58 AssertEquals("A4", -1, i);
61 AssertEquals("A5", -1, i);
64 public void TestPeekAndReadEmptyString() {
65 StringReader reader = new StringReader("");
67 int i = reader.Peek();
68 AssertEquals("A1", -1, i);
71 AssertEquals("A2", -1, i);
74 public void TestRead() {
75 StringReader reader = new StringReader( "Test String" );
77 /* Read from start of string */
78 char[] test = new char[5];
80 int charsRead = reader.Read( test, 0, 5 );
82 AssertEquals( 5, charsRead );
83 AssertEquals( "Test ", new String(test) );
85 /* Read to end of string */
86 //reader = new StringReader( "Test String" );
89 charsRead = reader.Read( test, 0, 6 );
90 AssertEquals( 6, charsRead);
91 AssertEquals( "String", new String( test ) );
93 /* Read past end of string */
96 reader = new StringReader( "Foo" );
97 charsRead = reader.Read( test, 0, 6 );
98 AssertEquals( 3, charsRead );
99 AssertEquals( "Foo\0\0\0", new String( test ) );
101 /* Check that a new invocation on the empty reader will return 0 */
102 charsRead = reader.Read (test, 0, 6);
103 AssertEquals (0, charsRead);
107 public void TestReadEOL() {
108 StringReader reader = new StringReader( "Line1\rLine2\r\nLine3\nLine4" );
110 string test = reader.ReadLine();
112 AssertEquals( "Line1", test );
114 test = reader.ReadLine();
116 AssertEquals( "Line2", test );
118 test = reader.ReadLine();
120 AssertEquals( "Line3", test );
122 test = reader.ReadLine();
124 AssertEquals( "Line4", test );
127 public void TestClose() {
129 StringReader reader = new StringReader("reader");
135 } catch (Exception e) {
136 AssertEquals ("Close 1", typeof (ObjectDisposedException), e.GetType ());
142 } catch (Exception e) {
143 AssertEquals ("Close 2", typeof (ObjectDisposedException), e.GetType ());
147 public void TestExceptions() {
152 reader = new StringReader(null);
154 } catch (Exception e) {
155 AssertEquals ("Exception 1", typeof (ArgumentNullException), e.GetType ());
158 reader = new StringReader ("this is a test\nAnd nothing else");
161 reader.Read (null, 0, 12);
163 } catch (Exception e) {
164 AssertEquals ("Exception 2", typeof (ArgumentNullException), e.GetType ());
169 public void MoreEOL ()
171 TextReader tr = new StringReader ("There she was just a walking\n" +
172 "Down the street singin'\r" +
173 "Do wah diddy diddy dum diddy do");
176 while (tr.ReadLine () != null)
179 AssertEquals ("#01", 3, i);
183 [ExpectedException (typeof (ArgumentException))]
184 public void Read_IndexOverflow ()
186 StringReader sr = new StringReader ("Mono");
187 sr.Read (new char [4], Int32.MaxValue, 1);
191 [ExpectedException (typeof (ArgumentException))]
192 public void Read_CountOverflow ()
194 StringReader sr = new StringReader ("Mono");
195 sr.Read (new char [4], 1, Int32.MaxValue);