using System; using Xunit; using System.IO; using System.Diagnostics; namespace test { [Trait("regres", "no")] public class NodeTests { [Fact] void TestNodeJsForAnsitohtml () { var procStart = new ProcessStartInfo("node", "node_modules/ansi-to-html/bin/ansi-to-html"); procStart.UseShellExecute = false; procStart.RedirectStandardInput = true; procStart.RedirectStandardOutput = true; procStart.RedirectStandardError = true; var proc = Process.Start(procStart); proc.StandardInput.WriteLine("\x001b[30mblack\x1b[37mwhite"); proc.StandardInput.Close(); while (!proc.StandardOutput.EndOfStream) { Console.Write(proc.StandardOutput.ReadToEnd()); } } [Fact] void AnsiToHtml() { var procStart = new ProcessStartInfo("ls", "-l --color=always"); procStart.UseShellExecute = false; procStart.RedirectStandardInput = false; procStart.RedirectStandardOutput = true; var proc = Process.Start(procStart); var encoded = GetStream(proc.StandardOutput); var reader = new StreamReader(encoded); var txt = reader.ReadToEnd(); Console.WriteLine(txt); } public static Stream GetStream(StreamReader reader) { var procStart = new ProcessStartInfo("node", "node_modules/ansi-to-html/bin/ansi-to-html"); procStart.UseShellExecute = false; procStart.RedirectStandardInput = true; procStart.RedirectStandardOutput = true; procStart.RedirectStandardError = true; var mem = new MemoryStream(); StreamWriter writer = new StreamWriter(mem); var proc = Process.Start(procStart); var text = reader.ReadToEnd(); proc.StandardInput.WriteLine(text); proc.StandardInput.Close(); return proc.StandardOutput.BaseStream; } } }