2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / corlib / Test / System.IO / StringWriterTest.cs
1 //
2 // System.IO.StringWriter
3 //
4 // Authors:
5 //      Marcin Szczepanski (marcins@zipworld.com.au)
6 //      Ben Maurer <bmaurer@users.sourceforge.net>
7 //      Sebastien Pouliot  <sebastien@ximian.com>
8 //
9 // Copyright (C) 2004 Novell (http://www.novell.com)
10 //
11
12 using NUnit.Framework;
13 using System.IO;
14 using System;
15 using System.Globalization;
16 using System.Text;
17
18 namespace MonoTests.System.IO {
19
20 [TestFixture]
21 public class StringWriterTest : Assertion {
22         public void TestConstructors() {
23                 StringBuilder sb = new StringBuilder("Test String");
24
25                 StringWriter writer = new StringWriter( sb );
26                 AssertEquals( sb, writer.GetStringBuilder() );
27         }
28
29         public void TestCultureInfoConstructor() {
30
31                 StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
32                 AssertNotNull( writer.GetStringBuilder() );
33                 
34                 AssertEquals( String.Empty, writer.ToString() );
35                 
36                 writer.Write( 'A' );
37                 AssertEquals( "A", writer.ToString() );
38                 
39                 writer.Write( " foo" );
40                 AssertEquals( "A foo", writer.ToString() );
41                 
42                 
43                 char[] testBuffer = "Test String".ToCharArray();
44                 
45                 writer.Write( testBuffer, 0, 4 );
46                 AssertEquals( "A fooTest", writer.ToString() );
47                 
48                 writer.Write( testBuffer, 5, 6 );
49                 AssertEquals( "A fooTestString", writer.ToString() );
50                 
51                 writer = new StringWriter(CultureInfo.InvariantCulture);
52                 writer.Write(null as string);
53                 AssertEquals( "", writer.ToString() );
54         }
55
56         public void TestWrite() {
57                 StringWriter writer = new StringWriter();
58
59                 AssertEquals( String.Empty, writer.ToString() );
60                 
61                 writer.Write( 'A' );
62                 AssertEquals( "A", writer.ToString() );
63
64                 writer.Write( " foo" );
65                 AssertEquals( "A foo", writer.ToString() );
66
67                 
68                 char[] testBuffer = "Test String".ToCharArray();
69
70                 writer.Write( testBuffer, 0, 4 );
71                 AssertEquals( "A fooTest", writer.ToString() );
72
73                 writer.Write( testBuffer, 5, 6 );
74                 AssertEquals( "A fooTestString", writer.ToString() );
75
76                 writer = new StringWriter ();
77                 writer.Write(null as string);
78                 AssertEquals( "", writer.ToString() );
79
80         }
81
82         public void TestNewLine() {
83                 
84                 StringWriter writer = new StringWriter();
85                 
86                 writer.NewLine = "\n\r";
87                 AssertEquals ("NewLine 1", "\n\r", writer.NewLine);
88                 
89                 writer.WriteLine ("first");
90                 AssertEquals ("NewLine 2", "first\n\r", writer.ToString());
91                 
92                 writer.NewLine = "\n";
93                 AssertEquals ("NewLine 3", "first\n\r", writer.ToString());
94                 
95                 writer.WriteLine ("second");
96                 AssertEquals ("NewLine 4", "first\n\rsecond\n", writer.ToString());
97                 
98         }
99         
100         public void TestWriteLine() {
101                 
102                 StringWriter writer = new StringWriter();
103                 writer.NewLine = "\n";
104                 
105                 writer.WriteLine ("first line");
106                 writer.WriteLine ("second line");
107                                 
108                 AssertEquals ("WriteLine 1", "first line\nsecond line\n", writer.ToString ());
109                 writer.Close ();
110         }
111         
112         public void TestGetStringBuilder() {
113                 
114                 StringWriter writer = new StringWriter ();
115                 writer.Write ("line");
116                 StringBuilder builder = writer.GetStringBuilder ();
117                 builder.Append (12);
118                 AssertEquals ("GetStringBuilder 1", "line12", writer.ToString ());
119                 writer.Write ("test");
120                 AssertEquals ("GetStringBuilder 2", "line12test", builder.ToString ());                         
121         }
122         
123         public void TestClose() {
124                 
125                 StringWriter writer = new StringWriter ();
126                 writer.Write ("mono");
127                 writer.Close ();
128                 
129                 try {
130                         writer.Write ("kicks ass");
131                         Fail ("Close 1");
132                 } catch (Exception e) {
133                         AssertEquals ("Close 2", typeof (ObjectDisposedException), e.GetType ());
134                 }
135
136                 AssertEquals ("Close 3", "mono", writer.ToString ());
137                 writer.Flush ();
138                 StringBuilder builder = writer.GetStringBuilder ();
139                 AssertEquals ("Close 4", "mono", builder.ToString ());
140                 
141                 builder.Append (" kicks ass");
142                 AssertEquals ("Close 5", "mono kicks ass", writer.ToString ());
143         }
144
145         public void TestExceptions () {
146                 
147                 try {
148                         StringWriter writer = new StringWriter (null as StringBuilder);
149                         Fail();
150                 } catch (Exception e) {
151                         AssertEquals ("Exceptions 1", typeof (ArgumentNullException), e.GetType ());
152                 }
153                 {
154                 StringWriter writer = new StringWriter (null as IFormatProvider);
155                 }
156                 try {
157                         StringWriter writer = new StringWriter (null as StringBuilder, null as IFormatProvider);
158                         Fail ();
159                 } catch (Exception e) {
160                         AssertEquals ("Exceptions 2", typeof (ArgumentNullException), e.GetType ());
161                 }                               
162         }
163
164         [Test]
165         // strangely this is accepted [ExpectedException (typeof (ArgumentNullException))]
166         public void WriteString_Null ()
167         {
168                 StringWriter writer = new StringWriter ();
169                 writer.Write (null as String);
170         }
171
172         [Test]
173         [ExpectedException (typeof (ArgumentNullException))]
174         public void WriteChars_Null ()
175         {
176                 StringWriter writer = new StringWriter ();
177                 writer.Write (null, 0, 0);
178         }
179
180         [Test]
181         [ExpectedException (typeof (ArgumentOutOfRangeException))]
182         public void WriteChars_IndexNegative ()
183         {
184                 char[] c = new char [2] { 'a', 'b' };
185                 StringWriter writer = new StringWriter ();
186                 writer.Write (c, -1, 0);
187         }
188
189         [Test]
190         [ExpectedException (typeof (ArgumentOutOfRangeException))]
191         public void WriteChars_CountNegative ()
192         {
193                 char[] c = new char [2] { 'a', 'b' };
194                 StringWriter writer = new StringWriter ();
195                 writer.Write (c, 0, -1);
196         }
197
198         [Test]
199         [ExpectedException (typeof (ArgumentException))]
200         public void WriteChars_IndexOverflow ()
201         {
202                 char[] c = new char [2] { 'a', 'b' };
203                 StringWriter writer = new StringWriter ();
204                 writer.Write (c, Int32.MaxValue, 0);
205         }
206
207         [Test]
208         [ExpectedException (typeof (ArgumentException))]
209         public void WriteChars_CountOverflow ()
210         {
211                 char[] c = new char [2] { 'a', 'b' };
212                 StringWriter writer = new StringWriter ();
213                 writer.Write (c, 0, Int32.MaxValue);
214         }
215
216         [Test]
217         public void Disposed_Encoding ()
218         {
219                 StringWriter writer = new StringWriter ();
220                 writer.Close ();
221                 AssertNotNull ("Disposed-Encoding", writer.Encoding);
222         }
223
224         [Test]
225         public void Disposed_DoubleClose ()
226         {
227                 StringWriter writer = new StringWriter ();
228                 writer.Close ();
229                 writer.Close ();
230         }
231
232         [Test]
233         public void Disposed_GetStringBuilder ()
234         {
235                 StringWriter writer = new StringWriter ();
236                 writer.Write ("Mono");
237                 writer.Close ();
238                 AssertNotNull ("Disposed-GetStringBuilder", writer.GetStringBuilder ());
239         }
240
241         [Test]
242         public void Disposed_ToString ()
243         {
244                 StringWriter writer = new StringWriter ();
245                 writer.Write ("Mono");
246                 writer.Close ();
247                 AssertEquals ("Disposed-ToString", "Mono", writer.ToString ());
248         }
249
250         [Test]
251         [ExpectedException (typeof (ObjectDisposedException))]
252         public void Disposed_WriteChar ()
253         {
254                 StringWriter writer = new StringWriter ();
255                 writer.Close ();
256                 writer.Write ('c');
257         }
258
259         [Test]
260         [ExpectedException (typeof (ObjectDisposedException))]
261         public void Disposed_WriteString ()
262         {
263                 StringWriter writer = new StringWriter ();
264                 writer.Close ();
265                 writer.Write ("mono");
266         }
267
268         [Test]
269         [ExpectedException (typeof (ObjectDisposedException))]
270         public void Disposed_WriteChars ()
271         {
272                 char[] c = new char [2] { 'a', 'b' };
273                 StringWriter writer = new StringWriter ();
274                 writer.Close ();
275                 writer.Write (c, 0, 2);
276         }
277 }
278
279 }