Add first-letter assert exception in RenderButton::setupInnerStyle().
[WebKit-https.git] / LayoutTests / touchadjustment / resources / touchadjustment.js
1 /* function for finding the absolute bounds of a node (both inline and block) */
2 function findAbsoluteBounds(node)
3 {
4     var bounds = node.getBoundingClientRect();
5     return {
6         left: bounds.left,
7         top: bounds.top,
8         width: bounds.right - bounds.left,
9         height: bounds.bottom - bounds.top
10     };
11 }
12
13 function nodeToString(node)
14 {
15     if (node === undefined)
16         return 'undefined';
17     if (node === null)
18         return 'null';
19     if (!node.nodeName)
20         return 'not a node';
21     if (node.nodeType == 3)
22         return "'"+node.nodeValue+"'";
23     return node.nodeName + (node.id ? ('#' + node.id) : '');
24 }
25
26 function boundsToString(bounds)
27 {
28     return "("+bounds.left+","+bounds.top+")x("+bounds.width+","+bounds.height+")";
29 }
30
31 function pointToString(point)
32 {
33     return "("+point.x+","+point.y+")";
34 }
35
36
37 function shouldBeNode(adjustedNode, targetNode) {
38     if (typeof targetNode == "string") {
39         var adjustedNodeString = nodeToString(adjustedNode);
40         if (targetNode == adjustedNodeString) {
41             testPassed("adjusted node was " + targetNode + ".");
42         }
43         else {
44             testFailed("adjusted node should be " + targetNode  + ". Was " + adjustedNodeString + ".");
45         }
46         return;
47     }
48     if (targetNode == adjustedNode) {
49         testPassed("adjusted node was " + nodeToString(targetNode) + ".");
50     }
51     else {
52         testFailed("adjusted node should be " + nodeToString(targetNode)  + ". Was " + nodeToString(adjustedNode) + ".");
53     }
54 }
55
56 function shouldBeWithin(adjustedPoint, targetArea) {
57     if (adjustedPoint.x >= targetArea.left && adjustedPoint.y >= targetArea.top
58         && adjustedPoint.x <= (targetArea.left + targetArea.width)
59         && adjustedPoint.y <= (targetArea.top + targetArea.height)) {
60         testPassed("adjusted point was within " + boundsToString(targetArea));
61     } else {
62         testFailed("adjusted node should be within " + boundsToString(targetArea)  + ". Was " + pointToString(adjustedPoint));
63     }
64 }
65
66 function testTouchPoint(touchpoint, targetNode, allowTextNodes)
67 {
68     var adjustedNode = internals.touchNodeAdjustedToBestClickableNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height);
69     if (!allowTextNodes && adjustedNode && adjustedNode.nodeType == 3)
70         adjustedNode = adjustedNode.parentNode;
71     shouldBeNode(adjustedNode, targetNode);
72 }
73
74 function testTouchPointContextMenu(touchpoint, targetNode, allowTextNodes)
75 {
76     var adjustedNode = internals.touchNodeAdjustedToBestContextMenuNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height);
77     if (!allowTextNodes && adjustedNode && adjustedNode.nodeType == 3)
78         adjustedNode = adjustedNode.parentNode;
79     shouldBeNode(adjustedNode, targetNode);
80 }
81
82 function adjustTouchPoint(touchpoint)
83 {
84     var adjustedPoint = internals.touchPositionAdjustedToBestClickableNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height);
85     return adjustedPoint;
86 }
87
88 function adjustTouchPointContextMenu(touchpoint)
89 {
90     var adjustedPoint = internals.touchPositionAdjustedToBestContextMenuNode(touchpoint.left, touchpoint.top, touchpoint.width, touchpoint.height);
91     return adjustedPoint;
92 }
93
94 function touchPoint(x, y, radiusX, radiusY)
95 {
96     if (!radiusY)
97         radiusY = radiusX;
98
99     return {
100         left: x - radiusX,
101         top: y - radiusY,
102         width: radiusX * 2,
103         height: radiusY * 2,
104         get x() { return this.left + this.width/2; },
105         get y() { return this.top + this.height/2; }
106     };
107 }
108
109 function offsetTouchPoint(bounds, relativePosition, touchOffset, touchRadiusX, touchRadiusY)
110 {
111     if (!touchRadiusY)
112         touchRadiusY = touchRadiusX;
113
114     // Start with the center of the touch at the top-left of the bounds.
115     var touchpoint = touchPoint(bounds.left, bounds.top, touchRadiusX, touchRadiusY);
116  
117     // Adjust the touch point as requested.
118     switch (relativePosition) {
119     case 'center':
120         touchpoint.left += bounds.width / 2;
121         touchpoint.top += bounds.height / 2;
122         break;
123     case 'left':
124         touchpoint.left -= touchOffset;
125         touchpoint.top += bounds.height / 2;
126         break;
127     case 'right':
128         touchpoint.left += bounds.width + touchOffset;
129         touchpoint.top +=  bounds.height / 2;
130         break;
131     case 'top-left':
132         touchpoint.left -= touchOffset;
133         touchpoint.top -= touchOffset;
134         break;
135     case 'top-right':
136         touchpoint.left += bounds.width + touchOffset;
137         touchpoint.top -= touchOffset;
138         break;
139     case 'bottom-left':
140         touchpoint.left -= touchOffset;
141         touchpoint.top += bounds.height + touchOffset;
142         break;
143     case 'bottom-right':
144         touchpoint.left += bounds.width + touchOffset;
145         touchpoint.top += bounds.height + touchOffset;
146         break;
147     case 'top':
148         touchpoint.left += bounds.width / 2;
149         touchpoint.top -= touchOffset;
150         break;
151     case 'bottom':
152         touchpoint.left += bounds.width / 2;
153         touchpoint.top += bounds.height + touchOffset;
154     }
155
156     return touchpoint;
157 }