fix(runner): restore scrollBounds doc; cover destination clamp and screenBounds

Review fixes: move the scrollBounds doc comment back onto scrollBounds (it was
stranded above screenBounds by an insertion). Extend the clamp test to assert an
off-screen destination is clamped onto the screen and that the origin lands
exactly on the margin.
This commit is contained in:
pj committed 2026-06-10 21:19:31 +05:30
1 parent c48b13f304
commit 896cfc2cb5
2 files changed
+13 -8

No files matched your search

+2 -2
View File
@@ -719,8 +719,6 @@ func scrollEndpoints(action verifier.Action, tree *hierarchy.Tree) (fromX, fromY
return cx, cy, toX, toY
}
// scrollBounds returns the container bounds for an authored Scroll: the node
// named by On when it resolves, otherwise the root (whole-screen) bounds.
// screenBounds returns the device screen rectangle as the maximum extent across
// all elements. The hierarchy root often reports zero bounds on Android, so the
// extent (driven by full-screen containers and the navigation bar) is the
@@ -773,6 +771,8 @@ func clampGestureToSafeArea(fromX, fromY, toX, toY int, screen hierarchy.Bounds)
return fromX, fromY, toX, toY
}
// scrollBounds returns the container bounds for an authored Scroll: the node
// named by On when it resolves, otherwise the root (whole-screen) bounds.
func scrollBounds(action verifier.Action, tree *hierarchy.Tree) hierarchy.Bounds {
if tree == nil {
return hierarchy.Bounds{}
+11 -6
View File
@@ -1813,13 +1813,11 @@ func TestClampGestureToSafeArea_KeepsOriginOutOfGestureZones(t *testing.T) {
screen := hierarchy.Bounds{Left: 0, Top: 0, Right: 1080, Bottom: 2400}
// marginX = 1080/20 = 54, marginY = 2400/12 = 200.
// The real shade-opening swipe captured on device: origin y=62.
// The real shade-opening swipe captured on device: origin y=62 is pulled to
// the top margin (200); the in-range destination is untouched.
fromX, fromY, toX, toY := clampGestureToSafeArea(802, 62, 802, 447, screen)
if fromY < 200 {
t.Errorf("origin Y %d still inside the status-bar strip (need >= 200)", fromY)
}
if fromX != 802 || toX != 802 || toY != 447 {
t.Errorf("unexpected clamp of in-range coords: from=(%d,%d) to=(%d,%d)", fromX, fromY, toX, toY)
if fromX != 802 || fromY != 200 || toX != 802 || toY != 447 {
t.Errorf("origin not clamped to the safe area: from=(%d,%d) to=(%d,%d), want from=(802,200) to=(802,447)", fromX, fromY, toX, toY)
}
// Top-left corner origin pulled inside both margins.
@@ -1828,6 +1826,13 @@ func TestClampGestureToSafeArea_KeepsOriginOutOfGestureZones(t *testing.T) {
t.Errorf("corner origin not clamped to (54,200), got (%d,%d)", fromX, fromY)
}
// An off-screen destination is clamped onto the screen (the destination only
// needs to stay on screen, not inside the gesture margins).
_, _, toX, toY = clampGestureToSafeArea(540, 1200, -50, 9999, screen)
if toX != 0 || toY != 2400 {
t.Errorf("off-screen destination not clamped to screen edges: got (%d,%d), want (0,2400)", toX, toY)
}
// Unknown screen size leaves coordinates untouched.
fromX, fromY, toX, toY = clampGestureToSafeArea(802, 62, 802, 447, hierarchy.Bounds{})
if fromX != 802 || fromY != 62 || toX != 802 || toY != 447 {