OLD | NEW |
| (Empty) |
1 description("This test performs a check that :valid/:invalid CSS psudo selectors
are lively applied."); | |
2 | |
3 // Setup for static elements. | |
4 var form = document.createElement('form'); | |
5 document.body.appendChild(form); | |
6 var nonForm = document.createElement('div'); | |
7 document.body.appendChild(nonForm); | |
8 | |
9 function mouseDownOnSelect(selId, index, modifier) { | |
10 var sl = document.getElementById(selId); | |
11 var itemHeight = Math.floor(sl.offsetHeight / sl.size); | |
12 var border = 1; | |
13 var y = border + index * itemHeight; | |
14 | |
15 sl.focus(); | |
16 if (window.eventSender) { | |
17 eventSender.mouseMoveTo(sl.offsetLeft + border, sl.offsetTop + y - windo
w.pageYOffset); | |
18 eventSender.mouseDown(0, [modifier]); | |
19 eventSender.mouseUp(0, [modifier]); | |
20 } | |
21 } | |
22 | |
23 function makeInvalid() { | |
24 var select = document.createElement('select'); | |
25 select.name = 'foo'; | |
26 select.required = true; | |
27 select.value = ''; | |
28 form.appendChild(select); | |
29 return select; | |
30 } | |
31 | |
32 function appendOption(value, select) { | |
33 var option = document.createElement('option'); | |
34 option.value = value; | |
35 option.innerText = value; | |
36 select.add(option); | |
37 return option; | |
38 } | |
39 | |
40 function insertOptionBefore(value, select, before) { | |
41 var option = document.createElement('option'); | |
42 option.value = value; | |
43 option.innerText = value; | |
44 select.add(option, before); | |
45 return option; | |
46 } | |
47 | |
48 function removeOption(option, select) { | |
49 select.remove(option); | |
50 return option; | |
51 } | |
52 | |
53 function backgroundOf(el) { | |
54 if (typeof(el) == 'string') | |
55 el = document.getElementById(el); | |
56 return document.defaultView.getComputedStyle(el, null).getPropertyValue('bac
kground-color'); | |
57 } | |
58 | |
59 var elBackground = 'backgroundOf(el)'; | |
60 var invalidColor = 'rgb(255, 0, 0)'; | |
61 var normalColor = 'rgb(255, 255, 255)'; | |
62 var disabledColor = 'rgb(0, 0, 0)'; | |
63 var transparentColor = 'rgba(0, 0, 0, 0)'; | |
64 var validColor = 'rgb(0, 0, 255)'; | |
65 | |
66 // -------------------------------- | |
67 // willValidate change | |
68 // -------------------------------- | |
69 var el = makeInvalid(); | |
70 var o1 = appendOption('', el); | |
71 var o2 = appendOption('X', el); | |
72 o1.selected = true; | |
73 // Confirm this element is invalid. | |
74 debug('Check the initial state:'); | |
75 shouldBe(elBackground, 'invalidColor'); | |
76 | |
77 debug('Change name:'); | |
78 el.name = ''; | |
79 shouldBe(elBackground, 'invalidColor'); | |
80 el.name = 'bar'; | |
81 shouldBe(elBackground, 'invalidColor'); | |
82 | |
83 debug('Change disabled:'); | |
84 el = makeInvalid(); | |
85 o1 = appendOption('', el); | |
86 o2 = appendOption('X', el); | |
87 o1.selected = true; | |
88 el.disabled = true; | |
89 shouldBe(elBackground, 'disabledColor'); | |
90 el.disabled = false; | |
91 shouldBe(elBackground, 'invalidColor'); | |
92 | |
93 debug('Inside/outside of a form:'); | |
94 el = makeInvalid(); | |
95 o1 = appendOption('', el); | |
96 o2 = appendOption('X', el); | |
97 o1.selected = true; | |
98 nonForm.appendChild(el); | |
99 shouldBe(elBackground, 'invalidColor'); | |
100 form.appendChild(el); | |
101 shouldBe(elBackground, 'invalidColor'); | |
102 | |
103 // -------------------------------- | |
104 // value change | |
105 // -------------------------------- | |
106 | |
107 debug('Change the values of select elements without explicit initializing values
by clicking:'); | |
108 form.innerHTML = '<select id="select-multiple" multiple required size="4">' + | |
109 ' <option id="multiple-empty">empty</option>' + | |
110 ' <option id="multiple-another">another</option>' + | |
111 '</select>' + | |
112 '<select id="select-size4" size="4" required>' + | |
113 ' <option id="size4-empty">empty</option>' + | |
114 ' <option id="size4-another">another</option>' + | |
115 '</select>'; | |
116 mouseDownOnSelect('select-multiple', 0); | |
117 mouseDownOnSelect('select-size4', 0); | |
118 shouldBe('backgroundOf("select-multiple")', 'validColor'); | |
119 shouldBe('backgroundOf("select-size4")', 'validColor'); | |
120 | |
121 debug('Change the value with a placeholder label option:'); | |
122 el = makeInvalid(); | |
123 o1 = appendOption('', el); | |
124 o2 = appendOption('X', el); | |
125 o2.selected = true; | |
126 shouldBe(elBackground, 'validColor'); | |
127 o1.selected = true; | |
128 shouldBe(elBackground, 'invalidColor'); | |
129 | |
130 debug('Change the value without a placeholder label option:'); | |
131 el = makeInvalid(); | |
132 o1 = appendOption('X', el); | |
133 o2 = appendOption('', el); | |
134 o2.selected = true; | |
135 shouldBe(elBackground, 'validColor'); | |
136 o1.selected = true; | |
137 shouldBe(elBackground, 'validColor'); | |
138 | |
139 debug('Insert/remove options:'); | |
140 el = makeInvalid(); | |
141 o1 = appendOption('', el); | |
142 o2 = appendOption('X', el); | |
143 o1.selected = true; | |
144 shouldBe(elBackground, 'invalidColor'); | |
145 o3 = insertOptionBefore('Y', el, el.firstChild); | |
146 shouldBe(elBackground, 'validColor'); | |
147 removeOption(o3, el); | |
148 shouldBe(elBackground, 'invalidColor'); | |
149 o3 = appendOption('Z', el); | |
150 o3.selected = true; | |
151 shouldBe(elBackground, 'validColor'); | |
152 el.length = 2; | |
153 shouldBe(elBackground, 'invalidColor'); | |
154 | |
155 debug('Set an attribute: multiple:'); | |
156 el = makeInvalid(); | |
157 o1 = appendOption('', el); | |
158 o2 = appendOption('X', el); | |
159 o1.selected = true; | |
160 shouldBe(elBackground, 'invalidColor'); | |
161 el.multiple = true; | |
162 shouldBe(elBackground, 'validColor'); | |
163 el.removeAttribute('multiple'); | |
164 shouldBe(elBackground, 'invalidColor'); | |
165 | |
166 debug('Set an attribute: size:'); | |
167 el = makeInvalid(); | |
168 o1 = appendOption('', el); | |
169 o2 = appendOption('X', el); | |
170 o1.selected = true; | |
171 shouldBe(elBackground, 'invalidColor'); | |
172 el.size = 2; | |
173 shouldBe(elBackground, 'validColor'); | |
174 el.removeAttribute('size'); | |
175 shouldBe(elBackground, 'invalidColor'); | |
176 | |
177 debug('SelectAll:'); | |
178 el = makeInvalid(); | |
179 o1 = appendOption('', el); | |
180 o2 = appendOption('X', el); | |
181 el.multiple = true; | |
182 o1.selected = false; | |
183 o2.selected = false; | |
184 shouldBe(elBackground, 'invalidColor'); | |
185 el.focus(); | |
186 document.execCommand("SelectAll"); | |
187 shouldBe(elBackground, 'validColor'); | |
188 el.multiple = false; | |
189 o1.selected = false; | |
190 o2.selected = true; | |
191 | |
192 debug('Reset:'); | |
193 el = makeInvalid(); | |
194 o1 = appendOption('', el); | |
195 o2 = appendOption('X', el); | |
196 o2.selected = true; | |
197 shouldBe(elBackground, 'validColor'); | |
198 form.reset(); | |
199 shouldBe(elBackground, 'invalidColor'); | |
200 | |
201 // -------------------------------- | |
202 // Constraints change | |
203 // -------------------------------- | |
204 debug('Change required:'); | |
205 el = makeInvalid(); | |
206 o1 = appendOption('', el); | |
207 o2 = appendOption('X', el); | |
208 o1.selected = true; | |
209 el.required = false; | |
210 shouldBe(elBackground, 'validColor'); | |
211 el.required = true; | |
212 shouldBe(elBackground, 'invalidColor'); | |
OLD | NEW |