@@ -38,6 +38,32 @@ type FactForDESKTOPAttribute() =
38
38
do base .Skip <- " NETCOREAPP is not supported runtime for this kind of test, it is intended for DESKTOP only"
39
39
#endif
40
40
41
+ module Console =
42
+ type ThreadLocalTextWriter () =
43
+ inherit TextWriter()
44
+ static let threadLocalWriter = new ThreadLocal< TextWriter>( fun () -> new StringWriter() :> TextWriter )
45
+ override _.Encoding = threadLocalWriter.Value.Encoding
46
+ override _.Write ( value : char ) = threadLocalWriter.Value.Write( value)
47
+ override _.Write ( value : string ) = threadLocalWriter.Value.Write( value)
48
+ override _.WriteLine ( value : string ) = threadLocalWriter.Value.WriteLine( value)
49
+ member _.Reset () = threadLocalWriter.Value <- new StringWriter()
50
+ member _.Set writer = threadLocalWriter.Value <- writer
51
+ member _.GetText () = threadLocalWriter.Value.ToString()
52
+
53
+ let private out = new ThreadLocalTextWriter()
54
+ let private err = new ThreadLocalTextWriter()
55
+
56
+ let installWriters () =
57
+ out.Reset()
58
+ err.Reset()
59
+ Console.SetOut out
60
+ Console.SetError err
61
+
62
+ let getOutputs () = out.GetText(), err.GetText()
63
+
64
+ let setOut writer = out.Set writer
65
+
66
+ let setError writer = err.Set writer
41
67
42
68
// This file mimics how Roslyn handles their compilation references for compilation testing
43
69
module Utilities =
@@ -53,17 +79,6 @@ module Utilities =
53
79
override _.Read () =
54
80
if queue.Count > 0 then queue.Dequeue() |> int else - 1
55
81
56
- type RedirectConsoleInput () =
57
- let oldStdIn = Console.In
58
- let newStdIn = new CapturedTextReader()
59
- do Console.SetIn( newStdIn)
60
- member _.ProvideInput ( text : string ) =
61
- newStdIn.ProvideInput( text)
62
- interface IDisposable with
63
- member _.Dispose () =
64
- Console.SetIn( oldStdIn)
65
- newStdIn.Dispose()
66
-
67
82
type EventedTextWriter () =
68
83
inherit TextWriter()
69
84
let sb = StringBuilder()
@@ -90,8 +105,8 @@ module Utilities =
90
105
91
106
do newStdOut.LineWritten.Add outputProduced.Trigger
92
107
do newStdErr.LineWritten.Add errorProduced.Trigger
93
- do Console.SetOut ( newStdOut)
94
- do Console.SetError ( newStdErr)
108
+ do Console.setOut newStdOut
109
+ do Console.setError newStdErr
95
110
96
111
member _.OutputProduced = outputProduced.Publish
97
112
0 commit comments