From ff130db72ba642afbe16aad967dc4ca49027e868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 20 Dec 2019 13:54:48 +0000 Subject: [PATCH] Bug 981248 - Fix test_input_number_mouse_events.html to not dispatch mouse events from input events. r=masayuki The test fails with my rewrite because editor fails to dispatch one input event caused by these mouse events. The reason for this is that we schedule them from an input event, which fires from here: https://searchfox.org/mozilla-central/rev/6305f6935f496b3a302c7afcc579399a4217729c/editor/libeditor/EditorBase.cpp#965 Not how at that point we still haven't decremented mPlaceholderBatch. That means that other stuff that triggers input events from there will not dispatch events. I think that's a bit unexpected, but it is a preexisting problem, and can't happen for users because mouse events go through the event loop. Differential Revision: https://phabricator.services.mozilla.com/D57810 --HG-- extra : moz-landing-system : lando --- .../forms/test_input_number_mouse_events.html | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/dom/html/test/forms/test_input_number_mouse_events.html b/dom/html/test/forms/test_input_number_mouse_events.html index 6f7e950b1d9e..b18a3b9daa62 100644 --- a/dom/html/test/forms/test_input_number_mouse_events.html +++ b/dom/html/test/forms/test_input_number_mouse_events.html @@ -54,6 +54,7 @@ function checkInputEvent(aEvent, aDescription) { todo(aEvent instanceof InputEvent, `"input" event should be dispatched with InputEvent interface on input element whose type is number ${aDescription}`); is(aEvent.cancelable, false, `"input" event should be never cancelable on input element whose type is number ${aDescription}`); is(aEvent.bubbles, true, `"input" event should always bubble on input element whose type is number ${aDescription}`); + info(`Data: ${aEvent.data}, value: ${aEvent.target.value}`); } function test() { @@ -132,6 +133,10 @@ function runNextSpinTest() { nextTest(); } +function waitForTick() { + return new Promise(SimpleTest.executeSoon); +} + const SETTIMEOUT_DELAY = 500; var spinTests = [ @@ -140,15 +145,17 @@ var spinTests = [ function() { var inputEventCount = 0; input.value = 0; - input.addEventListener("input", function(evt) { + input.addEventListener("input", async function(evt) { ++inputEventCount; checkInputEvent(evt, "#1"); if (inputEventCount == 3) { is(input.value, "3", "Testing spin-up button"); + await waitForTick(); synthesizeMouse(input, SPIN_DOWN_X, SPIN_DOWN_Y, { type: "mousemove" }); } else if (inputEventCount == 6) { is(input.value, "0", "Testing spin direction is reversed after mouse moves from spin-up button to spin-down button"); input.removeEventListener("input", arguments.callee); + await waitForTick(); synthesizeMouse(input, SPIN_DOWN_X, SPIN_DOWN_Y, { type: "mouseup" }); runNextSpinTest(); } @@ -161,15 +168,17 @@ var spinTests = [ function() { var inputEventCount = 0; input.value = 0; - input.addEventListener("input", function(evt) { + input.addEventListener("input", async function(evt) { ++inputEventCount; checkInputEvent(evt, "#2"); if (inputEventCount == 3) { is(input.value, "-3", "Testing spin-down button"); + await waitForTick(); synthesizeMouse(input, SPIN_UP_X, SPIN_UP_Y, { type: "mousemove" }); } else if (inputEventCount == 6) { is(input.value, "0", "Testing spin direction is reversed after mouse moves from spin-down button to spin-up button"); input.removeEventListener("input", arguments.callee); + await waitForTick(); synthesizeMouse(input, SPIN_UP_X, SPIN_UP_Y, { type: "mouseup" }); runNextSpinTest(); } @@ -182,10 +191,11 @@ var spinTests = [ function() { var inputEventCount = 0; input.value = 0; - input.addEventListener("input", function(evt) { + input.addEventListener("input", async function(evt) { ++inputEventCount; checkInputEvent(evt, "#3"); if (inputEventCount == 3) { + await waitForTick(); synthesizeMouse(input, -1, -1, { type: "mousemove" }); var eventHandler = arguments.callee; setTimeout(function() {