1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
// ****************************************************************
// Copyright 2007, Charlie Poole
// This is free software licensed under the NUnit license. You may
// obtain a copy of the license at http://nunit.org/?p=license&r=2.4
// ****************************************************************
namespace NUnit.Core
{
using System;
using System.IO;
using System.Text;
public class EventListenerTextWriter : TextWriter
{
private EventListener eventListener;
private TestOutputType type;
public EventListenerTextWriter( EventListener eventListener, TestOutputType type )
{
this.eventListener = eventListener;
this.type = type;
}
override public void Write(char aChar)
{
this.eventListener.TestOutput( new TestOutput( aChar.ToString(), this.type ) );
}
override public void Write(string aString)
{
this.eventListener.TestOutput( new TestOutput( aString, this.type ) );
}
override public void WriteLine(string aString)
{
this.eventListener.TestOutput( new TestOutput( aString + this.NewLine, this.type ) );
}
override public System.Text.Encoding Encoding
{
get { return Encoding.Default; }
}
}
/// <summary>
/// This wrapper adds buffering to improve cross-domain performance.
/// </summary>
public class BufferedEventListenerTextWriter : TextWriter
{
private EventListener eventListener;
private TestOutputType type;
private const int MAX_BUFFER = 1024;
private StringBuilder sb = new StringBuilder( MAX_BUFFER );
public BufferedEventListenerTextWriter( EventListener eventListener, TestOutputType type )
{
this.eventListener = eventListener;
this.type = type;
}
public override Encoding Encoding
{
get
{
return Encoding.Default;
}
}
override public void Write(char ch)
{
lock( sb )
{
sb.Append( ch );
this.CheckBuffer();
}
}
override public void Write(string str)
{
lock( sb )
{
sb.Append( str );
this.CheckBuffer();
}
}
override public void WriteLine(string str)
{
lock( sb )
{
sb.Append( str );
sb.Append( base.NewLine );
this.CheckBuffer();
}
}
override public void Flush()
{
if ( sb.Length > 0 )
{
lock( sb )
{
TestOutput output = new TestOutput(sb.ToString(), this.type);
this.eventListener.TestOutput( output );
sb.Length = 0;
}
}
}
private void CheckBuffer()
{
if ( sb.Length >= MAX_BUFFER )
this.Flush();
}
}
}
|