<!DOCTYPE html>
<script src='../../../resources/js-test.js'></script>
<style>
#spacer {
height: 1000px;
width: 1000px;
}
iframe {
width: 100px;
height: 100px;
border: 0;
}
#rotatedFrame {
transform: rotate(180deg);
}
#scaledFrame {
transform: scale(2);
width: 50px;
height: 50px;
margin-left: 50px;
margin-bottom: 20px;
}
#container {
/* Want this at a stable place across platforms so the output co-ords are stable */
position: absolute;
top: 100px;
left: 10px;
}
#console {
margin-top: 200px;
}
</style>
<p id='description'></p>
<div id='container'>
<iframe id=simpleFrame src='resources/frame-touchevent-forwarder.html'></iframe>
<iframe id=rotatedFrame src='resources/frame-touchevent-forwarder.html'></iframe>
<iframe id=scaledFrame src='resources/frame-touchevent-forwarder.html'></iframe>
</div>
<div id='console'></div>
<div id='spacer'></div>
<script>
description('Tests non-integer TouchEvent co-ordinates and radii');
var scrollX = 3;
var scrollY = 10;
scrollTo(scrollX, scrollY);
eventCount = 0;
function onTouchStart(e) {
eventCount++;
lastEvent = e;
}
function expectEvent(eventName) {
shouldBeEqualToNumber('eventCount', 1);
var origEventCount = eventCount;
eventCount = 0;
if (origEventCount > 0) {
shouldBeEqualToString('lastEvent.type', eventName);
return true;
}
return false;
}
document.addEventListener('touchstart', onTouchStart);
var floatPrecision = 0.00001;
function runTest() {
if (!eventSender) {
debug('This test requires eventSender.');
return;
}
debug('Testing simple fractional touch');
eventSender.addTouchPoint(30.33, 4.5, 5.2, 6.3);
eventSender.touchStart();
if (expectEvent('touchstart')) {
shouldBeCloseTo('lastEvent.changedTouches[0].screenX', 30.33, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].screenY', 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientX', 30.33, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientY', 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageX', 30.33 + scrollX, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageY', 4.5 + scrollY, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].radiusX', 5.2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].radiusY', 6.3, floatPrecision);
}
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
debug('');
debug('Testing fractional touch inside simple iframe');
frameRect = document.getElementById('simpleFrame').getBoundingClientRect();
eventSender.addTouchPoint(frameRect.left + 4.5, frameRect.top + 2.2);
eventSender.touchStart();
if (expectEvent('touchstart')) {
shouldBeCloseTo('lastEvent.changedTouches[0].screenX', frameRect.left + 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].screenY', frameRect.top + 2.2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientX', 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientY', 2.2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageX', 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageY', 2.2, floatPrecision);
}
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
debug('');
debug('Testing fractional touch inside rotated iframe');
frameRect = document.getElementById('rotatedFrame').getBoundingClientRect();
eventSender.addTouchPoint(frameRect.left + 4.5, frameRect.top + 2.2);
eventSender.touchStart();
if (expectEvent('touchstart')) {
shouldBeCloseTo('lastEvent.changedTouches[0].screenX', frameRect.left + 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].screenY', frameRect.top + 2.2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientX', 100 - 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientY', 100 - 2.2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageX', 100 - 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageY', 100 - 2.2, floatPrecision);
}
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
debug('');
debug('Testing fractional touch inside scaled iframe');
frameRect = document.getElementById('scaledFrame').getBoundingClientRect();
eventSender.addTouchPoint(frameRect.left + 4.5, frameRect.top + 2.2);
eventSender.touchStart();
if (expectEvent('touchstart')) {
shouldBeCloseTo('lastEvent.changedTouches[0].screenX', frameRect.left + 4.5, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].screenY', frameRect.top + 2.2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientX', 4.5 / 2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].clientY', 2.2 / 2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageX', 4.5 / 2, floatPrecision);
shouldBeCloseTo('lastEvent.changedTouches[0].pageY', 2.2 / 2, floatPrecision);
}
eventSender.releaseTouchPoint(0);
eventSender.touchEnd();
debug('');
}
addEventListener('load', runTest);
</script>