b26104fe95
- add xunit regression project with virtual terminal output - cover text input overlay rendering and component checks
71 lines
1.7 KiB
C#
71 lines
1.7 KiB
C#
using System.Text;
|
|
using TinyTUI.Stdout;
|
|
|
|
namespace TinyTUI.Tests.TestInfrastructure;
|
|
|
|
/// <summary>
|
|
/// 捕获渲染器写出的终端序列并提供可模拟的窗口尺寸
|
|
/// </summary>
|
|
internal sealed class VirtualTerminalOutput(int columns = 80, int rows = 24) : ITerminalOutput
|
|
{
|
|
private readonly List<string> _writes = [];
|
|
|
|
/// <summary>
|
|
/// 获取当前模拟终端尺寸
|
|
/// </summary>
|
|
public TerminalSize Size { get; private set; } = new(columns, rows);
|
|
|
|
/// <summary>
|
|
/// 获取完整输出缓冲
|
|
/// </summary>
|
|
public StringBuilder Buffer { get; } = new();
|
|
|
|
/// <summary>
|
|
/// 获取每一次写入的原始片段
|
|
/// </summary>
|
|
public IReadOnlyList<string> Writes => _writes;
|
|
|
|
/// <summary>
|
|
/// 调整模拟终端尺寸
|
|
/// </summary>
|
|
public void Resize(int columns, int rows) => Size = new TerminalSize(columns, rows);
|
|
|
|
/// <summary>
|
|
/// 清空已捕获的输出
|
|
/// </summary>
|
|
public void ClearWrites()
|
|
{
|
|
_writes.Clear();
|
|
Buffer.Clear();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 判断完整输出缓冲是否包含指定序列
|
|
/// </summary>
|
|
public bool Contains(string value) => Buffer.ToString().Contains(value, StringComparison.Ordinal);
|
|
|
|
/// <inheritdoc />
|
|
public void Write(string value)
|
|
{
|
|
_writes.Add(value);
|
|
Buffer.Append(value);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void Flush()
|
|
{
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void ClearScreen() => Write("\e[2J\e[H");
|
|
|
|
/// <inheritdoc />
|
|
public void HideCursor() => Write("\e[?25l");
|
|
|
|
/// <inheritdoc />
|
|
public void ShowCursor() => Write("\e[?25h");
|
|
|
|
/// <inheritdoc />
|
|
public void MoveCursorTo(int row, int column) => Write($"\e[{row};{column}H");
|
|
}
|