* StreamWriterTest.cs: Only check paramname for buffersize exception on
[mono.git] / mcs / class / corlib / Test / System.IO / StringWriterTest.cs
index 7a9467e30c5c44d49d1726eed99f388746950dbc..b220929458d17af88f2fd919848dc5c49e1dd9ca 100644 (file)
@@ -1,32 +1,34 @@
-//\r
-// System.IO.StringWriter\r
-//\r
+//
+// System.IO.StringWriter
+//
 // Authors:
-//     Marcin Szczepanski (marcins@zipworld.com.au)\r
+//     Marcin Szczepanski (marcins@zipworld.com.au)
 //     Ben Maurer <bmaurer@users.sourceforge.net>
-//\r
-// TODO: Add some testing for exceptions\r
-//\r
-\r
-using NUnit.Framework;\r
-using System.IO;\r
+//     Sebastien Pouliot  <sebastien@ximian.com>
+//
+// Copyright (C) 2004 Novell (http://www.novell.com)
+//
+
+using NUnit.Framework;
+using System.IO;
 using System;
-using System.Globalization;\r
-using System.Text;\r
-\r
-namespace MonoTests.System.IO {\r
-\r
-public class StringWriterTest : TestCase {\r
-       public void TestConstructors() {\r
-                StringBuilder sb = new StringBuilder("Test String");\r
-\r
-                StringWriter writer = new StringWriter( sb );\r
-                AssertEquals( sb, writer.GetStringBuilder() );\r
+using System.Globalization;
+using System.Text;
+
+namespace MonoTests.System.IO {
+
+[TestFixture]
+public class StringWriterTest : Assertion {
+       public void TestConstructors() {
+                StringBuilder sb = new StringBuilder("Test String");
+
+                StringWriter writer = new StringWriter( sb );
+                AssertEquals( sb, writer.GetStringBuilder() );
         }
-       \r
-        public void TestCultureInfoConstructor() {\r
-\r
-               StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);\r
+
+        public void TestCultureInfoConstructor() {
+
+               StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
                AssertNotNull( writer.GetStringBuilder() );
                
                AssertEquals( String.Empty, writer.ToString() );
@@ -48,118 +50,230 @@ public class StringWriterTest : TestCase {
                
                writer = new StringWriter(CultureInfo.InvariantCulture);
                writer.Write(null as string);
-               AssertEquals( "", writer.ToString() );\r
-        }\r
-\r
-        public void TestWrite() {\r
-                StringWriter writer = new StringWriter();\r
-\r
-                AssertEquals( String.Empty, writer.ToString() );\r
-                \r
-                writer.Write( 'A' );\r
-                AssertEquals( "A", writer.ToString() );\r
-\r
-                writer.Write( " foo" );\r
-                AssertEquals( "A foo", writer.ToString() );\r
-\r
-                \r
-                char[] testBuffer = "Test String".ToCharArray();\r
-\r
-                writer.Write( testBuffer, 0, 4 );\r
-                AssertEquals( "A fooTest", writer.ToString() );\r
-\r
-                writer.Write( testBuffer, 5, 6 );\r
-                AssertEquals( "A fooTestString", writer.ToString() );\r
-\r
-               writer = new StringWriter ();\r
-                writer.Write(null as string);\r
-                AssertEquals( "", writer.ToString() );\r
-\r
-        }\r
-\r
-        public void TestNewLine() {\r
-               \r
-               StringWriter writer = new StringWriter();\r
-               \r
-               writer.NewLine = "\n\r";\r
-               AssertEquals ("NewLine 1", "\n\r", writer.NewLine);\r
-               \r
-               writer.WriteLine ("first");\r
-               AssertEquals ("NewLine 2", "first\n\r", writer.ToString());\r
-               \r
-               writer.NewLine = "\n";\r
-               AssertEquals ("NewLine 3", "first\n\r", writer.ToString());\r
-               \r
-               writer.WriteLine ("second");\r
-               AssertEquals ("NewLine 4", "first\n\rsecond\n", writer.ToString());\r
-               \r
-        }\r
-        \r
-        public void TestWriteLine() {\r
-               \r
-               StringWriter writer = new StringWriter();\r
-               writer.NewLine = "\n";\r
-               \r
-               writer.WriteLine ("first line");\r
-               writer.WriteLine ("second line");\r
-                               \r
-               AssertEquals ("WriteLine 1", "first line\nsecond line\n", writer.ToString ());\r
-               writer.Close ();\r
-        }\r
-        \r
-        public void TestGetStringBuilder() {\r
-               \r
-               StringWriter writer = new StringWriter ();\r
-               writer.Write ("line");\r
-               StringBuilder builder = writer.GetStringBuilder ();\r
-               builder.Append (12);\r
-               AssertEquals ("GetStringBuilder 1", "line12", writer.ToString ());\r
-               writer.Write ("test");\r
-               AssertEquals ("GetStringBuilder 2", "line12test", builder.ToString ());                         \r
-        }\r
-        \r
-        public void TestClose() {\r
-               \r
-               StringWriter writer = new StringWriter ();\r
-               writer.Write ("mono");\r
-               writer.Close ();\r
-               \r
-               try {\r
-                       writer.Write ("kicks ass");\r
-                       Fail ("Close 1");\r
-               } catch (Exception e) {\r
-                       AssertEquals ("Close 2", typeof (ObjectDisposedException), e.GetType ());\r
-               }\r
-\r
-               AssertEquals ("Close 3", "mono", writer.ToString ());\r
-               writer.Flush ();\r
-               StringBuilder builder = writer.GetStringBuilder ();\r
-               AssertEquals ("Close 4", "mono", builder.ToString ());\r
-               \r
-               builder.Append (" kicks ass");\r
-               AssertEquals ("Close 5", "mono kicks ass", writer.ToString ());\r
-        }\r
-\r
-        public void TestExceptions () {\r
-               \r
-               try {\r
-                       StringWriter writer = new StringWriter (null as StringBuilder);\r
-                       Fail();\r
-               } catch (Exception e) {\r
-                       AssertEquals ("Exceptions 1", typeof (ArgumentNullException), e.GetType ());\r
-               }\r
-               {\r
-                       StringWriter writer = new StringWriter (null as IFormatProvider);\r
-               }\r
-               try {\r
-                       StringWriter writer = new StringWriter (null as StringBuilder, null as IFormatProvider);\r
-                       Fail ();\r
-               } catch (Exception e) {\r
-                       AssertEquals ("Exceptions 2", typeof (ArgumentNullException), e.GetType ());\r
-               }                               \r
-        }\r
-\r
-\r
-}\r
-\r
-}\r
+               AssertEquals( "", writer.ToString() );
+        }
+
+        public void TestWrite() {
+                StringWriter writer = new StringWriter();
+
+                AssertEquals( String.Empty, writer.ToString() );
+                
+                writer.Write( 'A' );
+                AssertEquals( "A", writer.ToString() );
+
+                writer.Write( " foo" );
+                AssertEquals( "A foo", writer.ToString() );
+
+                
+                char[] testBuffer = "Test String".ToCharArray();
+
+                writer.Write( testBuffer, 0, 4 );
+                AssertEquals( "A fooTest", writer.ToString() );
+
+                writer.Write( testBuffer, 5, 6 );
+                AssertEquals( "A fooTestString", writer.ToString() );
+
+               writer = new StringWriter ();
+                writer.Write(null as string);
+                AssertEquals( "", writer.ToString() );
+
+        }
+
+        public void TestNewLine() {
+               
+               StringWriter writer = new StringWriter();
+               
+               writer.NewLine = "\n\r";
+               AssertEquals ("NewLine 1", "\n\r", writer.NewLine);
+               
+               writer.WriteLine ("first");
+               AssertEquals ("NewLine 2", "first\n\r", writer.ToString());
+               
+               writer.NewLine = "\n";
+               AssertEquals ("NewLine 3", "first\n\r", writer.ToString());
+               
+               writer.WriteLine ("second");
+               AssertEquals ("NewLine 4", "first\n\rsecond\n", writer.ToString());
+               
+        }
+        
+        public void TestWriteLine() {
+               
+               StringWriter writer = new StringWriter();
+               writer.NewLine = "\n";
+               
+               writer.WriteLine ("first line");
+               writer.WriteLine ("second line");
+                               
+               AssertEquals ("WriteLine 1", "first line\nsecond line\n", writer.ToString ());
+               writer.Close ();
+        }
+        
+        public void TestGetStringBuilder() {
+               
+               StringWriter writer = new StringWriter ();
+               writer.Write ("line");
+               StringBuilder builder = writer.GetStringBuilder ();
+               builder.Append (12);
+               AssertEquals ("GetStringBuilder 1", "line12", writer.ToString ());
+               writer.Write ("test");
+               AssertEquals ("GetStringBuilder 2", "line12test", builder.ToString ());                         
+        }
+        
+        public void TestClose() {
+               
+               StringWriter writer = new StringWriter ();
+               writer.Write ("mono");
+               writer.Close ();
+               
+               try {
+                       writer.Write ("kicks ass");
+                       Fail ("Close 1");
+               } catch (Exception e) {
+                       AssertEquals ("Close 2", typeof (ObjectDisposedException), e.GetType ());
+               }
+
+               AssertEquals ("Close 3", "mono", writer.ToString ());
+               writer.Flush ();
+               StringBuilder builder = writer.GetStringBuilder ();
+               AssertEquals ("Close 4", "mono", builder.ToString ());
+               
+               builder.Append (" kicks ass");
+               AssertEquals ("Close 5", "mono kicks ass", writer.ToString ());
+        }
+
+        public void TestExceptions () {
+               
+               try {
+                       StringWriter writer = new StringWriter (null as StringBuilder);
+                       Fail();
+               } catch (Exception e) {
+                       AssertEquals ("Exceptions 1", typeof (ArgumentNullException), e.GetType ());
+               }
+               {
+                       StringWriter writer = new StringWriter (null as IFormatProvider);
+               }
+               try {
+                       StringWriter writer = new StringWriter (null as StringBuilder, null as IFormatProvider);
+                       Fail ();
+               } catch (Exception e) {
+                       AssertEquals ("Exceptions 2", typeof (ArgumentNullException), e.GetType ());
+               }                               
+        }
+
+       [Test]
+       // strangely this is accepted [ExpectedException (typeof (ArgumentNullException))]
+       public void WriteString_Null ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Write (null as String);
+       }
+
+       [Test]
+       [ExpectedException (typeof (ArgumentNullException))]
+       public void WriteChars_Null ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Write (null, 0, 0);
+       }
+
+       [Test]
+       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+       public void WriteChars_IndexNegative ()
+       {
+               char[] c = new char [2] { 'a', 'b' };
+               StringWriter writer = new StringWriter ();
+               writer.Write (c, -1, 0);
+       }
+
+       [Test]
+       [ExpectedException (typeof (ArgumentOutOfRangeException))]
+       public void WriteChars_CountNegative ()
+       {
+               char[] c = new char [2] { 'a', 'b' };
+               StringWriter writer = new StringWriter ();
+               writer.Write (c, 0, -1);
+       }
+
+       [Test]
+       [ExpectedException (typeof (ArgumentException))]
+       public void WriteChars_IndexOverflow ()
+       {
+               char[] c = new char [2] { 'a', 'b' };
+               StringWriter writer = new StringWriter ();
+               writer.Write (c, Int32.MaxValue, 0);
+       }
+
+       [Test]
+       [ExpectedException (typeof (ArgumentException))]
+       public void WriteChars_CountOverflow ()
+       {
+               char[] c = new char [2] { 'a', 'b' };
+               StringWriter writer = new StringWriter ();
+               writer.Write (c, 0, Int32.MaxValue);
+       }
+
+       [Test]
+       public void Disposed_Encoding ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Close ();
+               AssertNotNull ("Disposed-Encoding", writer.Encoding);
+       }
+
+       [Test]
+       public void Disposed_DoubleClose ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Close ();
+               writer.Close ();
+       }
+
+       [Test]
+       public void Disposed_GetStringBuilder ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Write ("Mono");
+               writer.Close ();
+               AssertNotNull ("Disposed-GetStringBuilder", writer.GetStringBuilder ());
+       }
+
+       [Test]
+       public void Disposed_ToString ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Write ("Mono");
+               writer.Close ();
+               AssertEquals ("Disposed-ToString", "Mono", writer.ToString ());
+       }
+
+       [Test]
+       [ExpectedException (typeof (ObjectDisposedException))]
+       public void Disposed_WriteChar ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Close ();
+               writer.Write ('c');
+       }
+
+       [Test]
+       [ExpectedException (typeof (ObjectDisposedException))]
+       public void Disposed_WriteString ()
+       {
+               StringWriter writer = new StringWriter ();
+               writer.Close ();
+               writer.Write ("mono");
+       }
+
+       [Test]
+       [ExpectedException (typeof (ObjectDisposedException))]
+       public void Disposed_WriteChars ()
+       {
+               char[] c = new char [2] { 'a', 'b' };
+               StringWriter writer = new StringWriter ();
+               writer.Close ();
+               writer.Write (c, 0, 2);
+       }
+}
+
+}