Simulate user inputs in css/css-overscroll-behavior/overscroll-behavior.html
Use testdriver Action API to simulate wheel scroll actions in
css/css-overscroll-behavior/overscroll-behavior.html.
Bug: 1145677
Change-Id: I0e746a34aa741a16ceaca99af76497efca38829a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2561106
Commit-Queue: Lan Wei <lanwei@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Reviewed-by: Lan Wei <lanwei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#848428}
diff --git a/css/css-overscroll-behavior/overscroll-behavior-manual.html b/css/css-overscroll-behavior/overscroll-behavior.html
similarity index 78%
rename from css/css-overscroll-behavior/overscroll-behavior-manual.html
rename to css/css-overscroll-behavior/overscroll-behavior.html
index 97f5298..f018d5c 100644
--- a/css/css-overscroll-behavior/overscroll-behavior-manual.html
+++ b/css/css-overscroll-behavior/overscroll-behavior.html
@@ -1,6 +1,10 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="/css/css-scroll-snap/support/common.js"></script>
<link rel="help" href="https://drafts.csswg.org/css-overscroll-behavior">
<style>
@@ -57,11 +61,22 @@
const container = document.getElementById('container');
const non_scrollable = document.getElementById('non_scrollable');
const root = document.getElementById('root');
+const btnDone = document.getElementById('btnDone');
var test = async_test("overscroll-behavior prevents scroll-propagation in the area and direction as specified");
var instruction1 = document.getElementById("i1");
var instruction2 = document.getElementById("i2");
var instruction3 = document.getElementById("i3");
var instruction4 = document.getElementById("i4");
+var actions_promise;
+
+scrollTop = () => container.scrollTop;
+scrollLeft = () => container.scrollLeft;
+
+function smoothScrollByXY(xPosition, yPosition, xScrollOffset, yScrollOffset) {
+ return new test_driver.Actions()
+ .scroll(xPosition, yPosition, xScrollOffset, yScrollOffset)
+ .send();
+}
function setUpForRoot(offset) {
root.scrollTop = offset;
@@ -137,7 +152,9 @@
assert_equals(root.scrollLeft, 0);
assert_equals(root.scrollTop, 0);
}, "overscroll-behavior on non-scrollable area should not affect scroll propagation.");
- test.done();
+ actions_promise.then( () => {
+ test.done();
+ });
}
var verifyAndSetupForNext = [
@@ -147,7 +164,7 @@
verify_inner_allowed_and_set_nonscrollable_allows_propagation,
verify_non_scrollable_allows_propagation];
-on_event(document.getElementById("btnDone"), "click", function() {
+on_event(btnDone, "click", function() {
if (current_test < verifyAndSetupForNext.length)
verifyAndSetupForNext[current_test++]();
});
@@ -155,4 +172,27 @@
var current_test = 0;
verifyAndSetupForNext[current_test++]();
+// Inject scroll actions.
+const test_cases = [
+ { x: 200, y: 500, dx: -200, dy: -200 },
+ { x: 200, y: 500, dx: -200, dy: -200 },
+ { x: 200, y: 500, dx: -200, dy: -200 },
+ { x: 200, y: 100, dx: -200, dy: -200 },
+];
+
+actions_promise = new Promise( (resolve) => {resolve();} );
+for (let action of test_cases) {
+ actions_promise = actions_promise.then(() => {
+ return smoothScrollByXY(action.x, action.y, 0, action.dy);
+ }).then(() => {
+ return waitForAnimationEnd(scrollTop);
+ }).then(() => {
+ return smoothScrollByXY(action.x, action.y, action.dx, 0);
+ }).then(() => {
+ return waitForAnimationEnd(scrollLeft);
+ }).then(() => {
+ return test_driver.click(btnDone);
+ });
+}
+
</script>