2 // System.IO.StringWriter
5 // Marcin Szczepanski (marcins@zipworld.com.au)
6 // Ben Maurer <bmaurer@users.sourceforge.net>
7 // Sebastien Pouliot <sebastien@ximian.com>
9 // Copyright (C) 2004 Novell (http://www.novell.com)
12 using NUnit.Framework;
15 using System.Globalization;
18 namespace MonoTests.System.IO {
21 public class StringWriterTest {
23 public void TestConstructors() {
24 StringBuilder sb = new StringBuilder("Test String");
26 StringWriter writer = new StringWriter( sb );
27 Assert.AreEqual (sb, writer.GetStringBuilder());
31 public void TestCultureInfoConstructor() {
33 StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
34 Assert.IsNotNull (writer.GetStringBuilder());
36 Assert.AreEqual (String.Empty, writer.ToString());
39 Assert.AreEqual ("A", writer.ToString());
41 writer.Write( " foo" );
42 Assert.AreEqual ("A foo", writer.ToString());
45 char[] testBuffer = "Test String".ToCharArray();
47 writer.Write( testBuffer, 0, 4 );
48 Assert.AreEqual ("A fooTest", writer.ToString());
50 writer.Write( testBuffer, 5, 6 );
51 Assert.AreEqual ("A fooTestString", writer.ToString());
53 writer = new StringWriter(CultureInfo.InvariantCulture);
54 writer.Write(null as string);
55 Assert.AreEqual ("", writer.ToString());
59 public void TestWrite() {
60 StringWriter writer = new StringWriter();
62 Assert.AreEqual (String.Empty, writer.ToString());
65 Assert.AreEqual ("A", writer.ToString());
67 writer.Write( " foo" );
68 Assert.AreEqual ("A foo", writer.ToString());
71 char[] testBuffer = "Test String".ToCharArray();
73 writer.Write( testBuffer, 0, 4 );
74 Assert.AreEqual ("A fooTest", writer.ToString());
76 writer.Write( testBuffer, 5, 6 );
77 Assert.AreEqual ("A fooTestString", writer.ToString());
79 writer = new StringWriter ();
80 writer.Write(null as string);
81 Assert.AreEqual ("", writer.ToString());
86 public void TestNewLine() {
88 StringWriter writer = new StringWriter();
90 writer.NewLine = "\n\r";
91 Assert.AreEqual ("\n\r", writer.NewLine, "NewLine 1");
93 writer.WriteLine ("first");
94 Assert.AreEqual ("first\n\r", writer.ToString(), "NewLine 2");
96 writer.NewLine = "\n";
97 Assert.AreEqual ("first\n\r", writer.ToString(), "NewLine 3");
99 writer.WriteLine ("second");
100 Assert.AreEqual ("first\n\rsecond\n", writer.ToString(), "NewLine 4");
105 public void TestWriteLine() {
107 StringWriter writer = new StringWriter();
108 writer.NewLine = "\n";
110 writer.WriteLine ("first line");
111 writer.WriteLine ("second line");
113 Assert.AreEqual ("first line\nsecond line\n", writer.ToString (), "WriteLine 1");
118 public void TestGetStringBuilder() {
120 StringWriter writer = new StringWriter ();
121 writer.Write ("line");
122 StringBuilder builder = writer.GetStringBuilder ();
124 Assert.AreEqual ("line12", writer.ToString (), "GetStringBuilder 1");
125 writer.Write ("test");
126 Assert.AreEqual ("line12test", builder.ToString (), "GetStringBuilder 2");
130 public void TestClose() {
132 StringWriter writer = new StringWriter ();
133 writer.Write ("mono");
137 writer.Write ("kicks ass");
138 Assert.Fail ("Close 1");
139 } catch (Exception e) {
140 Assert.AreEqual (typeof (ObjectDisposedException), e.GetType (), "Close 2");
143 Assert.AreEqual ("mono", writer.ToString (), "Close 3");
145 StringBuilder builder = writer.GetStringBuilder ();
146 Assert.AreEqual ("mono", builder.ToString (), "Close 4");
148 builder.Append (" kicks ass");
149 Assert.AreEqual ("mono kicks ass", writer.ToString (), "Close 5");
153 public void TestExceptions () {
156 StringWriter writer = new StringWriter (null as StringBuilder);
158 } catch (Exception e) {
159 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "Exceptions 1");
162 StringWriter writer = new StringWriter (null as IFormatProvider);
165 StringWriter writer = new StringWriter (null as StringBuilder, null as IFormatProvider);
167 } catch (Exception e) {
168 Assert.AreEqual (typeof (ArgumentNullException), e.GetType (), "Exceptions 2");
173 // strangely this is accepted [ExpectedException (typeof (ArgumentNullException))]
174 public void WriteString_Null ()
176 StringWriter writer = new StringWriter ();
177 writer.Write (null as String);
181 [ExpectedException (typeof (ArgumentNullException))]
182 public void WriteChars_Null ()
184 StringWriter writer = new StringWriter ();
185 writer.Write (null, 0, 0);
189 [ExpectedException (typeof (ArgumentOutOfRangeException))]
190 public void WriteChars_IndexNegative ()
192 char[] c = new char [2] { 'a', 'b' };
193 StringWriter writer = new StringWriter ();
194 writer.Write (c, -1, 0);
198 [ExpectedException (typeof (ArgumentOutOfRangeException))]
199 public void WriteChars_CountNegative ()
201 char[] c = new char [2] { 'a', 'b' };
202 StringWriter writer = new StringWriter ();
203 writer.Write (c, 0, -1);
207 [ExpectedException (typeof (ArgumentException))]
208 public void WriteChars_IndexOverflow ()
210 char[] c = new char [2] { 'a', 'b' };
211 StringWriter writer = new StringWriter ();
212 writer.Write (c, Int32.MaxValue, 0);
216 [ExpectedException (typeof (ArgumentException))]
217 public void WriteChars_CountOverflow ()
219 char[] c = new char [2] { 'a', 'b' };
220 StringWriter writer = new StringWriter ();
221 writer.Write (c, 0, Int32.MaxValue);
225 public void Disposed_Encoding ()
227 StringWriter writer = new StringWriter ();
229 Assert.IsNotNull (writer.Encoding, "Disposed-Encoding");
233 public void Disposed_DoubleClose ()
235 StringWriter writer = new StringWriter ();
241 public void Disposed_GetStringBuilder ()
243 StringWriter writer = new StringWriter ();
244 writer.Write ("Mono");
246 Assert.IsNotNull (writer.GetStringBuilder (), "Disposed-GetStringBuilder");
250 public void Disposed_ToString ()
252 StringWriter writer = new StringWriter ();
253 writer.Write ("Mono");
255 Assert.AreEqual ("Mono", writer.ToString (), "Disposed-ToString");
259 [ExpectedException (typeof (ObjectDisposedException))]
260 public void Disposed_WriteChar ()
262 StringWriter writer = new StringWriter ();
268 [ExpectedException (typeof (ObjectDisposedException))]
269 public void Disposed_WriteString ()
271 StringWriter writer = new StringWriter ();
273 writer.Write ("mono");
277 [ExpectedException (typeof (ObjectDisposedException))]
278 public void Disposed_WriteChars ()
280 char[] c = new char [2] { 'a', 'b' };
281 StringWriter writer = new StringWriter ();
283 writer.Write (c, 0, 2);