Add a test ensuring that scrolling in the middle of a page can't start a swipe gesture
[WebKit-https.git] / LayoutTests / swipe / swipe-start-hysteresis-failures.html
1 <head>
2 <style>
3 html {
4     font-size: 32pt;
5 }
6 </style>
7 <script src="resources/swipe-test.js"></script>
8 <script>
9 function doShortSwipeGesture()
10 {
11     eventSender.mouseMoveTo(100, 100);
12
13     // Total delta of 10, 0; should not be enough to start a swipe.
14     eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
15     eventQueue.enqueueScrollEvent(1, 0, 'began');
16     eventQueue.enqueueScrollEvent(0, 0, 'changed');
17     eventQueue.enqueueScrollEvent(0, 0, 'ended');
18
19     eventQueue.callAfterEventDispatch(doDiagonalSwipeGesture);
20 }
21
22 function doDiagonalSwipeGesture()
23 {
24     // Total delta of 20, 20; this is ordinarily sufficient magnitude to start a swipe,
25     // but is too diagonal to start a swipe.
26     eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
27     eventQueue.enqueueScrollEvent(2, 2, 'began');
28     eventQueue.enqueueScrollEvent(0, 0, 'changed');
29     eventQueue.enqueueScrollEvent(0, 0, 'ended');
30
31     eventQueue.callAfterEventDispatch(doVerticalSwipeGesture);
32 }
33
34 function doVerticalSwipeGesture()
35 {
36     // Total delta of 0, 20; this is ordinarily sufficient magnitude to start a swipe,
37     // but is completely vertical, so we won't start a swipe.
38     eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
39     eventQueue.enqueueScrollEvent(0, 2, 'began');
40     eventQueue.enqueueScrollEvent(0, 0, 'changed');
41     eventQueue.enqueueScrollEvent(0, 0, 'ended');
42
43     eventQueue.callAfterEventDispatch(doHorizontalThenVerticalSwipeGesture);
44 }
45
46 function doHorizontalThenVerticalSwipeGesture()
47 {
48     // Total delta of 10, 20; this is ordinarily sufficient magnitude to start a swipe,
49     // but is too vertical, so we won't start a swipe.
50     eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
51     eventQueue.enqueueScrollEvent(1, 0, 'began');
52     eventQueue.enqueueScrollEvent(0, 2, 'changed');
53     eventQueue.enqueueScrollEvent(0, 0, 'ended');
54
55     eventQueue.callAfterEventDispatch(doRegularSwipeGesture);
56 }
57
58 function doRegularSwipeGesture()
59 {
60     // Swap in a different callback that makes sure we *do* reach didBeginSwipe.
61     testRunner.clearTestRunnerCallbacks();
62     var sawDidBeginSwipe = false;
63     testRunner.installDidBeginSwipeCallback(function () {
64         sawDidBeginSwipe = true;
65         // Need a swipe-end event to clean up.
66         eventQueue.enqueueSwipeEvent(0, 0, 'ended');
67     });
68
69     testRunner.installDidRemoveSwipeSnapshotCallback(function () {
70         shouldBe(true, sawDidBeginSwipe, "The last gesture should start a swipe, because it is sufficient magnitude and in the correct direction.")
71         testComplete();
72     });
73
74     // Total delta of 30, 10; this should start a swipe as usual.
75     eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
76     eventQueue.enqueueScrollEvent(3, 1, 'began');
77     eventQueue.enqueueScrollEvent(0, 0, 'changed');
78     eventQueue.enqueueScrollEvent(0, 0, 'ended');
79 }
80
81 function didBeginSwipeNotReachedCallback()
82 {
83     log("Failure. Should never begin a swipe, because all of the attempted swipes should fail due to the swipe-start hysteresis.");
84 }
85
86 function isFirstPage()
87 {
88     return window.location.href.indexOf("second") == -1;
89 }
90
91 window.onload = function () {
92     if (!window.eventSender || !window.testRunner) {
93         document.body.innerHTML = "This test must be run in WebKitTestRunner.";
94         return;
95     }
96
97     document.body.innerHTML = isFirstPage() ? "first" : "second";
98
99     if (isFirstPage()) {
100         initializeSwipeTest();
101
102         testRunner.installDidBeginSwipeCallback(didBeginSwipeNotReachedCallback);
103
104         testRunner.overridePreference("WebKitUsesPageCachePreferenceKey", 1);
105         testRunner.dumpAsText();
106         testRunner.waitUntilDone();
107
108         setTimeout(function () { 
109             window.location.href = window.location.href + "?second";
110         }, 0);
111         return;
112     }
113
114     doShortSwipeGesture();
115 };
116 </script>
117 </head>
118 <body>
119 </body>