Add a test for swipe-start hysteresis
[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     waitForEventDispatch(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     waitForEventDispatch(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     waitForEventDispatch(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     waitForEventDispatch(doRegularSwipeGesture);
56 }
57
58 function doRegularSwipeGesture()
59 {
60     // Swap in a different callback that makes sure we *do* reach didBeginSwipe.
61     testRunner.clearTestRunnerCallbacks();
62     testRunner.installDidBeginSwipeCallback(function () {
63         log("didBeginSwipe");
64
65         // Need a swipe-end event to clean up.
66         eventQueue.enqueueSwipeEvent(0, 0, 'ended');
67     });
68
69     testRunner.installDidRemoveSwipeSnapshotCallback(function () {
70         testComplete();
71     });
72
73     // Total delta of 30, 10; this should start a swipe as usual.
74     eventQueue.enqueueSwipeEvent(0, 0, 'maybegin');
75     eventQueue.enqueueScrollEvent(3, 1, 'began');
76     eventQueue.enqueueScrollEvent(0, 0, 'changed');
77     eventQueue.enqueueScrollEvent(0, 0, 'ended');
78 }
79
80 function waitForEventDispatch(callback)
81 {
82     var interval = setInterval(function () { 
83         if (!eventQueue.hasPendingEvents()) {
84             clearInterval(interval);
85             callback();
86         }
87     }, 0);
88 }
89
90 function didBeginSwipeNotReachedCallback()
91 {
92     log("Failure. Should never begin a swipe, because all of the attempted swipes should fail due to the swipe-start hysteresis.");
93 }
94
95 function isFirstPage()
96 {
97     return window.location.href.indexOf("second") == -1;
98 }
99
100 window.onload = function () {
101     if (!window.eventSender || !window.testRunner) {
102         document.body.innerHTML = "This test must be run in WebKitTestRunner.";
103         return;
104     }
105
106     document.body.innerHTML = isFirstPage() ? "first" : "second";
107
108     if (isFirstPage()) {
109         initializeLog();
110
111         testRunner.setNavigationGesturesEnabled(true);
112
113         testRunner.installDidBeginSwipeCallback(didBeginSwipeNotReachedCallback);
114
115         testRunner.overridePreference("WebKitUsesPageCachePreferenceKey", 1);
116         testRunner.dumpAsText();
117         testRunner.waitUntilDone();
118
119         setTimeout(function () { 
120             window.location.href = window.location.href + "?second";
121         }, 0);
122         return;
123     }
124
125     doShortSwipeGesture();
126 };
127 </script>
128 </head>
129 <body>
130 </body>