blob: 481e890f85a3e7f5fe86f1d2795a06ce67f6c7a4 [file] [log] [blame]
<!DOCTYPE HTML>
<script src="../../../resources/js-test.js"></script>
<style>
div.box {
margin: 10px;
padding: 50px;
float: left;
}
</style>
<div id="grey" class="box" style="background-color:grey">
<div id="lightgreen" class="box" style="background-color:lightgreen">
<div id="green" class="box" style="background-color:green;">
</div>
</div>
</div>
<div id="console"></div>
<script>
description("Verifies that tapping on an element fires appropriate pointer events.");
var preventDefault;
var logAllEvents;
var receivedPEsAtTarget = [];
function getPhaseString(event) {
return event.eventPhase == Event.NONE ? "none" :
event.eventPhase == Event.CAPTURING_PHASE ? "capturing" :
event.eventPhase == Event.AT_TARGET ? "target" :
event.eventPhase == Event.BUBBLING_PHASE ? "bubbling" :
"error";
}
function init() {
["grey", "lightgreen", "green"].forEach(function(id) {
var targetDiv = document.getElementById(id);
["touchstart", "touchend", "touchmove"].forEach(function(eventName) {
targetDiv.addEventListener(eventName, function(event) {
if (logAllEvents)
debug(id + " received " + event.type + " at phase=" + getPhaseString(event));
});
});
["pointerdown", "pointerup", "pointermove", "pointercancel", "pointerover", "pointerenter", "pointerout", "pointerleave"].forEach(function(eventName) {
targetDiv.addEventListener(eventName, function(event) {
if (event.eventPhase == Event.AT_TARGET)
receivedPEsAtTarget.push(event);
if (logAllEvents || event.eventPhase == Event.AT_TARGET)
debug(id + " received " + event.type + " at phase=" + getPhaseString(event));
if (preventDefault)
event.preventDefault();
});
});
});
}
function testEventSequences(x, y) {
eventSender.addTouchPoint(x, y);
eventSender.touchStart();
eventSender.updateTouchPoint(0, x+20, y+20);
eventSender.touchMove();
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
}
function testPEParamsSingleTouch(x, y) {
receivedPEsAtTarget = [];
eventSender.addTouchPoint(x, y);
eventSender.touchStart();
var i=0;
for(var j=0; j<5; j++,i++) {
shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].button", 0);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].buttons", 1);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].clientX", x);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].clientY", y);
}
shouldBeEqualToNumber("receivedPEsAtTarget.length", i);
eventSender.updateTouchPoint(0, x+20, y+20);
eventSender.touchMove();
shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].button", -1);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].buttons", 1);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].clientX", x+20);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].clientY", y+20);
shouldBeEqualToNumber("receivedPEsAtTarget.length", ++i);
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
for(var j=0; j<5; j++,i++) {
shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].button", 0);
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].buttons", 0);
}
shouldBeEqualToNumber("receivedPEsAtTarget.length", i);
}
function testPEParamsMultiTouch(x, y) {
receivedPEsAtTarget = [];
eventSender.addTouchPoint(x, y);
eventSender.touchStart();
var i=0;
var idFirst = -1;
for(; i<5; i++) {
shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
idFirst = receivedPEsAtTarget[i].pointerId;
debug("receivedPEsAtTarget["+i+"].pointerId=" + idFirst)
}
eventSender.addTouchPoint(x+10, y+10);
eventSender.touchStart();
var idSecond = -1;
for(var j=0; j<5; j++,i++) {
shouldBeFalse("receivedPEsAtTarget["+i+"].isPrimary");
idSecond = receivedPEsAtTarget[i].pointerId;
debug("receivedPEsAtTarget["+i+"].pointerId=" + idSecond)
}
eventSender.updateTouchPoint(1, x+20, y+20);
eventSender.touchMove();
shouldBeFalse("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].pointerId", idSecond);
i++;
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
for(var j=0; j<5; j++,i++) {
shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].pointerId", idFirst);
}
eventSender.updateTouchPoint(0, x+10, y+10);
eventSender.touchMove();
shouldBeFalse("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].pointerId", idSecond);
i++;
eventSender.addTouchPoint(x, y);
eventSender.touchStart();
var idThird = -1;
for(var j=0; j<5; j++,i++) {
shouldBeFalse("receivedPEsAtTarget["+i+"].isPrimary");
idThird = receivedPEsAtTarget[i].pointerId;
debug("receivedPEsAtTarget["+i+"].pointerId=" + idThird)
}
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
for(var j=0; j<5; j++,i++) {
shouldBeFalse("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].pointerId", idSecond);
}
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
for(var j=0; j<5; j++,i++) {
shouldBeFalse("receivedPEsAtTarget["+i+"].isPrimary");
shouldBeEqualToNumber("receivedPEsAtTarget["+i+"].pointerId", idThird);
}
eventSender.addTouchPoint(x, y);
eventSender.touchStart();
for(var j=0; j<5; j++,i++) {
shouldBeTrue("receivedPEsAtTarget["+i+"].isPrimary");
}
shouldBeEqualToNumber("receivedPEsAtTarget.length", i);
}
function runTests() {
var rect = document.getElementById("green").getBoundingClientRect();
var x = rect.left + 10;
var y = rect.top + 10;
logAllEvents = true;
preventDefault = false;
debug("--- test PE+TE event sequences without preventDefault ---");
testEventSequences(x, y);
debug("");
preventDefault = true;
debug("--- test PE+TE event sequences with PE preventDefault ---");
testEventSequences(x, y);
debug("");
logAllEvents = false;
debug("--- test PE params for single-touch ---");
testPEParamsSingleTouch(x, y);
debug("");
debug("--- test PE isPrimary values ---");
testPEParamsMultiTouch(x, y);
debug("");
}
init();
if (window.eventSender)
runTests();
else
debug("This test requires eventSender");
</script>