public void WithOpenFile_Writing() { var host = new LispHost(); using (var outputFile = new TemporaryFile(createFile: false)) { var result = host.Eval($@" (with-open-file (file-stream ""{outputFile.FilePath.Replace("\\", "\\\\")}"" :direction :output) (format file-stream ""wrote: ~S~%"" ""just-a-string"") (format file-stream ""wrote: ~S~%"" '(+ 2 3)) ) "); Assert.IsNotType <LispError>(result.LastResult); var actual = NormalizeNewlines(File.ReadAllText(outputFile.FilePath)); Assert.Equal("wrote: \"just-a-string\"\nwrote: (+ 2 3)\n", actual); Assert.Null(host.GetValue("FILE-STREAM")); } }
public void DribbleLogging() { var output = new StringWriter(); var repl = new LispRepl(output: output); using (var tempFile = new TemporaryFile(createFile: false)) { var result = repl.Eval($@" (+ 1 1) ; this shouldn't be in the log (dribble ""{tempFile.FilePath.Replace("\\", "\\\\")}"") ; start recording (+ 3 3) ; this should be in the log (dribble) ; stop recording (+ 5 5) ; this shouldn't be in the log "); var consoleOutput = NormalizeNewlines(output.ToString()).Trim(); var expectedConsoleOutput = NormalizeNewlines($@" Now recording in file {tempFile.FilePath} Finished recording in file {tempFile.FilePath} ").Trim(); Assert.Equal(expectedConsoleOutput, consoleOutput); var logContents = NormalizeNewlines(File.ReadAllText(tempFile.FilePath).Trim()); // trim non-deterministic time stamp logContents = Regex.Replace(logContents, ";Recording started at .*$", ";Recording started at <TIME-STAMP>", RegexOptions.Multiline); var expectedLogContents = NormalizeNewlines($@" ;Recording in {tempFile.FilePath} ;Recording started at <TIME-STAMP> > (+ 3 3) 6 > (DRIBBLE) ".Trim()); Assert.Equal(expectedLogContents, logContents); } }