[Forms] Re-factor label.for tests for extending test coverage
[WebKit-https.git] / LayoutTests / fast / forms / resources / common.js
1 function $(id) {
2     return document.getElementById(id);
3 }
4
5 function createFormControlDataSet() {
6     // A list of labelable elements resides in http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#category-label
7     var formControlClassNames = [
8         'HTMLButtonElement',
9         'HTMLDataListElement',
10         'HTMLFieldSetElement',
11         'HTMLInputElement',
12         'HTMLKeygenElement',
13         'HTMLLabelElement',
14         'HTMLLegendElement',
15         'HTMLMeterElement',
16         'HTMLObjectElement',
17         'HTMLOptGroupElement',
18         'HTMLOptionElement',
19         'HTMLOutputElement',
20         'HTMLProgressElement',
21         'HTMLSelectElement',
22         'HTMLTextAreaElement'
23     ];
24     var formControlDataSet = {};
25     for (var i = 0; i < formControlClassNames.length; i++) {
26         var className = formControlClassNames[i];
27         var tagName = className.toLowerCase().substring(4, className.length - 7);
28         var element = document.createElement(tagName);
29         formControlDataSet[tagName] = {
30             inputType: null,
31             isLabelable: true,
32             isSupported: element.toString() == '[object ' + className + ']',
33             name: tagName,
34             tagName: tagName,
35         };
36     }
37     formControlDataSet.datalist.isLabelable = false;
38     formControlDataSet.fieldset.isLabelable = false;
39     formControlDataSet.label.isLabelable = false;
40     formControlDataSet.legend.isLabelable = false;
41     formControlDataSet.object.isLabelable = false;
42     formControlDataSet.optgroup.isLabelable = false;
43     formControlDataSet.option.isLabelable = false;
44
45     // Input type names reside in http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html
46     var inputTypeNames = [
47         'button',
48         'checkbox',
49         'color',
50         'date',
51         'datetime',
52         'datetime-local',
53         'email',
54         'file',
55         'hidden',
56         'image',
57         'month',
58         'number',
59         'password',
60         'radio',
61         'range',
62         'reset',
63         'search',
64         'submit',
65         'tel',
66         'text',
67         'time',
68         'url',
69         'week',
70     ];
71     for (var i = 0; i < inputTypeNames.length; i++) {
72         var typeName = inputTypeNames[i];
73         var name = typeName + 'Type';
74         var element = document.createElement('input');
75         element.type = typeName;
76         formControlDataSet[name] = {
77             inputType: typeName,
78             isLabelable: true,
79             isSupported: element.type == typeName,
80             name: name,
81             tagName: 'input',
82       };
83     }
84     formControlDataSet.hiddenType.isLabelable = false;
85
86     return formControlDataSet;
87 }
88
89 function getValidationMessageBubbleNode(host) {
90     // FIXME: We should search for a pseudo ID.
91     return internals.shadowRoot(host).lastChild;
92 }
93
94 function getAbsoluteRect(element) {
95     var rect = element.getBoundingClientRect();
96     rect.top += document.body.scrollTop;
97     rect.bottom += document.body.scrollTop;
98     rect.left += document.body.scrollLeft;
99     rect.right += document.body.scrollLeft;
100     return rect;
101 }
102
103 function searchCancelButtonPosition(element) {
104     var pos = {};
105     pos.x = element.offsetLeft + element.offsetWidth - 9;
106     pos.y = element.offsetTop + element.offsetHeight / 2;
107     return pos;
108 }
109
110 function mouseMoveToIndexInListbox(index, listboxId) {
111     var listbox = document.getElementById(listboxId);
112     var itemHeight = Math.floor(listbox.offsetHeight / listbox.size);
113     var border = 1;
114     var y = border + index * itemHeight;
115     if (window.eventSender)
116         eventSender.mouseMoveTo(listbox.offsetLeft + border, listbox.offsetTop + y - window.pageYOffset);
117 }