REGRESSION (iOS 13): Tests that simulate multiple back-to-back single taps fail or...
[WebKit-https.git] / LayoutTests / editing / selection / ios / change-selection-by-tapping.html
1 <!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ignoreSynchronousMessagingTimeouts=true ] -->
2 <html>
3 <head>
4 <script src="../../../resources/js-test.js"></script>
5 <script src="../../../resources/ui-helper.js"></script>
6 <meta name=viewport content="width=device-width, initial-scale=1, user-scalable=no">
7 <style>
8 body, html {
9     width: 100%;
10     height: 100%;
11     margin: 0;
12 }
13
14 #editor {
15     width: 300px;
16     height: 320px;
17     font-size: 18px;
18 }
19 </style>
20 <script>
21 jsTestIsAsync = true;
22
23 function tapAndWaitForSelectionChange(x, y) {
24     return new Promise(resolve => {
25         const editor = document.getElementById("editor");
26         let doneCount = 0;
27         const checkDone = () => {
28             if (++doneCount != 2)
29                 return;
30
31             document.removeEventListener("selectionchange", checkDone);
32             resolve();
33         }
34         document.addEventListener("selectionchange", checkDone);
35         UIHelper.activateAt(x, y).then(checkDone);
36     });
37 }
38
39 addEventListener("load", async () => {
40     description("Verifies that rapidly tapping to change selection doesn't hang due to IPC deadlock. To verify manually, focus the editable text and tap repeatedly in different parts of the editable area to change selection; check that this does not result in sporadic 1-second IPC hangs.");
41
42     await UIHelper.activateElementAndWaitForInputSession(document.getElementById("editor"));
43     for (let i = 0; i < 3; ++i) {
44         for (const [x, y] of [[40, 40], [220, 40], [40, 240], [220, 240]])
45             await tapAndWaitForSelectionChange(x, y);
46     }
47     finishJSTest();
48 });
49 </script>
50 </head>
51 <body>
52 <p contenteditable id="editor">Here's to the crazy ones, the misfits, the rebels, the trouble makers, the round pegs in the square holes, the ones who see things differently. There not fond of rules, and they have no respect for the status quo, you can quote then, disagree with them, glorify or vilify them, about the only thing you can't do is ignore them.  Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world are the ones who do.</p>
53     <p id="description"></p>
54     <p id="console"></p>
55 </body>
56 </html>