using XFESystem.Console; using Xunit; namespace XFESystem.Console.Tests; public sealed class TerminalTextWriterTests { [Theory] [InlineData("\n")] [InlineData("\r\n")] public void ParameterlessWriterLinesAlwaysReturnToColumnZero(string hostNewline) { var buffer = new TerminalBuffer(80, 10); using TextWriter writer = new TerminalTextWriter(buffer) { NewLine = hostNewline }; writer.Write("partial"); writer.WriteLine(); writer.WriteLine("next"); Assert.Equal("partial", buffer.GetLine(0)); Assert.Equal("next", buffer.GetLine(1)); Assert.Equal(2, buffer.CursorRow); Assert.Equal(0, buffer.CursorColumn); } [Fact] public void SpanAndInheritedWriterLineOverloadsUseTheSameCrLfOnAnLfHost() { var buffer = new TerminalBuffer(80, 20); using TextWriter writer = new TerminalTextWriter(buffer) { NewLine = "\n" }; writer.WriteLine("string"); writer.WriteLine("span".AsSpan()); writer.WriteLine(42); writer.WriteLine(true); writer.WriteLine('Z'); writer.WriteLine(new[] { 'A', 'B' }); writer.WriteLine(new[] { 'x', 'y', 'z' }, 1, 2); writer.WriteLine("format {0}", 7); var expected = new[] { "string", "span", "42", "True", "Z", "AB", "yz", "format 7" }; for (int row = 0; row < expected.Length; row++) Assert.Equal(expected[row], buffer.GetLine(row)); Assert.Equal(expected.Length, buffer.CursorRow); Assert.Equal(0, buffer.CursorColumn); } [Fact] public void RawApplicationVtLineFeedStillPreservesItsColumn() { var buffer = new TerminalBuffer(80, 10); using var writer = new TerminalTextWriter(buffer) { NewLine = "\n" }; writer.Write("ab\nc"); Assert.Equal("ab", buffer.GetLine(0)); Assert.Equal(" c", buffer.GetLine(1)); Assert.Equal(3, buffer.CursorColumn); writer.WriteLine(); Assert.Equal(2, buffer.CursorRow); Assert.Equal(0, buffer.CursorColumn); } }