2010-06-03 Jb Evain <jbevain@novell.com>
[mcs.git] / nunit24 / NUnitCore / core / EventListenerTextWriter.cs
blob98a1c3057a7ad1c03c6dd7c1bfbe5037bd93be0a
1 // ****************************************************************
2 // Copyright 2007, Charlie Poole
3 // This is free software licensed under the NUnit license. You may
4 // obtain a copy of the license at http://nunit.org/?p=license&r=2.4
5 // ****************************************************************
6 namespace NUnit.Core
8 using System;
9 using System.IO;
10 using System.Text;
12 public class EventListenerTextWriter : TextWriter
14 private EventListener eventListener;
15 private TestOutputType type;
17 public EventListenerTextWriter( EventListener eventListener, TestOutputType type )
19 this.eventListener = eventListener;
20 this.type = type;
22 override public void Write(char aChar)
24 this.eventListener.TestOutput( new TestOutput( aChar.ToString(), this.type ) );
27 override public void Write(string aString)
29 this.eventListener.TestOutput( new TestOutput( aString, this.type ) );
32 override public void WriteLine(string aString)
34 this.eventListener.TestOutput( new TestOutput( aString + this.NewLine, this.type ) );
37 override public System.Text.Encoding Encoding
39 get { return Encoding.Default; }
43 /// <summary>
44 /// This wrapper adds buffering to improve cross-domain performance.
45 /// </summary>
46 public class BufferedEventListenerTextWriter : TextWriter
48 private EventListener eventListener;
49 private TestOutputType type;
50 private const int MAX_BUFFER = 1024;
51 private StringBuilder sb = new StringBuilder( MAX_BUFFER );
53 public BufferedEventListenerTextWriter( EventListener eventListener, TestOutputType type )
55 this.eventListener = eventListener;
56 this.type = type;
59 public override Encoding Encoding
61 get
63 return Encoding.Default;
67 override public void Write(char ch)
69 lock( sb )
71 sb.Append( ch );
72 this.CheckBuffer();
76 override public void Write(string str)
78 lock( sb )
80 sb.Append( str );
81 this.CheckBuffer();
85 override public void WriteLine(string str)
87 lock( sb )
89 sb.Append( str );
90 sb.Append( base.NewLine );
91 this.CheckBuffer();
95 override public void Flush()
97 if ( sb.Length > 0 )
99 lock( sb )
101 TestOutput output = new TestOutput(sb.ToString(), this.type);
102 this.eventListener.TestOutput( output );
103 sb.Length = 0;
108 private void CheckBuffer()
110 if ( sb.Length >= MAX_BUFFER )
111 this.Flush();