40 lines
1.6 KiB
C#
40 lines
1.6 KiB
C#
using System.Text;
|
|
using Charac.Client;
|
|
|
|
namespace Charac.Server.Tests;
|
|
|
|
public sealed class TerminalMouseTrackingTests
|
|
{
|
|
[Fact]
|
|
public void MouseReportsReachTuiButNotShellAfterAlternateScreenEnds()
|
|
{
|
|
var tracking = new TerminalMouseTracking();
|
|
var report = Encoding.ASCII.GetBytes("\u001b[<35;88;8M");
|
|
|
|
Assert.Empty(tracking.FilterInput(report));
|
|
tracking.ObserveOutput(Encoding.ASCII.GetBytes("\u001b[?104"));
|
|
tracking.ObserveOutput(Encoding.ASCII.GetBytes("9h\u001b[?1003h\u001b[?1006h"));
|
|
Assert.True(tracking.InAlternateScreen);
|
|
Assert.Equal(report, tracking.FilterInput(report));
|
|
|
|
tracking.ObserveOutput(Encoding.ASCII.GetBytes("\u001b[?1049l"));
|
|
Assert.False(tracking.InAlternateScreen);
|
|
Assert.Empty(tracking.FilterInput(report));
|
|
Assert.Equal(Encoding.ASCII.GetBytes("\u001b[A"), tracking.FilterInput(Encoding.ASCII.GetBytes("\u001b[A")));
|
|
}
|
|
|
|
[Fact]
|
|
public void SplitInputPreservesKeyboardAndDropsStaleMouseReport()
|
|
{
|
|
var tracking = new TerminalMouseTracking();
|
|
Assert.Empty(tracking.FilterInput(Encoding.ASCII.GetBytes("\u001b[<35;88")));
|
|
Assert.True(tracking.HasPendingInput);
|
|
Assert.Empty(tracking.FilterInput(Encoding.ASCII.GetBytes(";8M")));
|
|
Assert.False(tracking.HasPendingInput);
|
|
|
|
Assert.Empty(tracking.FilterInput(Encoding.ASCII.GetBytes("\u001b")));
|
|
Assert.Equal(Encoding.ASCII.GetBytes("\u001b"), tracking.FlushPendingInput());
|
|
Assert.Equal(Encoding.ASCII.GetBytes("ab\u001b[A"), tracking.FilterInput(Encoding.ASCII.GetBytes("ab\u001b[A")));
|
|
}
|
|
}
|