Build Charac server and client with OIDC, SSH sessions, and packages
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

This commit is contained in:
Nitload
2026-10-05 14:02:50 +08:00
parent 4bc3552167
commit 0ea679932e
185 changed files with 10653 additions and 772 deletions
@@ -0,0 +1,39 @@
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")));
}
}