feat: add configurable operator appearance and layout
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user