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