<!DOCTYPE html>
<html>
<head>
<title>Test touch adjustment to a non-rectilinear element.</title>
<script src="../resources/js-test.js"></script>
<script src="resources/touchadjustment.js"></script>
<style>
body { margin: 0px; padding: 0px; }
#container {
-webkit-box-sizing: border-box;
position: relative;
border: 1px solid black;
height: 100px;
width: 100px;
}
#rotated {
-webkit-box-sizing: border-box;
transform: rotate(45deg);
border: 1px solid black;
height: 40px;
left: 10px;
position: absolute;
top: 10px;
width: 40px;
}
</style>
</head>
<body>
<div id="container">
<div id="rotated"></div>
</div>
<p id='description'></p>
<div id='console'></div>
<script>
// Set up shortcut access to elements
var e = {};
['container', 'rotated'].forEach(function(a) {
e[a] = document.getElementById(a);
e[a].addEventListener('click', function() {}, false);
});
function testDirectTouches()
{
debug('Direct Touches');
testTouchPoint(touchPoint(30, 30, 20), e.rotated);
testTouchPoint(touchPoint(20, 30, 20), e.rotated);
testTouchPoint(touchPoint(40, 30, 20), e.rotated);
testTouchPoint(touchPoint(30, 20, 20), e.rotated);
testTouchPoint(touchPoint(30, 40, 20), e.rotated);
testTouchPoint(touchPoint(80, 80, 20), e.container);
testTouchPoint(touchPoint(80, 20, 20), e.container);
testTouchPoint(touchPoint(20, 80, 20), e.container);
}
function testAdjustedTouches()
{
debug('\nAdjusted Touches');
// Touch overlaps center of element.
testTouchPoint(touchPoint(10, 10, 30), e.rotated);
// Touch overlaps corner of element.
testTouchPoint(touchPoint(20, 0, 20), e.rotated);
debug('\nNear Misses');
// Touch overlaps bounding-box of element, but not the actual bounds.
testTouchPoint(touchPoint(71, 0, 20), e.container);
testTouchPoint(touchPoint(71, 60, 20), e.container);
}
function testAdjustedPoints()
{
debug('\nAdjusted point within bounds');
var adjustedPoint = adjustTouchPoint(touchPoint(20, 0, 20))
// Note: we allow 1 pixel of slop here due to corresponding 1px
// padding FIXME in HitTestLocation::rectForPoint.
shouldBeWithin(adjustedPoint, touchPoint(20.5, 0.5, 20.5));
adjustedPoint = adjustTouchPoint(touchPoint(60, 60, 20))
shouldBeWithin(adjustedPoint, touchPoint(60, 60, 20));
adjustedPoint = adjustTouchPoint(touchPoint(0, 60, 40, 20))
shouldBeWithin(adjustedPoint, touchPoint(0, 60, 40, 20));
adjustedPoint = adjustTouchPoint(touchPoint(70, 20, 20, 40))
shouldBeWithin(adjustedPoint, touchPoint(70, 20, 20, 40));
}
function runTests()
{
document.addEventListener('click', function() {}, false);
if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestClickableNode) {
description(document.title);
testDirectTouches();
testAdjustedTouches();
testAdjustedPoints()
e.container.style.display = 'none';
}
}
runTests();
</script>
</body>
</html>