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