feat: add configurable operator appearance and layout

This commit is contained in:
2026-07-23 11:14:10 +09:00
parent cf117de144
commit f43483533a
34 changed files with 5942 additions and 740 deletions

View File

@@ -73,6 +73,107 @@ public sealed class LegacyPackageInputSmokeContractTests
}
}
[Fact]
public void PhysicalPointerCoordinatesSupportDpiAwareAndVirtualizedWindowsHosts()
{
var geometry = Slice(
Runner,
"private static ClientGeometry ReadAndAssertClientGeometry(",
"private static void AssertStableClientGeometry(");
foreach (var token in new[]
{
"bool deviceMatches =",
"bool logicalMatches =",
"if (!deviceMatches && !logicalMatches)",
"double cssScaleX = client.Right / viewportCssWidth;",
"double cssScaleY = client.Bottom / viewportCssHeight;",
"CssScaleX = cssScaleX",
"CssScaleY = cssScaleY"
})
{
Assert.Contains(token, geometry, StringComparison.Ordinal);
}
var conversion = Slice(
Runner,
"private static Point CssPointToScreen(",
"private static void SendMousePath(");
Assert.Contains("cssX * geometry.CssScaleX", conversion,
StringComparison.Ordinal);
Assert.Contains("cssY * geometry.CssScaleY", conversion,
StringComparison.Ordinal);
Assert.DoesNotContain("cssX * devicePixelRatio", conversion,
StringComparison.Ordinal);
Assert.DoesNotContain("cssY * devicePixelRatio", conversion,
StringComparison.Ordinal);
var drag = Slice(
Runner,
"public static void SendRowHeaderDragAfterThenHome(",
"public static void SendShiftClickRangeThenDeleteAndRestore(");
Assert.Contains("12.0 * baseline.CssScaleX", drag,
StringComparison.Ordinal);
Assert.DoesNotContain("12.0 * devicePixelRatio", drag,
StringComparison.Ordinal);
}
[Fact]
public void WorkspaceSplitterUsesThePointerPipelinePersistsAndRestoresItsWidth()
{
var splitter = Slice(
Harness,
"function assertSplitterResizeResult(",
"async function ensureWorkspace(");
AssertInOrder(
splitter,
"await pressMouse(start, 0);",
"await moveMouse(target, 0, 1);",
"await releaseMouse(target, 0);",
"async function exerciseWorkspaceSplitter(baseline)",
"dragWorkspaceSplitterToPercent(",
"pressKey(keyboardKey, \"resize workspace splitter from keyboard\")",
"const restoredLayout = await dragWorkspaceSplitterToPercent(",
"assertFixedSchedule(baseline, restoredLayout",
"storedPercent: Number.parseFloat(restoredLayout.storedScheduleWidth)");
Assert.Contains("splitterState?.valueNow", splitter,
StringComparison.Ordinal);
Assert.Matches(
@"Math\.abs\(layout\.splitterState\.valueNow -\s*" +
@"Number\(layout\.scheduleWidthPercent\.toFixed\(1\)\)\) > 0\.001",
splitter);
Assert.DoesNotMatch(
@"splitterState\??\.valueNow\s*!==\s*" +
@"Math\.round\(layout\.scheduleWidthPercent\)",
splitter);
Assert.Contains("outboundMessages.length", splitter,
StringComparison.Ordinal);
Assert.DoesNotContain("Input.dispatchMouseEvent", splitter,
StringComparison.Ordinal);
Assert.DoesNotContain(".click(", splitter, StringComparison.Ordinal);
Assert.DoesNotContain("localStorage.setItem", splitter,
StringComparison.Ordinal);
Assert.DoesNotContain("style.setProperty", splitter,
StringComparison.Ordinal);
Assert.Contains(
"ArrowLeft: { key: \"ArrowLeft\", code: \"ArrowLeft\", virtualKey: 37 }",
Harness,
StringComparison.Ordinal);
Assert.Contains(
"ArrowRight: { key: \"ArrowRight\", code: \"ArrowRight\", virtualKey: 39 }",
Harness,
StringComparison.Ordinal);
var sequence = Slice(
Harness,
"async function verifyWorkspaceNavigationAndLayout(preflight)",
"async function playlistDropGeometry(label)");
AssertInOrder(
sequence,
"const splitterResize = await exerciseWorkspaceSplitter(baseline);",
"collapse workspace menu",
"splitterResize,");
}
[Fact]
public void DryRunFinalSealKeepsWindowsDragOrderAndRequiresTheSafeTailAppend()
{
@@ -846,6 +947,11 @@ public sealed class LegacyPackageInputSmokeContractTests
Assert.Contains("[IO.Compression.ZipFile]::OpenRead($msix)", guard,
StringComparison.Ordinal);
Assert.Contains("'Web/app.js'", guard, StringComparison.Ordinal);
Assert.Contains("'Web/index.html'", guard, StringComparison.Ordinal);
Assert.Contains("'Web/playout-ui.js'", guard, StringComparison.Ordinal);
Assert.Contains("'Web/styles.css'", guard, StringComparison.Ordinal);
Assert.Contains("'Web/workspace-navigation.js'", guard,
StringComparison.Ordinal);
Assert.Contains("Get-StreamSha256Hex $entryStream", guard,
StringComparison.Ordinal);
Assert.Contains("registered Debug AppX is stale", guard,