| Index: LayoutTests/fast/dom/elementsFromPoint/resources/elementsFromPoint.js
|
| diff --git a/LayoutTests/fast/dom/elementsFromPoint/resources/elementsFromPoint.js b/LayoutTests/fast/dom/elementsFromPoint/resources/elementsFromPoint.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e1b92e53c9956e21059ce831a5c4c07d930603ec
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/dom/elementsFromPoint/resources/elementsFromPoint.js
|
| @@ -0,0 +1,88 @@
|
| +function nodeToString(node) {
|
| + var str = '';
|
| + if (node.nodeType == Node.ELEMENT_NODE) {
|
| + str += node.nodeName;
|
| + if (node.id)
|
| + str += '#' + node.id;
|
| + else if (node.class)
|
| + str += '.' + node.class;
|
| + } else if (node.nodeType == Node.TEXT_NODE) {
|
| + str += '\'' + node.data + '\'';
|
| + } else if (node.nodeType == Node.DOCUMENT_NODE) {
|
| + str += '#document';
|
| + }
|
| + return str;
|
| +}
|
| +
|
| +function nodeListToString(nodes) {
|
| + var nodeString = '';
|
| +
|
| + for (var i = 0; i < nodes.length; i++) {
|
| + var str = nodeToString(nodes[i]);
|
| + if (!str)
|
| + continue;
|
| + nodeString += str;
|
| + if (i + 1 < nodes.length)
|
| + nodeString += ', ';
|
| + }
|
| + return nodeString;
|
| +}
|
| +
|
| +function assertElementsFromPoint(actual, expected) {
|
| + shouldBeEqualToString('nodeListToString(' + actual + ')', nodeListToString(expected));
|
| +}
|
| +
|
| +function assertElementInSequence(sequence, value, expectedInSequence) {
|
| + if (expectedInSequence)
|
| + shouldBeGreaterThanOrEqual(sequence + '.indexOf(' + value + ')', '0');
|
| + else
|
| + shouldBeEqualToNumber(sequence + '.indexOf(' + value + ')', -1);
|
| +}
|
| +
|
| +function checkElementsFromPointFourCorners(doc, evalElement) {
|
| + var element = eval(evalElement);
|
| + var shouldReceivePointerEvents = window.getComputedStyle(element).pointerEvents != 'none';
|
| + var rect = element.getBoundingClientRect();
|
| +
|
| + var topLeft = {x: rect.left + 1, y: rect.top + 1};
|
| + var topRight = {x: rect.right - 1, y: rect.top + 1};
|
| + var bottomLeft = {x: rect.left + 1, y: rect.bottom - 1};
|
| + var bottomRight = {x: rect.right - 1, y: rect.bottom - 1};
|
| +
|
| + var topLeftElements = doc + '.elementsFromPoint(' + topLeft.x + ', ' + topLeft.y + ')';
|
| + var topRightElements = doc + '.elementsFromPoint(' + topRight.x + ', ' + topRight.y + ')';
|
| + var bottomLeftElements = doc + '.elementsFromPoint(' + bottomLeft.x + ', ' + bottomLeft.y + ')';
|
| + var bottomRightElements = doc + '.elementsFromPoint(' + bottomRight.x + ', ' + bottomRight.y + ')';
|
| +
|
| + assertElementInSequence(topLeftElements, evalElement, shouldReceivePointerEvents);
|
| + assertAllElementsIntersectPoint(topLeftElements, topLeft);
|
| + assertElementInSequence(topRightElements, evalElement, shouldReceivePointerEvents);
|
| + assertAllElementsIntersectPoint(topRightElements, topRight);
|
| + assertElementInSequence(bottomLeftElements, evalElement, shouldReceivePointerEvents);
|
| + assertAllElementsIntersectPoint(bottomLeftElements, bottomLeft);
|
| + assertElementInSequence(bottomRightElements, evalElement, shouldReceivePointerEvents);
|
| + assertAllElementsIntersectPoint(bottomRightElements, bottomRight);
|
| +}
|
| +
|
| +function assertAllElementsIntersectPoint(sequence, point) {
|
| + var elementsEv;
|
| + try {
|
| + elementsEv = eval(sequence);
|
| + } catch (e) {
|
| + testFailed('Evaluating ' + sequence + ': Threw exception ' + e);
|
| + return;
|
| + }
|
| +
|
| + var numElements = elementsEv.length;
|
| + for (var i = 0; i < numElements; i++) {
|
| + var clientRect = elementsEv[i].getBoundingClientRect();
|
| + if (point.x < clientRect.left
|
| + || point.x > clientRect.right
|
| + || point.y < clientRect.top
|
| + || point.y > clientRect.bottom) {
|
| + testFailed(sequence + '[' + i + '].getBoundingClientRect() does not intersect (' + point.x + ', ' + point.y + ')');
|
| + return;
|
| + }
|
| + }
|
| + testPassed('All elements in ' + sequence + ' intersect (' + point.x + ', ' + point.y + ')');
|
| +}
|
|
|