b26104fe95
- add xunit regression project with virtual terminal output - cover text input overlay rendering and component checks
69 lines
2.0 KiB
C#
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()
|
|
{
|
|
}
|
|
}
|
|
}
|