Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: LayoutTests/fast/dom/elementsFromPoint/resources/elementsFromPoint.js

Issue 869813003: Implement elementsFromPoint (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Cleanup, add a better test for tables Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 + ')');
+}

Powered by Google App Engine
This is Rietveld 408576698