Commit 16520fdf authored by Lan Wei's avatar Lan Wei Committed by Commit Bot

Use promise in wpt tests to end the tests to avoid memory leak

When we add default tick duration of two-frame time, we see some tests
memory leak which may end the tests when the page is still active, so
I add promise to each tests, once the actions are all finished, we will
call the test end in the promise callback.

Bug: 606367
Change-Id: I679e7b066087b1a6ba68f79fccf9d5432e1f873c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1774713Reviewed-by: default avatarNavid Zolghadr <nzolghadr@chromium.org>
Commit-Queue: Lan Wei <lanwei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#692172}
parent b439c06c
...@@ -31,17 +31,22 @@ ...@@ -31,17 +31,22 @@
var test_pointerEvent = setup_pointerevent_test("pointerevent boundary events in capturing", ALL_POINTERS); var test_pointerEvent = setup_pointerevent_test("pointerevent boundary events in capturing", ALL_POINTERS);
var target = document.getElementById("target0"); var target = document.getElementById("target0");
var listener = document.getElementById("listener"); var listener = document.getElementById("listener");
var actions_promise;
eventList.forEach(function(eventName) { eventList.forEach(function(eventName) {
on_event(target, eventName, function (event) { on_event(target, eventName, function (event) {
if (phase == PhaseEnum.WaitingForDown) { if (phase == PhaseEnum.WaitingForDown) {
if (eventName == 'pointerdown') { if (eventName == 'pointerdown') {
listener.setPointerCapture(event.pointerId); listener.setPointerCapture(event.pointerId);
phase = PhaseEnum.WaitingForFirstMove; phase = PhaseEnum.WaitingForFirstMove;
} }
} else if (phase == PhaseEnum.WaitingForUp) { } else if (phase == PhaseEnum.WaitingForUp) {
if (event.type == 'pointerup') if (event.type == 'pointerup') {
test_pointerEvent.done(); // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerEvent.done();
});
}
} else { } else {
eventsRecieved.push(event.type + '@target'); eventsRecieved.push(event.type + '@target');
if (phase == PhaseEnum.WaitingForSecondMove && event.type == 'pointermove') { if (phase == PhaseEnum.WaitingForSecondMove && event.type == 'pointermove') {
...@@ -49,7 +54,7 @@ ...@@ -49,7 +54,7 @@
checkPointerEventType(event); checkPointerEventType(event);
assert_array_equals(eventsRecieved, ['lostpointercapture@listener', 'pointerout@listener', 'pointerleave@listener', 'pointerover@target', 'pointerenter@target', 'pointermove@target'], assert_array_equals(eventsRecieved, ['lostpointercapture@listener', 'pointerout@listener', 'pointerleave@listener', 'pointerover@target', 'pointerenter@target', 'pointermove@target'],
'lostpointercapture and pointerout/leave should be dispatched to the capturing target and pointerover/enter should be dispatched to the hit-test element before the first pointermove event after releasing pointer capture'); 'lostpointercapture and pointerout/leave should be dispatched to the capturing target and pointerover/enter should be dispatched to the hit-test element before the first pointermove event after releasing pointer capture');
}, expectedPointerType + " pointer events boundary events when releasing capture"); }, expectedPointerType + " pointer events boundary events when releasing capture");
phase = PhaseEnum.WaitingForUp; phase = PhaseEnum.WaitingForUp;
} }
} }
...@@ -72,7 +77,7 @@ ...@@ -72,7 +77,7 @@
}); });
// Inject pointer inputs. // Inject pointer inputs.
pointerDragInTarget('mouse', target0, 'right').then(function() { actions_promise = pointerDragInTarget('mouse', target0, 'right').then(function() {
return pointerDragInTarget('touch', target0, 'right'); return pointerDragInTarget('touch', target0, 'right');
}).then(function() { }).then(function() {
return pointerDragInTarget('pen', target0, 'right'); return pointerDragInTarget('pen', target0, 'right');
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
var grey = document.getElementById('grey'); var grey = document.getElementById('grey');
var blue = document.getElementById('blue'); var blue = document.getElementById('blue');
var green = document.getElementById('green'); var green = document.getElementById('green');
var actions_promise;
['gotpointercapture', 'lostpointercapture', 'pointerdown', 'pointerup', 'click'].forEach(function(eventName) { ['gotpointercapture', 'lostpointercapture', 'pointerdown', 'pointerup', 'click'].forEach(function(eventName) {
[grey, blue, green].forEach(function(target) { [grey, blue, green].forEach(function(target) {
...@@ -75,7 +76,10 @@ ...@@ -75,7 +76,10 @@
test_pointerEvent.step(function() { test_pointerEvent.step(function() {
assert_equals(receivedEvents.join(','), 'pointerdown@blue,gotpointercapture@blue,pointerup@blue,click@blue,lostpointercapture@blue', 'An element should only receive click when it is the first common ancestor of pointerdown and pointerup targets'); assert_equals(receivedEvents.join(','), 'pointerdown@blue,gotpointercapture@blue,pointerup@blue,click@blue,lostpointercapture@blue', 'An element should only receive click when it is the first common ancestor of pointerdown and pointerup targets');
}); });
test_pointerEvent.done(); // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerEvent.done();
});
} }
} }
if (event.type == 'pointerdown' && (target == blue || target == green)) { if (event.type == 'pointerdown' && (target == blue || target == green)) {
...@@ -88,9 +92,7 @@ ...@@ -88,9 +92,7 @@
}); });
// Inject mouse inputs. // Inject mouse inputs.
var green = document.getElementById('green'); var actions_promise = new test_driver.Actions()
var blue = document.getElementById('blue');
new test_driver.Actions()
.pointerMove(0, 0, {origin: green}) .pointerMove(0, 0, {origin: green})
.pointerDown() .pointerDown()
.pointerUp() .pointerUp()
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
function run() { function run() {
var test_pointerEvent = setup_pointerevent_test("pointerevent attributes", ALL_POINTERS); var test_pointerEvent = setup_pointerevent_test("pointerevent attributes", ALL_POINTERS);
var target = document.getElementById("target0"); var target = document.getElementById("target0");
var actions_promise;
eventList.forEach(function(eventName) { eventList.forEach(function(eventName) {
on_event(target, eventName, function (event) { on_event(target, eventName, function (event) {
...@@ -29,7 +30,10 @@ ...@@ -29,7 +30,10 @@
detected_pointertypes[event.pointerType] = true; detected_pointertypes[event.pointerType] = true;
if (Object.keys(detected_eventTypes).length == eventList.length) { if (Object.keys(detected_eventTypes).length == eventList.length) {
test_pointerEvent.done(); // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerEvent.done();
});
} }
}); });
}); });
...@@ -38,7 +42,7 @@ ...@@ -38,7 +42,7 @@
}); });
// Inject touch inputs. // Inject touch inputs.
clickInTarget("mouse", target).then(function() { actions_promise = clickInTarget("mouse", target).then(function() {
return new test_driver.Actions() return new test_driver.Actions()
.addPointer("mousePointer1", "mouse") .addPointer("mousePointer1", "mouse")
.pointerMove(0, 0) .pointerMove(0, 0)
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
function run() { function run() {
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var target1 = document.getElementById("target1"); var target1 = document.getElementById("target1");
var actions_promise;
on_event(target0, "pointerdown", function (e) { on_event(target0, "pointerdown", function (e) {
detected_pointertypes[e.pointerType] = true; detected_pointertypes[e.pointerType] = true;
...@@ -103,11 +104,14 @@ ...@@ -103,11 +104,14 @@
assert_equals(target1.hasPointerCapture(e.pointerId), false, assert_equals(target1.hasPointerCapture(e.pointerId), false,
"pointerup target1.hasPointerCapture should be false"); "pointerup target1.hasPointerCapture should be false");
}); });
test_pointerEvent.done(); // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerEvent.done();
});
}); });
// Inject mouse inputs. // Inject mouse inputs.
new test_driver.Actions() actions_promise = new test_driver.Actions()
.pointerMove(0, 0, {origin: target0}) .pointerMove(0, 0, {origin: target0})
.pointerDown() .pointerDown()
.pointerMove(0, 10, {origin: target0}) .pointerMove(0, 10, {origin: target0})
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
function run() { function run() {
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var parent0 = document.getElementById("parent0"); var parent0 = document.getElementById("parent0");
var actions_promise;
on_event(target0, "pointerenter", function (event) { on_event(target0, "pointerenter", function (event) {
pointerenter_event = event; pointerenter_event = event;
...@@ -41,7 +42,10 @@ ...@@ -41,7 +42,10 @@
test_pointerEvent.step(function () { test_pointerEvent.step(function () {
assert_not_equals(pointerenter_event, null, "pointerout event was never received: "); assert_not_equals(pointerenter_event, null, "pointerout event was never received: ");
}); });
test_pointerEvent.done(); // complete test // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerEvent.done();
});
}); });
// parent // parent
...@@ -53,7 +57,7 @@ ...@@ -53,7 +57,7 @@
}); });
// Inject mouse inputs. // Inject mouse inputs.
new test_driver.Actions() actions_promise = new test_driver.Actions()
.pointerMove(0, 0, {origin: target0}) .pointerMove(0, 0, {origin: target0})
.pointerMove(-10, -10, {origin: target0}) .pointerMove(-10, -10, {origin: target0})
.pointerMove(-20, -20, {origin: target0}) .pointerMove(-20, -20, {origin: target0})
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
<div style="background:purple; height: 35px; width: 90%; position: absolute"></div> <div style="background:purple; height: 35px; width: 90%; position: absolute"></div>
</div> </div>
<script> <script>
var eventTested = false;
var detected_pointertypes = {}; var detected_pointertypes = {};
add_completion_callback(showPointerTypes); add_completion_callback(showPointerTypes);
...@@ -31,6 +30,7 @@ ...@@ -31,6 +30,7 @@
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var target1 = document.querySelector("#target0 > div"); var target1 = document.querySelector("#target0 > div");
var test_pointerleave = async_test("pointerleave event received"); var test_pointerleave = async_test("pointerleave event received");
var actions_promise;
on_event(target0, "pointerover", function(event) { on_event(target0, "pointerover", function(event) {
detected_pointertypes[ event.pointerType ] = true; detected_pointertypes[ event.pointerType ] = true;
...@@ -39,14 +39,14 @@ ...@@ -39,14 +39,14 @@
// When a pointing device is moved off of the hit test boundaries of an element and all of its descendants, the pointerleave event must be dispatched. // When a pointing device is moved off of the hit test boundaries of an element and all of its descendants, the pointerleave event must be dispatched.
// TA: 9.1 // TA: 9.1
on_event(target0, "pointerleave", function (event) { on_event(target0, "pointerleave", function (event) {
if (eventTested == false) { // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerleave.done(); test_pointerleave.done();
eventTested = true; });
}
}); });
// Inject mouse inputs. // Inject mouse inputs.
new test_driver.Actions() actions_promise = new test_driver.Actions()
.pointerMove(0, 0, {origin: target0}) .pointerMove(0, 0, {origin: target0})
.pointerMove(0, 0, {origin: target1}) .pointerMove(0, 0, {origin: target1})
.pointerMove(0, 0) .pointerMove(0, 0)
......
...@@ -18,26 +18,26 @@ ...@@ -18,26 +18,26 @@
<h4>Test Description: This test checks if pointermove event triggers. Move your mouse over the black rectangle or slide it if you are using touchscreen.</h4> <h4>Test Description: This test checks if pointermove event triggers. Move your mouse over the black rectangle or slide it if you are using touchscreen.</h4>
<div id="target0" style="background:black"></div> <div id="target0" style="background:black"></div>
<script> <script>
var eventTested = false;
var detected_pointertypes = {}; var detected_pointertypes = {};
var test_pointermove = async_test("pointermove event received"); var test_pointermove = async_test("pointermove event received");
add_completion_callback(showPointerTypes); add_completion_callback(showPointerTypes);
function run() { function run() {
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var actions_promise;
// When a pointer changes coordinates, the pointermove event must be dispatched. // When a pointer changes coordinates, the pointermove event must be dispatched.
// TA: 5.3 // TA: 5.3
on_event(target0, "pointermove", function (event) { on_event(target0, "pointermove", function (event) {
detected_pointertypes[event.pointerType] = true; detected_pointertypes[event.pointerType] = true;
if (eventTested == false) { // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointermove.done(); test_pointermove.done();
eventTested = true; });
}
}); });
// Inject the inputs to run this test. // Inject the inputs to run this test.
new test_driver.Actions().pointerMove(0, 0, {origin: target0}).send(); actions_promise = new test_driver.Actions().pointerMove(0, 0, {origin: target0}).send();
} }
</script> </script>
<h1>Pointer Events pointermove Tests</h1> <h1>Pointer Events pointermove Tests</h1>
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
function run() { function run() {
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var actions_promise;
on_event(target0, "pointermove", function (event) { on_event(target0, "pointermove", function (event) {
if (pointerdown_event != null) { if (pointerdown_event != null) {
...@@ -47,11 +48,14 @@ ...@@ -47,11 +48,14 @@
test_pointerEvent.step(function () { test_pointerEvent.step(function () {
assert_not_equals(pointermove_event, null, "pointermove event was never received: "); assert_not_equals(pointermove_event, null, "pointermove event was never received: ");
}); });
test_pointerEvent.done(); // complete test // Make sure the test finishes after all the input actions are completed.
actions_promise.then( () => {
test_pointerEvent.done();
});
}); });
// Dispatch a mouse drag in target0. // Dispatch a mouse drag in target0.
new test_driver.Actions() actions_promise = new test_driver.Actions()
.pointerMove(0, 0, {origin: target0}) .pointerMove(0, 0, {origin: target0})
.pointerDown() .pointerDown()
.pointerMove(3, 3, {origin: target0}) .pointerMove(3, 3, {origin: target0})
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
</h4> </h4>
<div id="target0" style="background:black"></div> <div id="target0" style="background:black"></div>
<script> <script>
var eventTested = false;
var detected_pointertypes = {}; var detected_pointertypes = {};
var test_pointermove = async_test("pointermove events received for button state changes"); var test_pointermove = async_test("pointermove events received for button state changes");
add_completion_callback(showPointerTypes); add_completion_callback(showPointerTypes);
...@@ -36,6 +35,7 @@ ...@@ -36,6 +35,7 @@
function run() { function run() {
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var actions_promise;
// When a pointer changes button state and the circumstances produce no other pointer event, the pointermove event must be dispatched. // When a pointer changes button state and the circumstances produce no other pointer event, the pointermove event must be dispatched.
// 5.2.6 // 5.2.6
...@@ -64,13 +64,15 @@ ...@@ -64,13 +64,15 @@
detected_pointertypes[event.pointerType] = true; detected_pointertypes[event.pointerType] = true;
test_pointermove.step(function() {assert_true(step === 3, "The pointerup event must be triggered after pressing and releasing the second button.");}); test_pointermove.step(function() {assert_true(step === 3, "The pointerup event must be triggered after pressing and releasing the second button.");});
test_pointermove.step(function() {assert_true(event.buttons === 0, "The pointerup event must be triggered by releasing the last pressed button.");}); test_pointermove.step(function() {assert_true(event.buttons === 0, "The pointerup event must be triggered by releasing the last pressed button.");});
test_pointermove.done(); // Make sure the test finishes after all the input actions are completed.
eventTested = true; actions_promise.then( () => {
test_pointermove.done();
});
}); });
// Click on both left and middle buttons. // Click on both left and middle buttons.
var actions = new test_driver.Actions(); var actions = new test_driver.Actions();
actions.pointerMove(0, 0, {origin: target0, button: actions.ButtonType.LEFT}) actions_promise = actions.pointerMove(0, 0, {origin: target0, button: actions.ButtonType.LEFT})
.pointerDown({button: actions.ButtonType.LEFT}) .pointerDown({button: actions.ButtonType.LEFT})
.pointerDown({button: actions.ButtonType.MIDDLE}) .pointerDown({button: actions.ButtonType.MIDDLE})
.pointerUp({button: actions.ButtonType.MIDDLE}) .pointerUp({button: actions.ButtonType.MIDDLE})
......
...@@ -24,22 +24,22 @@ ...@@ -24,22 +24,22 @@
// will fail unless the async_test is created with the var name "test_pointerEvent". // will fail unless the async_test is created with the var name "test_pointerEvent".
add_completion_callback(showPointerTypes); add_completion_callback(showPointerTypes);
var eventTested = false;
var isPointerupReceived = false; var isPointerupReceived = false;
var detected_pointertypes = {}; var detected_pointertypes = {};
function run() { function run() {
var target0 = document.getElementById("target0"); var target0 = document.getElementById("target0");
var actions_promise;
// When a pen stylus leaves the hover range detectable by the digitizer the pointerout event must be dispatched. // When a pen stylus leaves the hover range detectable by the digitizer the pointerout event must be dispatched.
// TA: 7.2 // TA: 7.2
on_event(target0, "pointerout", function (event) { on_event(target0, "pointerout", function (event) {
detected_pointertypes[event.pointerType] = true; detected_pointertypes[event.pointerType] = true;
if(event.pointerType == 'pen') { if(event.pointerType == 'pen') {
if (eventTested == false) { // Make sure the test finishes after all the input actions are completed.
eventTested = true; actions_promise.then( () => {
test_pointerout.done(); test_pointerout.done();
} });
} }
else { else {
test_pointerout.step(function() { test_pointerout.step(function() {
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
}); });
// Inject pen inputs. // Inject pen inputs.
new test_driver.Actions() actions_promise = new test_driver.Actions()
.addPointer("PenPointer1", "pen") .addPointer("PenPointer1", "pen")
.pointerMove(0, 0, {origin: target0}) .pointerMove(0, 0, {origin: target0})
.pointerMove(0, 0) .pointerMove(0, 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment