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);
}
}
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);
}
}