1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/accessible/tests/mochitest/name/test_general.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,621 @@ 1.4 +<html> 1.5 + 1.6 +<head> 1.7 + <title>nsIAccessible::name calculation</title> 1.8 + <link rel="stylesheet" type="text/css" 1.9 + href="chrome://mochikit/content/tests/SimpleTest/test.css" /> 1.10 + 1.11 + <script type="application/javascript" 1.12 + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 1.13 + 1.14 + <script type="application/javascript" 1.15 + src="../common.js"></script> 1.16 + <script type="application/javascript" 1.17 + src="../name.js"></script> 1.18 + 1.19 + <script type="application/javascript"> 1.20 + 1.21 + function doTest() 1.22 + { 1.23 + // aria-label 1.24 + 1.25 + // Simple label provided via ARIA 1.26 + testName("btn_simple_aria_label", "I am a button"); 1.27 + 1.28 + // aria-label and aria-labelledby, expect aria-labelledby 1.29 + testName("btn_both_aria_labels", "text I am a button, two"); 1.30 + 1.31 + ////////////////////////////////////////////////////////////////////////// 1.32 + // aria-labelledby 1.33 + 1.34 + // Single relation. The value of 'aria-labelledby' contains the ID of 1.35 + // an element. Gets the name from text node of that element. 1.36 + testName("btn_labelledby_text", "text"); 1.37 + 1.38 + // Multiple relations. The value of 'aria-labelledby' contains the IDs 1.39 + // of elements. Gets the name from text nodes of those elements. 1.40 + testName("btn_labelledby_texts", "text1 text2"); 1.41 + 1.42 + ////////////////////////////////////////////////////////////////////////// 1.43 + // Name from named accessible 1.44 + 1.45 + testName("input_labelledby_namedacc", "Data"); 1.46 + 1.47 + ////////////////////////////////////////////////////////////////////////// 1.48 + // Name from subtree (single relation labelled_by). 1.49 + 1.50 + // Gets the name from text nodes contained by nested elements 1.51 + testName("btn_labelledby_mixed", "nomore text"); 1.52 + 1.53 + // Gets the name from text nodes contained by nested elements, ignores 1.54 + // hidden elements (bug 443081). 1.55 + testName("btn_labelledby_mixed_hidden_child", "nomore text2"); 1.56 + 1.57 + // Gets the name from hidden text nodes contained by nested elements, 1.58 + // (label element is hidden entirely), (bug 443081). 1.59 + testName("btn_labelledby_mixed_hidden", "lala more hidden text"); 1.60 + 1.61 + // Gets the name from text nodes contained by nested elements having block 1.62 + // representation (every text node value in the name should be devided by 1.63 + // spaces) 1.64 + testName("btn_labelledby_mixed_block", "text more text"); 1.65 + 1.66 + // Gets the name from text nodes contained by html:td (every text node 1.67 + // value in the name should be devided by spaces). 1.68 + // XXX: this case is rather a feature than strong wanted behaviour. 1.69 + testName("btn_labelledby_mixed_table", "text space text"); 1.70 + 1.71 + // Gets the name from image accessible. 1.72 + testName("btn_labelledby_mixed_img", "text image"); 1.73 + 1.74 + // Gets the name from input accessibles 1.75 + // Note: if input have label elements then the name isn't calculated 1.76 + // from them. 1.77 + testName("btn_labelledby_mixed_input", 1.78 + "input button Submit Query Reset Submit Query"); 1.79 + 1.80 + // Gets the name from the title of object element. 1.81 + testName("btn_labelledby_mixed_object", "object"); 1.82 + 1.83 + // Gets the name from text nodes. Element br adds space between them. 1.84 + testName("btn_labelledby_mixed_br", "text text"); 1.85 + 1.86 + // Gets the name from label content which allows name from subtree, 1.87 + // ignore @title attribute on label 1.88 + testName("from_label_ignoretitle", "Country:"); 1.89 + 1.90 + // Gets the name from html:p content, which doesn't allow name from 1.91 + // subtree, ignore @title attribute on label 1.92 + testName("from_p_ignoretitle", "Choose country from."); 1.93 + 1.94 + // Gets the name from html:input value, ignore @title attribute on input 1.95 + testName("from_input_ignoretitle", "Custom country"); 1.96 + 1.97 + // Insert spaces around the control's value to not jamm sibling text nodes 1.98 + testName("insert_spaces_around_control", "start value end"); 1.99 + 1.100 + // Gets the name from @title, ignore whitespace content 1.101 + testName("from_label_ignore_ws_subtree", "about"); 1.102 + 1.103 + ////////////////////////////////////////////////////////////////////////// 1.104 + // label element 1.105 + 1.106 + // The label element contains the button. The name is calculated from 1.107 + // this button. 1.108 + // Note: the name contains the content of the button. 1.109 + testName("btn_label_inside", "text10text"); 1.110 + 1.111 + // The label element and the button are placed in the same form. Gets 1.112 + // the name from the label subtree. 1.113 + testName("btn_label_inform", "in form"); 1.114 + 1.115 + // The label element is placed outside of form where the button is. 1.116 + // Take into account the label. 1.117 + testName("btn_label_outform", "out form"); 1.118 + 1.119 + // The label element and the button are in the same document. Gets the 1.120 + // name from the label subtree. 1.121 + testName("btn_label_indocument", "in document"); 1.122 + 1.123 + // Multiple label elements for single button 1.124 + testName("btn_label_multi", "label1label2"); 1.125 + 1.126 + 1.127 + ////////////////////////////////////////////////////////////////////////// 1.128 + // name from children 1.129 + 1.130 + // ARIA role button is presented allowing the name calculation from 1.131 + // children. 1.132 + testName("btn_children", "14"); 1.133 + 1.134 + // html:button, no name from content 1.135 + testName("btn_nonamefromcontent", null); 1.136 + 1.137 + // ARIA role option is presented allowing the name calculation from 1.138 + // visible children (bug 443081). 1.139 + testName("lb_opt1_children_hidden", "i am visible"); 1.140 + 1.141 + // Get the name from subtree of menuitem crossing role nothing to get 1.142 + // the name from its children. 1.143 + testName("tablemenuitem", "menuitem 1"); 1.144 + 1.145 + // Get the name from child acronym title attribute rather than from 1.146 + // acronym content. 1.147 + testName("label_with_acronym", "O A T F World Wide Web"); 1.148 + 1.149 + testName("testArticle", "Test article"); 1.150 + 1.151 + ////////////////////////////////////////////////////////////////////////// 1.152 + // title attribute 1.153 + 1.154 + // If nothing is left. Let's try title attribute. 1.155 + testName("btn_title", "title"); 1.156 + 1.157 + ////////////////////////////////////////////////////////////////////////// 1.158 + // textarea name 1.159 + 1.160 + // textarea's name should have the value, which initially is specified by 1.161 + // a text child. 1.162 + testName("textareawithchild", "Story Foo is ended."); 1.163 + 1.164 + // new textarea name should reflect the value change. 1.165 + var elem = document.getElementById("textareawithchild"); 1.166 + elem.value = "Bar"; 1.167 + 1.168 + testName("textareawithchild", "Story Bar is ended."); 1.169 + 1.170 + ////////////////////////////////////////////////////////////////////////// 1.171 + // controls having a value used as a part of computed name 1.172 + 1.173 + testName("ctrlvalue_progressbar:input", "foo 5 baz"); 1.174 + testName("ctrlvalue_scrollbar:input", "foo 5 baz"); 1.175 + testName("ctrlvalue_slider:input", "foo 5 baz"); 1.176 + testName("ctrlvalue_spinbutton:input", "foo 5 baz"); 1.177 + testName("ctrlvalue_combobox:input", "foo 5 baz"); 1.178 + 1.179 + 1.180 + ///////////////////////////////////////////////////////////////////////// 1.181 + // label with nested combobox (test for 'f' item of name computation guide) 1.182 + 1.183 + testName("comboinstart", "One day(s)."); 1.184 + testName("combo3", "day(s)."); 1.185 + 1.186 + testName("textboxinstart", "Two days."); 1.187 + testName("textbox1", "days."); 1.188 + 1.189 + testName("comboinmiddle", "Subscribe to ATOM feed."); 1.190 + testName("combo4", "Subscribe to ATOM feed."); 1.191 + 1.192 + testName("comboinmiddle2", "Play the Haliluya sound when new mail arrives"); 1.193 + testName("combo5", null); // label isn't used as a name for control 1.194 + testName("checkbox", "Play the Haliluya sound when new mail arrives"); 1.195 + testName("comboinmiddle3", "Play the Haliluya sound when new mail arrives"); 1.196 + testName("combo6", "Play the Haliluya sound when new mail arrives"); 1.197 + 1.198 + testName("comboinend", "This day was sunny"); 1.199 + testName("combo7", "This day was"); 1.200 + 1.201 + testName("textboxinend", "This day was sunny"); 1.202 + testName("textbox2", "This day was"); 1.203 + 1.204 + // placeholder 1.205 + testName("ph_password", "a placeholder"); 1.206 + testName("ph_text", "a placeholder"); 1.207 + testName("ph_textarea", "a placeholder"); 1.208 + testName("ph_text2", "a label"); 1.209 + testName("ph_textarea2", "a label"); 1.210 + testName("ph_text3", "a label"); 1.211 + 1.212 + // Test equation image 1.213 + testName("img_eq", "x^2 + y^2 + z^2") 1.214 + testName("input_img_eq", "x^2 + y^2 + z^2") 1.215 + testName("txt_eq", "x^2 + y^2 + z^2") 1.216 + 1.217 + //////////////////////////////////////////////////////////////////////// 1.218 + // tests for duplicate announcement of content 1.219 + 1.220 + testName("test_note", null); 1.221 + 1.222 + SimpleTest.finish(); 1.223 + } 1.224 + 1.225 + SimpleTest.waitForExplicitFinish(); 1.226 + addA11yLoadEvent(doTest); 1.227 + </script> 1.228 + 1.229 +</head> 1.230 + 1.231 +<body> 1.232 + 1.233 + <a target="_blank" 1.234 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=428479" 1.235 + title="Bug 428479 - Support ARIA role=math"> 1.236 + Bug 428479 1.237 + </a> 1.238 + <a target="_blank" 1.239 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=429666" 1.240 + title="Expose ROLE_DOCUMENT for ARIA landmarks that inherit from document"> 1.241 + Bug 429666 1.242 + </a> 1.243 + <a target="_blank" 1.244 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=444279" 1.245 + title="mochitest for accessible name calculating"> 1.246 + Bug 444279 1.247 + </a> 1.248 + <a target="_blank" 1.249 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=459635" 1.250 + title="nsIAccessible::name calculation for HTML buttons"> 1.251 + Bug 459635 1.252 + </a> 1.253 + <a target="_blank" 1.254 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=530081" 1.255 + title="Clean up our tree walker"> 1.256 + Bug 530081 1.257 + </a><br> 1.258 + <a target="_blank" 1.259 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=604391" 1.260 + title="Use placeholder as name if name is otherwise empty"> 1.261 + Bug 604391 1.262 + </a> 1.263 + <a target="_blank" 1.264 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=669312" 1.265 + title="Accessible name is duplicated when input has a label associated uisng for/id and is wrapped around the input"> 1.266 + Bug 669312 1.267 + </a> 1.268 + <a target="_blank" 1.269 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=704416" 1.270 + title="HTML acronym and abbr names should be provided by @title"> 1.271 + Bug 704416 1.272 + </a> 1.273 + <a target="_blank" 1.274 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=812041" 1.275 + title="ARIA slider and spinbutton don't provide a value for name computation"> 1.276 + Bug 812041 1.277 + </a> 1.278 + <a target="_blank" 1.279 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=823927" 1.280 + title="Text is jammed with control's text in name computation"> 1.281 + Bug 823927 1.282 + </a> 1.283 + <a target="_blank" 1.284 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=835666" 1.285 + title="ARIA combobox selected value is not a part of name computation"> 1.286 + Bug 835666 1.287 + </a> 1.288 + <a target="_blank" 1.289 + href="https://bugzilla.mozilla.org/show_bug.cgi?id=833256" 1.290 + title="role note shouldn't pick up the name from subtree"> 1.291 + Mozilla Bug 833256 1.292 + </a> 1.293 + <p id="display"></p> 1.294 + <div id="content" style="display: none"></div> 1.295 + <pre id="test"> 1.296 + </pre> 1.297 + 1.298 + <!-- aria-label, simple label --> 1.299 + <span id="btn_simple_aria_label" role="button" aria-label="I am a button"/> 1.300 + <br/> 1.301 + <!-- aria-label plus aria-labelledby --> 1.302 + <span id="btn_both_aria_labels" role="button" aria-label="I am a button, two" 1.303 + aria-labelledby="labelledby_text btn_both_aria_labels"/> 1.304 + <br/> 1.305 + 1.306 + <!-- aria-labelledby, single relation --> 1.307 + <span id="labelledby_text">text</span> 1.308 + <button id="btn_labelledby_text" 1.309 + aria-labelledby="labelledby_text">1</button> 1.310 + <br/> 1.311 + 1.312 + <!-- aria-labelledby, multiple relations --> 1.313 + <span id="labelledby_text1">text1</span> 1.314 + <span id="labelledby_text2">text2</span> 1.315 + <button id="btn_labelledby_texts" 1.316 + aria-labelledby="labelledby_text1 labelledby_text2">2</button> 1.317 + <br/> 1.318 + 1.319 + <!-- name from named accessible --> 1.320 + <input id="labelledby_namedacc" type="checkbox" 1.321 + aria-label="Data" /> 1.322 + <input id="input_labelledby_namedacc" 1.323 + aria-labelledby="labelledby_namedacc" /> 1.324 + 1.325 + <!-- the name from subtree, mixed content --> 1.326 + <span id="labelledby_mixed">no<span>more text</span></span> 1.327 + <button id="btn_labelledby_mixed" 1.328 + aria-labelledby="labelledby_mixed">3</button> 1.329 + <br/> 1.330 + 1.331 + <!-- the name from subtree, mixed/hidden content --> 1.332 + <span id="labelledby_mixed_hidden_child"> 1.333 + no<span>more 1.334 + <span style="display: none;">hidden</span> 1.335 + text2 1.336 + <span style="visibility: hidden">hidden2</span> 1.337 + </span> 1.338 + </span> 1.339 + <button id="btn_labelledby_mixed_hidden_child" 1.340 + aria-labelledby="labelledby_mixed_hidden_child">3.1</button> 1.341 + <br/> 1.342 + 1.343 + <!-- the name from subtree, mixed/completely hidden content --> 1.344 + <span id="labelledby_mixed_hidden" 1.345 + style="display: none;">lala <span>more hidden </span>text</span></span> 1.346 + <button id="btn_labelledby_mixed_hidden" 1.347 + aria-labelledby="labelledby_mixed_hidden">3.2</button> 1.348 + <br/> 1.349 + 1.350 + <!-- the name from subtree, mixed content, block structure --> 1.351 + <div id="labelledby_mixed_block"><div>text</div>more text</div></div> 1.352 + <button id="btn_labelledby_mixed_block" 1.353 + aria-labelledby="labelledby_mixed_block">4</button> 1.354 + <br/> 1.355 + 1.356 + <!-- the name from subtree, mixed content, table structure --> 1.357 + <table><tr> 1.358 + <td id="labelledby_mixed_table">text<span>space</span>text</td> 1.359 + </tr></table> 1.360 + <button id="btn_labelledby_mixed_table" 1.361 + aria-labelledby="labelledby_mixed_table">5</button> 1.362 + <br/> 1.363 + 1.364 + <!-- the name from subtree, child img --> 1.365 + <span id="labelledby_mixed_img">text<img alt="image"/></span> 1.366 + <button id="btn_labelledby_mixed_img" 1.367 + aria-labelledby="labelledby_mixed_img">6</button> 1.368 + <br/> 1.369 + 1.370 + <!-- the name from subtree, child inputs --> 1.371 + <span id="labelledby_mixed_input"> 1.372 + <input type="button" id="input_button" title="input button"/> 1.373 + <input type="submit" id="input_submit"/> 1.374 + <input type="reset" id="input_reset"/> 1.375 + <input type="image" id="input_image" title="input image"/> 1.376 + </span> 1.377 + <button id="btn_labelledby_mixed_input" 1.378 + aria-labelledby="labelledby_mixed_input">7</button> 1.379 + <br/> 1.380 + 1.381 + <!-- the name from subtree, child object --> 1.382 + <span id="labelledby_mixed_object"> 1.383 + <object data="about:blank" title="object"></object> 1.384 + </span> 1.385 + <button id="btn_labelledby_mixed_object" 1.386 + aria-labelledby="labelledby_mixed_object">8</button> 1.387 + <br/> 1.388 + 1.389 + <!-- the name from subtree, child br --> 1.390 + <span id="labelledby_mixed_br">text<br/>text</span> 1.391 + <button id="btn_labelledby_mixed_br" 1.392 + aria-labelledby="labelledby_mixed_br">9</button> 1.393 + <br/> 1.394 + 1.395 + <!-- the name from subtree, name from label content rather than from its title 1.396 + attribute --> 1.397 + <label for="from_label_ignoretitle" 1.398 + title="Select your country of origin">Country:</label> 1.399 + <select id="from_label_ignoretitle"> 1.400 + <option>Germany</option> 1.401 + <option>Russia</option> 1.402 + </select> 1.403 + 1.404 + <!-- the name from subtree, name from html:p content rather than from its 1.405 + title attribute --> 1.406 + <p id="p_ignoretitle" 1.407 + title="Select your country of origin">Choose country from.</p> 1.408 + <select id="from_p_ignoretitle" aria-labelledby="p_ignoretitle"> 1.409 + <option>Germany</option> 1.410 + <option>Russia</option> 1.411 + </select> 1.412 + 1.413 + <!-- the name from subtree, name from html:input value rather than from its 1.414 + title attribute --> 1.415 + <p id="from_input_ignoretitle" aria-labelledby="input_ignoretitle">Country</p> 1.416 + <input id="input_ignoretitle" 1.417 + value="Custom country" 1.418 + title="Input your country of origin"/ > 1.419 + 1.420 + <!-- name from subtree, surround control by spaces to not jamm the text --> 1.421 + <label id="insert_spaces_around_control"> 1.422 + start<input value="value">end 1.423 + </label> 1.424 + 1.425 + <!-- no name from subtree because it holds whitespaces only --> 1.426 + <a id="from_label_ignore_ws_subtree" href="about:" title="about"> </a> 1.427 + 1.428 + <!-- label element, label contains control --> 1.429 + <label>text<button id="btn_label_inside">10</button>text</label> 1.430 + <br/> 1.431 + 1.432 + <!-- label element, label and the button are in the same form --> 1.433 + <form> 1.434 + <label for="btn_label_inform">in form</label> 1.435 + <button id="btn_label_inform">11</button> 1.436 + </form> 1.437 + 1.438 + <!-- label element, label is outside of the form of the button --> 1.439 + <label for="btn_label_outform">out form</label> 1.440 + <form> 1.441 + <button id="btn_label_outform">12</button> 1.442 + </form> 1.443 + 1.444 + <!-- label element, label and the button are in the same document --> 1.445 + <label for="btn_label_indocument">in document</label> 1.446 + <button id="btn_label_indocument">13</button> 1.447 + 1.448 + <!-- multiple label elements for single button --> 1.449 + <label for="btn_label_multi">label1</label> 1.450 + <label for="btn_label_multi">label2</label> 1.451 + <button id="btn_label_multi">button</button> 1.452 + 1.453 + <!-- name from children --> 1.454 + <span id="btn_children" role="button">14</span> 1.455 + 1.456 + <!-- no name from content, ARIA role overrides this rule --> 1.457 + <button id="btn_nonamefromcontent" role="img">1</button> 1.458 + 1.459 + <!-- name from children, hidden children --> 1.460 + <div role="listbox" tabindex="0"> 1.461 + <div id="lb_opt1_children_hidden" role="option" tabindex="0"> 1.462 + <span>i am visible</span> 1.463 + <span style="display:none">i am hidden</span> 1.464 + </div> 1.465 + </div> 1.466 + 1.467 + <table role="menu"> 1.468 + <tr role="menuitem" id="tablemenuitem"> 1.469 + <td>menuitem 1</td> 1.470 + </tr> 1.471 + <tr role="menuitem"> 1.472 + <td>menuitem 2</td> 1.473 + </tr> 1.474 + </table> 1.475 + 1.476 + <label id="label_with_acronym"> 1.477 + <acronym title="O A T F">OATF</acronym> 1.478 + <abbr title="World Wide Web">WWW</abbr> 1.479 + </label> 1.480 + 1.481 + <div id="testArticle" role="article" title="Test article"> 1.482 + <p>This is a paragraph inside the article.</p> 1.483 + </div> 1.484 + 1.485 + <!-- name from title attribute --> 1.486 + <span id="btn_title" role="group" title="title">15</span> 1.487 + 1.488 + <!-- A textarea nested in a label with a text child (bug #453371). --> 1.489 + <form> 1.490 + <label>Story 1.491 + <textarea id="textareawithchild" name="name">Foo</textarea> 1.492 + is ended. 1.493 + </label> 1.494 + </form> 1.495 + 1.496 + <!-- controls having a value used as part of computed name --> 1.497 + <input type="checkbox" id="ctrlvalue_progressbar:input"> 1.498 + <label for="ctrlvalue_progressbar:input"> 1.499 + foo <span role="progressbar" 1.500 + aria-valuenow="5" aria-valuemin="1" 1.501 + aria-valuemax="10">5</span> baz 1.502 + </label> 1.503 + 1.504 + <input type="checkbox" id="ctrlvalue_scrollbar:input" /> 1.505 + <label for="ctrlvalue_scrollbar:input"> 1.506 + foo <span role="scrollbar" 1.507 + aria-valuenow="5" aria-valuemin="1" 1.508 + aria-valuemax="10">5</span> baz 1.509 + </label> 1.510 + 1.511 + <input type="checkbox" id="ctrlvalue_slider:input"> 1.512 + <label for="ctrlvalue_slider:input"> 1.513 + foo <input role="slider" type="range" 1.514 + value="5" min="1" max="10" 1.515 + aria-valuenow="5" aria-valuemin="1" 1.516 + aria-valuemax="10"> baz 1.517 + </label> 1.518 + 1.519 + <input type="checkbox" id="ctrlvalue_spinbutton:input"> 1.520 + <label for="ctrlvalue_spinbutton:input"> 1.521 + foo <input role="spinbutton" type="number" 1.522 + value="5" min="1" max="10" 1.523 + aria-valuenow="5" aria-valuemin="1" 1.524 + aria-valuemax="10"> 1.525 + baz 1.526 + </label> 1.527 + 1.528 + <input type="checkbox" id="ctrlvalue_combobox:input"> 1.529 + <label for="ctrlvalue_combobox:input"> 1.530 + foo 1.531 + <div role="combobox"> 1.532 + <div role="textbox"></div> 1.533 + <ul role="listbox" style="list-style-type: none;"> 1.534 + <li role="option">1</li> 1.535 + <li role="option" aria-selected="true">5</li> 1.536 + <li role="option">3</li> 1.537 + </ul> 1.538 + </div> 1.539 + baz 1.540 + </label> 1.541 + 1.542 + <!-- a label with a nested control in the start, middle and end --> 1.543 + <form> 1.544 + <!-- at the start (without and with whitespaces) --> 1.545 + <label id="comboinstart"><select id="combo3"> 1.546 + <option>One</option> 1.547 + <option>Two</option> 1.548 + </select> 1.549 + day(s). 1.550 + </label> 1.551 + 1.552 + <label id="textboxinstart"> 1.553 + <input id="textbox1" value="Two"> 1.554 + days. 1.555 + </label> 1.556 + 1.557 + <!-- in the middle --> 1.558 + <label id="comboinmiddle"> 1.559 + Subscribe to 1.560 + <select id="combo4" name="occupation"> 1.561 + <option>ATOM</option> 1.562 + <option>RSS</option> 1.563 + </select> 1.564 + feed. 1.565 + </label> 1.566 + 1.567 + <label id="comboinmiddle2" for="checkbox">Play the 1.568 + <select id="combo5"> 1.569 + <option>Haliluya</option> 1.570 + <option>Hurra</option> 1.571 + </select> 1.572 + sound when new mail arrives 1.573 + </label> 1.574 + <input id="checkbox" type="checkbox" /> 1.575 + 1.576 + <label id="comboinmiddle3" for="combo6">Play the 1.577 + <select id="combo6"> 1.578 + <option>Haliluya</option> 1.579 + <option>Hurra</option> 1.580 + </select> 1.581 + sound when new mail arrives 1.582 + </label> 1.583 + 1.584 + <!-- at the end (without and with whitespaces) --> 1.585 + <label id="comboinend"> 1.586 + This day was 1.587 + <select id="combo7" name="occupation"> 1.588 + <option>sunny</option> 1.589 + <option>rainy</option> 1.590 + </select></label> 1.591 + 1.592 + <label id="textboxinend"> 1.593 + This day was 1.594 + <input id="textbox2" value="sunny"> 1.595 + </label> 1.596 + </form> 1.597 + 1.598 + <!-- placeholder --> 1.599 + <input id="ph_password" type="password" value="" placeholder="a placeholder" /> 1.600 + <input id="ph_text" type="text" placeholder="a placeholder" /> 1.601 + <textarea id="ph_textarea" cols="5" placeholder="a placeholder"></textarea> 1.602 + 1.603 + <!-- placeholder does not win --> 1.604 + <input id="ph_text2" type="text" aria-label="a label" placeholder="meh" /> 1.605 + <textarea id="ph_textarea2" cols="5" aria-labelledby="ph_text2" 1.606 + placeholder="meh"></textarea> 1.607 + 1.608 + <label for="ph_text3">a label</label> 1.609 + <input id="ph_text3" placeholder="meh" /> 1.610 + 1.611 + <p>Image: 1.612 + <img id="img_eq" role="math" src="foo" alt="x^2 + y^2 + z^2"> 1.613 + <input type="image" id="input_img_eq" src="foo" alt="x^2 + y^2 + z^2"> 1.614 + </p> 1.615 + 1.616 + <p>Text: 1.617 + <span id="txt_eq" role="math" title="x^2 + y^2 + z^2">x<sup>2</sup> + 1.618 + y<sup>2</sup> + z<sup>2</sup></span> 1.619 + 1.620 + <!-- duplicate announcement --> 1.621 + <div id="test_note" role="note">subtree</div> 1.622 + 1.623 +</body> 1.624 +</html>