Files
WorkspaceAccessHost/tests/WorkspaceAccessServer.Tests/TerminalMouseTrackingTests.cs
T
Nitload 0ea679932e
Verify / verify (ubuntu-latest, linux-bionic-arm64) (push) Canceled after 0s
Verify / verify (ubuntu-latest, linux-x64) (push) Canceled after 0s
Verify / verify (windows-latest, win-x64) (push) Canceled after 0s
Verify / postgres (push) Canceled after 0s
Build Charac server and client with OIDC, SSH sessions, and packages
2026-10-05 14:02:50 +08:00

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