1 // ***********************************************************************
2 // Copyright (c) 2014 Charlie Poole
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 // ***********************************************************************
25 #define NUNIT_FRAMEWORK
29 #if !SILVERLIGHT && !NETCF && !PORTABLE
32 //using System.Runtime.Remoting.Messaging;
34 namespace NUnit.Framework.Internal.Execution
37 /// The TextCapture class intercepts console output and writes it
38 /// to the current execution context, if one is present on the thread.
39 /// If no execution context is found, the output is written to a
40 /// default destination, normally the original destination of the
41 /// intercepted output.
43 public class TextCapture : TextWriter
45 private TextWriter _defaultWriter;
48 /// Construct a TextCapture object
50 /// <param name="defaultWriter">The default destination for non-intercepted output</param>
51 public TextCapture(TextWriter defaultWriter)
53 _defaultWriter = defaultWriter;
57 /// Gets the Encoding in use by this TextWriter
59 public override System.Text.Encoding Encoding
61 get { return _defaultWriter.Encoding; }
65 /// Writes a single character
67 /// <param name="value">The char to write</param>
68 public override void Write(char value)
70 var context = TestExecutionContext.GetTestExecutionContext();
72 if (context != null && context.CurrentResult != null)
73 context.CurrentResult.OutWriter.Write(value);
75 _defaultWriter.Write(value);
81 /// <param name="value">The string to write</param>
82 public override void Write(string value)
84 var context = TestExecutionContext.GetTestExecutionContext();
86 if (context != null && context.CurrentResult != null)
87 context.CurrentResult.OutWriter.Write(value);
89 _defaultWriter.Write(value);
93 /// Writes a string followed by a line terminator
95 /// <param name="value">The string to write</param>
96 public override void WriteLine(string value)
98 var context = TestExecutionContext.GetTestExecutionContext();
100 if (context != null && context.CurrentResult != null)
101 context.CurrentResult.OutWriter.WriteLine(value);
103 _defaultWriter.WriteLine(value);