BUGFIX: when deleting directories, delete any files within them
[tfs.git] / nunit20 / core / StringTextWriter.cs
blob98b83cb7e25adb52457157df98843f6d7574bdb3
1 #region Copyright (c) 2002-2003, James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole, Philip A. Craig
2 /************************************************************************************
4 ' Copyright © 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole
5 ' Copyright © 2000-2003 Philip A. Craig
7 ' This software is provided 'as-is', without any express or implied warranty. In no
8 ' event will the authors be held liable for any damages arising from the use of this
9 ' software.
11 ' Permission is granted to anyone to use this software for any purpose, including
12 ' commercial applications, and to alter it and redistribute it freely, subject to the
13 ' following restrictions:
15 ' 1. The origin of this software must not be misrepresented; you must not claim that
16 ' you wrote the original software. If you use this software in a product, an
17 ' acknowledgment (see the following) in the product documentation is required.
19 ' Portions Copyright © 2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole
20 ' or Copyright © 2000-2003 Philip A. Craig
22 ' 2. Altered source versions must be plainly marked as such, and must not be
23 ' misrepresented as being the original software.
25 ' 3. This notice may not be removed or altered from any source distribution.
27 '***********************************************************************************/
28 #endregion
30 using System;
31 using System.IO;
32 using System.Text;
34 namespace NUnit.Core
36 #region StringTextWriter
38 /// <summary>
39 /// Use this wrapper to ensure that only strings get passed accross the AppDomain
40 /// boundary. Otherwise tests will break when non-remotable objects are passed to
41 /// Console.Write/WriteLine.
42 /// </summary>
43 public class StringTextWriter : TextWriter
45 public StringTextWriter( TextWriter aTextWriter )
47 theTextWriter = aTextWriter;
50 protected TextWriter theTextWriter;
52 override public void Write(char aChar)
54 theTextWriter.Write(aChar);
57 override public void Write(string aString)
59 theTextWriter.Write(aString);
62 override public void WriteLine(string aString)
64 theTextWriter.WriteLine(aString);
67 override public System.Text.Encoding Encoding
69 get { return theTextWriter.Encoding; }
72 public override void Close()
74 this.Flush();
75 theTextWriter.Close ();
78 public override void Flush()
80 theTextWriter.Flush ();
84 #endregion
86 #region BufferedStringTextWriter
88 /// <summary>
89 /// This wrapper derives from StringTextWriter and adds buffering
90 /// to improve cross-domain performance. The buffer is flushed whenever
91 /// it reaches or exceeds a maximum size or when Flush is called.
92 /// </summary>
93 public class BufferedStringTextWriter : StringTextWriter
95 public BufferedStringTextWriter( TextWriter aTextWriter ) : base( aTextWriter ){ }
97 private static readonly int MAX_BUFFER = 1000;
98 private StringBuilder sb = new StringBuilder( MAX_BUFFER );
100 override public void Write(char aChar)
102 lock( sb )
104 sb.Append( aChar );
105 this.CheckBuffer();
109 override public void Write(string aString)
111 lock( sb )
113 sb.Append( aString );
114 this.CheckBuffer();
118 override public void WriteLine(string aString)
120 lock( sb )
122 sb.Append( aString );
123 sb.Append( '\n' );
124 this.CheckBuffer();
128 override public void Flush()
130 if ( sb.Length > 0 )
132 lock( sb )
134 theTextWriter.Write( sb.ToString() );
135 sb.Length = 0;
139 theTextWriter.Flush();
142 private void CheckBuffer()
144 if ( sb.Length >= MAX_BUFFER )
145 this.Flush();
149 #endregion