test(ios): reproduce #4394 keyboard opens on right-edge tap of non-cursor thought#3
Closed
ethan-james wants to merge 1 commit into
Closed
Conversation
…p in caret test The 'Focus is prevented after clearing the cursor' test tapped the right edge with a synthetic point-tap, which never triggered iOS Safari's touch-adjustment retargeting, so the bug could not reproduce and the test always passed. Rework the test to the exact cybersemics#4394 repro on a non-cursor thought: - create "Hello", dismiss the keyboard, Cursor Back (swipe right) to null the cursor so "Hello" becomes a non-cursor thought - tap ~4px past the right edge, vertically centered, with a finger-sized contact area (width/height/pressure) The finger-sized contact triggers Safari's touch-adjustment: the touch lands on the #thought-annotation overlay (so the editable's onTouchEnd never runs to preventDefault), while the synthesized mousedown is retargeted into the editable, so focus proceeds and the virtual keyboard incorrectly opens. This test now fails on this branch, faithfully demonstrating cybersemics#4394. It will pass once focus is correctly prevented for non-cursor thoughts. cybersemics#4394 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Owner
Author
|
Superseded by cybersemics#4534 (cross-repo PR against upstream). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
cybersemics#4394
Summary
The iOS caret test 'Focus is prevented after clearing the cursor' was tapping the right edge with a synthetic point-tap. A zero-radius synthetic tap never triggers iOS Safari's touch-adjustment ("fuzzy tapping") retargeting, so the bug could never reproduce and the test always passed — it did not actually guard against cybersemics#4394.
This PR reworks the test to faithfully reproduce cybersemics#4394's exact steps on a non-cursor thought:
HelloHellobecomes a non-cursor thought (verifiedediting === nullbefore the tap)width/height/pressure)Mechanism
The finger-sized contact area triggers iOS Safari's touch-adjustment heuristic:
Because the touch events are dispatched on the annotation (not the editable), the editable's
onTouchEndnever runs topreventDefault; Safari then redirects the mouse events into the editable and focus proceeds, so the virtual keyboard incorrectly opens.Expected outcome
This test fails on this branch, demonstrating cybersemics#4394 (
isKeyboardShown()returnstruefor a non-cursor thought). It will pass once focus is correctly prevented for non-cursor thoughts.Notes
clickThought+scrollTopriming step is included: it is required for the synthetic touch to reliably win the timing race that a real finger triggers on its own. Locally reproduces the bug 3/3 with it, 0/3 without.getElementRectByScreencomputes the status-bar offset per-device, so the tap coordinates should map correctly on BrowserStack hardware; the BrowserStack CI run is the definitive check that the bug reproduces there as it does on the local simulator.