StringWriterTest.cs 7.6 KB

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