Files
ttui/test/TinyTUI.Tests/Overlay/OverlayManagerTests.cs
chuan b26104fe95 feat: add tui test infrastructure
- add xunit regression project with virtual terminal output

- cover text input overlay rendering and component checks
2026-06-04 02:35:52 +08:00

69 lines
2.0 KiB
C#

using TinyTUI.Components;
using TinyTUI.Overlay;
using TinyTUI.Tests.TestInfrastructure;
using TinyTUI.Text;
namespace TinyTUI.Tests.Overlay;
public sealed class OverlayManagerTests
{
[Fact]
public void ComposeKeepsOverlayVisibleWhenBaseContentIsShorterThanTerminal()
{
var manager = new OverlayManager(new TerminalTextMeasurer());
manager.Show(new StaticComponent(["OVERLAY_TOP", "OVERLAY_MID", "OVERLAY_BOT"]));
var lines = manager.Compose(["Line 1", "Line 2", "Line 3"], new TerminalSize(20, 10));
Assert.Contains(lines, line => line.Contains("OVERLAY", StringComparison.Ordinal));
}
[Fact]
public void ComposePreservesBaseContentToRightOfShortOverlay()
{
var manager = new OverlayManager(new TerminalTextMeasurer());
manager.Show(
new StaticComponent(["OVR"]),
new OverlayOptions
{
Row = 0,
Column = 3,
Width = 3,
});
var lines = manager.Compose(["0123456789"], new TerminalSize(10, 3));
AnsiAssert.EqualVisible("012OVR6789", lines[0]);
}
[Fact]
public void ComposeIsolatesOverlaySegmentWithResets()
{
var manager = new OverlayManager(new TerminalTextMeasurer());
manager.Show(
new StaticComponent(["OVR"]),
new OverlayOptions
{
Row = 0,
Column = 5,
Width = 3,
});
var line = manager.Compose(["\e[3mXXXXXXXXXXXXXXXXXXXX\e[23m"], new TerminalSize(20, 3))[0];
Assert.Contains("\e[0m\e]8;;\aOVR\e[0m\e]8;;\a", line, StringComparison.Ordinal);
AnsiAssert.ContainsVisible("OVR", line);
}
private sealed class StaticComponent(IReadOnlyList<string> lines) : IComponent
{
/// <inheritdoc />
public IReadOnlyList<string> Render(int width) => lines;
/// <inheritdoc />
public void Invalidate()
{
}
}
}