tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 5bd8277cfe35be4c2eed9bf3fc3ff6228da29062
parent 771ac28b36637a86154b826ace7b23a2469c728b
Author: Eitan Isaacson <eitan@monotonous.org>
Date:   Tue, 18 Nov 2025 18:13:45 +0000

Bug 2000098 - P3: Migrate mochitest/name/test_general.html. r=morgan

Differential Revision: https://phabricator.services.mozilla.com/D272548

Diffstat:
Maccessible/tests/browser/name_and_description/browser_name_markup.js | 722+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Maccessible/tests/mochitest/name/a11y.toml | 2--
Daccessible/tests/mochitest/name/test_general.html | 786-------------------------------------------------------------------------------
3 files changed, 722 insertions(+), 788 deletions(-)

diff --git a/accessible/tests/browser/name_and_description/browser_name_markup.js b/accessible/tests/browser/name_and_description/browser_name_markup.js @@ -505,3 +505,725 @@ markupTests.forEach(({ id, ruleset, markup, expected }) => { iframe: true, remoteIframe: true } ) ); + +/** + * Generic test cases ported from mochitest/name/test_general.html + */ +addAccessibleTask( + ` + <!-- aria-label, simple label --> + <span id="btn_simple_aria_label" role="button" aria-label="I am a button"/> + <br/> + <!-- aria-label plus aria-labelledby --> + <span id="btn_both_aria_labels" role="button" aria-label="I am a button, two" + aria-labelledby="labelledby_text btn_both_aria_labels"/> + <br/> + + <!-- aria-labelledby, single relation --> + <span id="labelledby_text">text</span> + <button id="btn_labelledby_text" + aria-labelledby="labelledby_text">1</button> + <br/> + + <!-- aria-labelledby, multiple relations --> + <span id="labelledby_text1">text1</span> + <span id="labelledby_text2">text2</span> + <button id="btn_labelledby_texts" + aria-labelledby="labelledby_text1 labelledby_text2">2</button> + <br/> + + <!-- name from named accessible --> + <input id="labelledby_namedacc" type="checkbox" + aria-label="Data" /> + <input id="input_labelledby_namedacc" + aria-labelledby="labelledby_namedacc" /> + + <!-- the name from subtree, mixed content --> + <span id="labelledby_mixed">no<span>more text</span></span> + <button id="btn_labelledby_mixed" + aria-labelledby="labelledby_mixed">3</button> + <br/> + + <!-- the name from subtree, mixed/hidden content --> + <span id="labelledby_mixed_hidden_child"> + no<span>more + <span style="display: none;">hidden</span> + text2 + <span style="visibility: hidden">hidden2</span> + </span> + </span> + <button id="btn_labelledby_mixed_hidden_child" + aria-labelledby="labelledby_mixed_hidden_child">3.1</button> + <br/> + + <!-- the name from subtree, mixed/completely hidden content --> + <span id="labelledby_mixed_hidden" + style="display: none;">lala <span>more hidden </span>text</span> + <button id="btn_labelledby_mixed_hidden" + aria-labelledby="labelledby_mixed_hidden">3.2</button> + <br/> + + <!-- the name from subtree, mixed content, block structure --> + <div id="labelledby_mixed_block"><div>text</div>more text</div></div> + <button id="btn_labelledby_mixed_block" + aria-labelledby="labelledby_mixed_block">4</button> + <br/> + + <!-- the name from subtree, mixed content, table structure --> + <table><tr> + <td id="labelledby_mixed_table">text<span>TEXT</span>text</td> + </tr></table> + <button id="btn_labelledby_mixed_table" + aria-labelledby="labelledby_mixed_table">5</button> + <br/> + + <!-- the name from subtree, child img --> + <span id="labelledby_mixed_img">text<img alt="image"/></span> + <button id="btn_labelledby_mixed_img" + aria-labelledby="labelledby_mixed_img">6</button> + <br/> + + <!-- the name from subtree, child inputs --> + <span id="labelledby_mixed_input"> + <input type="button" id="input_button" title="input button"/> + <input type="submit" id="input_submit"/> + <input type="reset" id="input_reset"/> + <input type="image" id="input_image" title="input image"/> + </span> + <button id="btn_labelledby_mixed_input" + aria-labelledby="labelledby_mixed_input">7</button> + <br/> + + <!-- the name from subtree, child object --> + <span id="labelledby_mixed_object"> + <object data="about:blank" title="object"></object> + </span> + <button id="btn_labelledby_mixed_object" + aria-labelledby="labelledby_mixed_object">8</button> + <br/> + + <!-- the name from subtree, child br --> + <span id="labelledby_mixed_br">text<br/>text</span> + <button id="btn_labelledby_mixed_br" + aria-labelledby="labelledby_mixed_br">9</button> + <br/> + + <!-- the name from subtree, name from label content rather than from its title + attribute --> + <label for="from_label_ignoretitle" + title="Select your country of origin">Country:</label> + <select id="from_label_ignoretitle"> + <option>Germany</option> + <option>Russia</option> + </select> + + <!-- the name from subtree, name from html:p content rather than from its + title attribute --> + <p id="p_ignoretitle" + title="Select your country of origin">Choose country from.</p> + <select id="from_p_ignoretitle" aria-labelledby="p_ignoretitle"> + <option>Germany</option> + <option>Russia</option> + </select> + + <!-- the name from subtree, name from html:input value rather than from its + title attribute --> + <p id="from_input_ignoretitle" aria-labelledby="input_ignoretitle">Country</p> + <input id="input_ignoretitle" + value="Custom country" + title="Input your country of origin"/> + + <!-- name from subtree, surround control by spaces to not jam the text --> + <label id="insert_spaces_around_control"> + start<input value="value">end + </label> + + <!-- no name from subtree because it holds whitespaces only --> + <a id="from_label_ignore_ws_subtree" href="about:mozilla" title="about">&nbsp;&nbsp; </a> + + <!-- Don't use subtree unless referenced by aria-labelledby. --> + <div id="alert" role="alert">Error</div> + <input type="text" id="inputLabelledByAlert" aria-labelledby="alert"> + + <!-- label element, label contains control --> + <label>text<button id="btn_label_inside">10</button>text</label> + <br/> + + <!-- label element, label and the button are in the same form --> + <form> + <label for="btn_label_inform">in form</label> + <button id="btn_label_inform">11</button> + </form> + + <!-- label element, label is outside of the form of the button --> + <label for="btn_label_outform">out form</label> + <form> + <button id="btn_label_outform">12</button> + </form> + + <!-- label element, label and the button are in the same document --> + <label for="btn_label_indocument">in document</label> + <button id="btn_label_indocument">13</button> + + <!-- multiple label elements for single button --> + <label for="btn_label_multi">label1</label> + <label for="btn_label_multi">label2</label> + <button id="btn_label_multi">button</button> + + <!-- a label containing more than one controls --> + <label> + Enable <input id="ctrl_in_label_1" type="checkbox"> a + <input id="ctrl_in_label_2" type="button" value="button"> control + </label> + + <!-- name from children --> + <span id="btn_children" role="button">14</span> + + <!-- no name from content, ARIA role overrides this rule --> + <button id="btn_nonamefromcontent" role="img">1</button> + + <!-- name from children, hidden children --> + <div role="listbox" tabindex="0"> + <div id="lb_opt1_children_hidden" role="option" tabindex="0"> + <span>i am visible</span> + <span style="display:none">i am hidden</span> + </div> + </div> + + <table role="menu"> + <tr role="menuitem" id="tablemenuitem"> + <td>menuitem 1</td> + </tr> + <tr role="menuitem"> + <td>menuitem 2</td> + </tr> + </table> + + <label id="label_with_acronym"> + <acronym title="O A T F">OATF</acronym> + <abbr title="World Wide Web">WWW</abbr> + </label> + + <div id="testArticle" role="article" title="Test article"> + <p>This is a paragraph inside the article.</p> + </div> + + <h1 id="h1" title="oops">heading</h1> + <div role="heading" id="aria_heading">aria_heading</div> + + <!-- name from title attribute --> + <span id="btn_title" role="group" title="title">15</span> + + <!-- A textarea nested in a label with a text child (bug #453371). --> + <form> + <label>Story + <textarea id="textareawithchild" name="name">Foo</textarea> + is ended. + </label> + </form> + + <!-- controls having a value used as part of computed name --> + <input type="checkbox" id="ctrlvalue_progressbar:input"> + <label for="ctrlvalue_progressbar:input"> + foo <span role="progressbar" + aria-valuenow="5" aria-valuemin="1" + aria-valuemax="10">5</span> baz + </label> + + <input type="checkbox" id="ctrlvalue_scrollbar:input" /> + <label for="ctrlvalue_scrollbar:input"> + foo <span role="scrollbar" + aria-valuenow="5" aria-valuemin="1" + aria-valuemax="10">5</span> baz + </label> + + <input type="checkbox" id="ctrlvalue_slider:input"> + <label for="ctrlvalue_slider:input"> + foo <input role="slider" type="range" + value="5" min="1" max="10" + aria-valuenow="5" aria-valuemin="1" + aria-valuemax="10"> baz + </label> + + <input type="checkbox" id="ctrlvalue_spinbutton:input"> + <label for="ctrlvalue_spinbutton:input"> + foo <input role="spinbutton" type="number" + value="5" min="1" max="10" + aria-valuenow="5" aria-valuemin="1" + aria-valuemax="10"> + baz + </label> + + <input type="checkbox" id="ctrlvalue_combobox:input"> + <label for="ctrlvalue_combobox:input"> + foo + <div role="combobox"> + <div role="textbox"></div> + <ul role="listbox" style="list-style-type: none;"> + <li role="option">1</li> + <li role="option" aria-selected="true">5</li> + <li role="option">3</li> + </ul> + </div> + baz + </label> + + <input type="checkbox" id="ctrlvalue_meter:input"> + <label for="ctrlvalue_meter:input"> + foo + <meter>5</meter> + baz + </label> + + <!-- a label with a nested control in the start, middle and end --> + <form> + <!-- at the start (without and with whitespaces) --> + <label id="comboinstart"><select id="combo3"> + <option>One</option> + <option>Two</option> + </select> + day(s). + </label> + + <label id="textboxinstart"> + <input id="textbox1" value="Two"> + days. + </label> + + <!-- in the middle --> + <label id="comboinmiddle"> + Subscribe to + <select id="combo4" name="occupation"> + <option>ATOM</option> + <option>RSS</option> + </select> + feed. + </label> + + <label id="comboinmiddle2" for="checkbox">Play the + <select id="combo5"> + <option>Haliluya</option> + <option>Hurra</option> + </select> + sound when new mail arrives + </label> + <input id="checkbox" type="checkbox" /> + + <label id="comboinmiddle3" for="combo6">Play the + <select id="combo6"> + <option>Haliluya</option> + <option>Hurra</option> + </select> + sound when new mail arrives + </label> + + <!-- at the end (without and with whitespaces) --> + <label id="comboinend"> + This day was + <select id="combo7" name="occupation"> + <option>sunny</option> + <option>rainy</option> + </select></label> + + <label id="textboxinend"> + This day was + <input id="textbox2" value="sunny"> + </label> + </form> + + <!-- placeholder --> + <input id="ph_password" type="password" value="" placeholder="a placeholder" /> + <input id="ph_text" type="text" placeholder="a placeholder" /> + <textarea id="ph_textarea" cols="5" placeholder="a placeholder"></textarea> + + <!-- placeholder does not win --> + <input id="ph_text2" type="text" aria-label="a label" placeholder="meh" /> + <textarea id="ph_textarea2" cols="5" aria-labelledby="ph_text2" + placeholder="meh"></textarea> + + <label for="ph_text3">a label</label> + <input id="ph_text3" placeholder="meh" /> + + <p>Image: + <img id="img_eq" role="math" src="foo" alt="x^2 + y^2 + z^2"> + <input type="image" id="input_img_eq" src="foo" alt="x^2 + y^2 + z^2"> + </p> + + <p>Text: + <span id="txt_eq" role="math" title="x^2 + y^2 + z^2">x<sup>2</sup> + + y<sup>2</sup> + z<sup>2</sup></span> + </p> + + <!-- duplicate announcement --> + <div id="test_note" role="note">subtree</div> + + <!-- No name for tr from its sub tree --> + <table><tr id="NoNameForTR"><th>a</th><td>b</td></tr></table> + <table style="display: block;"> + <tr id="NoNameForNonStandardTR" style="display:block;"> + <th>a</th><td>b</td> + </tr> + </table> + + <!-- Name from sub tree of tr, because it has a strong ARIA role --> + <table><tr id="NameForTRBecauseStrongARIA" role="row"><th>a</th><td>b</td></tr></table> + + <!-- No name for tr because of weak (landmark) role --> + <table><tr id="NoNameForTRBecauseWeakARIA" role="main"><th>a</th><td>b</td></tr></table> + + <!-- Name from subtree of grouping if requested by other object --> + <div id="grouping" role="group">label</div> + <button id="requested_name_from_grouping" aria-labelledby="grouping"></button> + <!-- Name from sub tree of tbody marked as display:block;, which is also a grouping --> + <div role="list"> + <div id="listitem_containing_block_tbody" role="listitem"> + <table> + <tbody style="display: block;"> + <tr><td>label</td></tr> + </tbody> + </table> + </div> + </div> + <!-- Name from subtree of treeitem containing grouping --> + <div role="tree"> + <div id="treeitem_containing_grouping" role="treeitem" aria-level="1" aria-expanded="true">root + <div role="group"> + <div role="treeitem" aria-level="2">sub</div> + </div> + </div> + </div> + + <!-- Name from subtree of grouping labelled by an ancestor. --> + <div id="grouping_ancestor_label">label + <div id="grouping_labelledby_ancestor" role="group" aria-labelledby="grouping_ancestor_label"> + This content should not be included in the grouping's label. + </div> + </div> + + <!-- Text nodes and inline elements. --> + <div role="listbox"> + <div id="container_text_inline" role="option">a<strong>b</strong>c</div> + <!-- Text nodes and block elements. --> + <div id="container_text_block" role="option">a<p>b</p>c</div> + <!-- Text nodes and empty block elements. --> + <div id="container_text_emptyblock" role="option">a<p></p><p></p>b</div> + </div> + + <!-- aria-labelledby referring to a slot --> + <div id="shadowHost"> + shadowButtonVisibleText + <span slot="hiddenSlot">shadowButtonHiddenText</span> + </div> + <template id="shadowTemplate"> + <input type="button" id="shadowButtonVisibleText" aria-labelledby="visibleSlot"> + <slot id="visibleSlot"></slot> + <input type="button" id="shadowButtonHiddenText" aria-labelledby="hiddenSlot"> + <slot id="hiddenSlot" name="hiddenSlot" hidden></slot> + </template> + + <!-- aria-labelledby referring to a hidden container with script/style --> + <button id="buttonScriptStyle" aria-labelledby="hiddenScriptStyle"></button> + <div id="hiddenScriptStyle" hidden> + <script> 42; </script> + <style> .noOp {} </style> + <span>content</span> + </div> + + <!-- Name from subtree on link including <code>, etc. --> + <a id="linkWithCodeSupSubInsDel" href="#"> + before + <code>code</code> + <sup>sup</sup> + <sub>sub</sub> + <ins>ins</ins> + <del>del</del> + after + </a> +`, + async function testGeneric(browser, docAcc) { + // aria-label + function testName_(id, expectedName) { + const acc = findAccessibleChildByID(docAcc, id); + testName(acc, expectedName); + } + + // Simple label provided via ARIA + testName_("btn_simple_aria_label", "I am a button"); + + // aria-label and aria-labelledby, expect aria-labelledby + testName_("btn_both_aria_labels", "text I am a button, two"); + + // //////////////////////////////////////////////////////////////////////// + // aria-labelledby + + // Single relation. The value of 'aria-labelledby' contains the ID of + // an element. Gets the name from text node of that element. + testName_("btn_labelledby_text", "text"); + + // Multiple relations. The value of 'aria-labelledby' contains the IDs + // of elements. Gets the name from text nodes of those elements. + testName_("btn_labelledby_texts", "text1 text2"); + + // //////////////////////////////////////////////////////////////////////// + // Name from named accessible + + testName_("input_labelledby_namedacc", "Data"); + + // //////////////////////////////////////////////////////////////////////// + // Name from subtree (single relation labelled_by). + + // Gets the name from text nodes contained by nested elements + testName_("btn_labelledby_mixed", "nomore text"); + + // Gets the name from text nodes contained by nested elements, ignores + // hidden elements (bug 443081). + testName_("btn_labelledby_mixed_hidden_child", "nomore text2"); + + // Gets the name from hidden text nodes contained by nested elements, + // (label element is hidden entirely), (bug 443081). + testName_("btn_labelledby_mixed_hidden", "lala more hidden text"); + + // Gets the name from text nodes contained by nested elements having block + // representation (every text node value in the name should be divided by + // spaces) + testName_("btn_labelledby_mixed_block", "text more text"); + + // Gets the name from text nodes contained by html:td. The text nodes + // should not be divided by spaces. + testName_("btn_labelledby_mixed_table", "textTEXTtext"); + + // Gets the name from image accessible. + testName_("btn_labelledby_mixed_img", "text image"); + + // Gets the name from input accessibles + // Note: if input have label elements then the name isn't calculated + // from them. + testName_( + "btn_labelledby_mixed_input", + "input button Submit Query Reset Submit Query" + ); + + // Gets the name from the title of object element. + testName_("btn_labelledby_mixed_object", "object"); + + // Gets the name from text nodes. Element br adds space between them. + testName_("btn_labelledby_mixed_br", "text text"); + + // Gets the name from label content which allows name from subtree, + // ignore @title attribute on label + testName_("from_label_ignoretitle", "Country:"); + + // Gets the name from html:p content, which doesn't allow name from + // subtree, ignore @title attribute on label + testName_("from_p_ignoretitle", "Choose country from."); + + // Gets the name from html:input value, ignore @title attribute on input + testName_("from_input_ignoretitle", "Custom country"); + + // Insert spaces around the control's value to not jam sibling text nodes + testName_("insert_spaces_around_control", "start value end"); + + // Gets the name from @title, ignore whitespace content + testName_("from_label_ignore_ws_subtree", "about"); + + // role="alert" doesn't get name from subtree... + testName_("alert", null); + // but the subtree is used if referenced by aria-labelledby. + testName_("inputLabelledByAlert", "Error"); + + // //////////////////////////////////////////////////////////////////////// + // label element + + // The label element contains the button. The name of the button is + // calculated from the content of the label. + // Note: the name does not contain the content of the button. + testName_("btn_label_inside", "texttext"); + + // The label element and the button are placed in the same form. Gets + // the name from the label subtree. + testName_("btn_label_inform", "in form"); + + // The label element is placed outside of form where the button is. + // Take into account the label. + testName_("btn_label_outform", "out form"); + + // The label element and the button are in the same document. Gets the + // name from the label subtree. + testName_("btn_label_indocument", "in document"); + + // Multiple label elements for single button + testName_("btn_label_multi", "label1 label2"); + + // Multiple controls inside a label element + testName_("ctrl_in_label_1", "Enable a button control"); + testName_("ctrl_in_label_2", "button"); + + // //////////////////////////////////////////////////////////////////////// + // name from children + + // ARIA role button is presented allowing the name calculation from + // children. + testName_("btn_children", "14"); + + // html:button, no name from content + testName_("btn_nonamefromcontent", null); + + // ARIA role option is presented allowing the name calculation from + // visible children (bug 443081). + testName_("lb_opt1_children_hidden", "i am visible"); + + // Get the name from subtree of menuitem crossing role nothing to get + // the name from its children. + testName_("tablemenuitem", "menuitem 1"); + + // Get the name from child acronym title attribute rather than from + // acronym content. + testName_("label_with_acronym", "O A T F World Wide Web"); + + testName_("testArticle", "Test article"); + + testName_("h1", "heading"); + testName_("aria_heading", "aria_heading"); + + // //////////////////////////////////////////////////////////////////////// + // title attribute + + // If nothing is left. Let's try title attribute. + testName_("btn_title", "title"); + + // //////////////////////////////////////////////////////////////////////// + // textarea name + + // textarea's name should not have the value, which initially is specified + // by a text child. + testName_("textareawithchild", "Story is ended."); + + // new textarea name should not reflect the value change. + let valueChanged = waitForEvent( + EVENT_TEXT_VALUE_CHANGE, + "textareawithchild" + ); + await invokeContentTask(browser, [], () => { + content.document.getElementById("textareawithchild").value = "Bar"; + }); + await valueChanged; + + testName_("textareawithchild", "Story is ended."); + + // //////////////////////////////////////////////////////////////////////// + // controls having a value used as a part of computed name + + testName_("ctrlvalue_progressbar:input", "foo 5 baz"); + testName_("ctrlvalue_scrollbar:input", "foo 5 baz"); + testName_("ctrlvalue_slider:input", "foo 5 baz"); + testName_("ctrlvalue_spinbutton:input", "foo 5 baz"); + testName_("ctrlvalue_combobox:input", "foo 5 baz"); + testName_("ctrlvalue_meter:input", "foo 5 baz"); + + // /////////////////////////////////////////////////////////////////////// + // label with nested combobox (test for 'f' item of name computation guide) + + testName_("comboinstart", "One day(s)."); + testName_("combo3", "day(s)."); + + testName_("textboxinstart", "Two days."); + testName_("textbox1", "days."); + + testName_("comboinmiddle", "Subscribe to ATOM feed."); + testName_("combo4", "Subscribe to feed."); + + testName_( + "comboinmiddle2", + "Play the Haliluya sound when new mail arrives" + ); + testName_("combo5", null); // label isn't used as a name for control + testName_("checkbox", "Play the Haliluya sound when new mail arrives"); + testName_( + "comboinmiddle3", + "Play the Haliluya sound when new mail arrives" + ); + testName_("combo6", "Play the sound when new mail arrives"); + + testName_("comboinend", "This day was sunny"); + testName_("combo7", "This day was"); + + testName_("textboxinend", "This day was sunny"); + testName_("textbox2", "This day was"); + + // placeholder + testName_("ph_password", "a placeholder"); + testName_("ph_text", "a placeholder"); + testName_("ph_textarea", "a placeholder"); + testName_("ph_text2", "a label"); + testName_("ph_textarea2", "a label"); + testName_("ph_text3", "a label"); + + // Test equation image + testName_("img_eq", "x^2 + y^2 + z^2"); + testName_("input_img_eq", "x^2 + y^2 + z^2"); + testName_("txt_eq", "x^2 + y^2 + z^2"); + + // ////////////////////////////////////////////////////////////////////// + // tests for duplicate announcement of content + + testName_("test_note", null); + + // ////////////////////////////////////////////////////////////////////// + // Tests for name from sub tree of tr element. + + // By default, we want no name. + testName_("NoNameForTR", null); + testName_("NoNameForNonStandardTR", null); + + // But we want it if the tr has an ARIA role. + testName_("NameForTRBecauseStrongARIA", "a b"); + + // But not if it is a weak (landmark) ARIA role + testName_("NoNameForTRBecauseWeakARIA", null); + + // Name from sub tree of grouping if requested by other accessible. + testName_("grouping", null); + testName_("requested_name_from_grouping", "label"); + testName_("listitem_containing_block_tbody", "label"); + // Groupings shouldn't be included when calculating from the subtree of + // a treeitem. + testName_("treeitem_containing_grouping", "root"); + + // Name from subtree of grouping labelled by an ancestor. + testName_("grouping_labelledby_ancestor", "label"); + + // Name from subtree of a container containing text nodes and inline + // elements. There should be no spaces because everything is inline. + testName_("container_text_inline", "abc"); + // Name from subtree of a container containing text nodes and block + // elements. There should be a space on both sides of the block. + testName_("container_text_block", "a b c"); + // Name from subtree of a container containing text nodes and empty + // block elements. There should be space on either side of the blocks, but + // not a double space. + testName_("container_text_emptyblock", "a b"); + + let reordered = waitForEvent(EVENT_REORDER, "shadowHost"); + await invokeContentTask(browser, [], () => { + const shadowHost = content.document.getElementById("shadowHost"); + const shadowRoot = shadowHost.attachShadow({ mode: "open" }); + shadowRoot.append( + content.document + .getElementById("shadowTemplate") + .content.cloneNode(true) + ); + }); + await reordered; + + const shadowRoot = findAccessibleChildByID(docAcc, "shadowHost"); + testName(shadowRoot.firstChild, "shadowButtonVisibleText"); + testName(shadowRoot.lastChild, "shadowButtonHiddenText"); + + // Label from a hidden element containing script and style elements. + testName_("buttonScriptStyle", "content"); + + // Name from subtree on a link containing <code>, etc. + testName_("linkWithCodeSupSubInsDel", "before code sup sub ins del after"); + }, + { topLevel: true, chrome: true } +); diff --git a/accessible/tests/mochitest/name/a11y.toml b/accessible/tests/mochitest/name/a11y.toml @@ -9,8 +9,6 @@ support-files = [ ["test_counterstyle.html"] -["test_general.html"] - ["test_general.xhtml"] ["test_link.html"] diff --git a/accessible/tests/mochitest/name/test_general.html b/accessible/tests/mochitest/name/test_general.html @@ -1,786 +0,0 @@ -<html> - -<head> - <title>nsIAccessible::name calculation</title> - <link rel="stylesheet" type="text/css" - href="chrome://mochikit/content/tests/SimpleTest/test.css" /> - - <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> - - <script type="application/javascript" - src="../common.js"></script> - <script type="application/javascript" - src="../name.js"></script> - - <script type="application/javascript"> - - function doTest() { - // aria-label - - // Simple label provided via ARIA - testName("btn_simple_aria_label", "I am a button"); - - // aria-label and aria-labelledby, expect aria-labelledby - testName("btn_both_aria_labels", "text I am a button, two"); - - // //////////////////////////////////////////////////////////////////////// - // aria-labelledby - - // Single relation. The value of 'aria-labelledby' contains the ID of - // an element. Gets the name from text node of that element. - testName("btn_labelledby_text", "text"); - - // Multiple relations. The value of 'aria-labelledby' contains the IDs - // of elements. Gets the name from text nodes of those elements. - testName("btn_labelledby_texts", "text1 text2"); - - // //////////////////////////////////////////////////////////////////////// - // Name from named accessible - - testName("input_labelledby_namedacc", "Data"); - - // //////////////////////////////////////////////////////////////////////// - // Name from subtree (single relation labelled_by). - - // Gets the name from text nodes contained by nested elements - testName("btn_labelledby_mixed", "nomore text"); - - // Gets the name from text nodes contained by nested elements, ignores - // hidden elements (bug 443081). - testName("btn_labelledby_mixed_hidden_child", "nomore text2"); - - // Gets the name from hidden text nodes contained by nested elements, - // (label element is hidden entirely), (bug 443081). - testName("btn_labelledby_mixed_hidden", "lala more hidden text"); - - // Gets the name from text nodes contained by nested elements having block - // representation (every text node value in the name should be devided by - // spaces) - testName("btn_labelledby_mixed_block", "text more text"); - - // Gets the name from text nodes contained by html:td. The text nodes - // should not be divided by spaces. - testName("btn_labelledby_mixed_table", "textTEXTtext"); - - // Gets the name from image accessible. - testName("btn_labelledby_mixed_img", "text image"); - - // Gets the name from input accessibles - // Note: if input have label elements then the name isn't calculated - // from them. - testName("btn_labelledby_mixed_input", - "input button Submit Query Reset Submit Query"); - - // Gets the name from the title of object element. - testName("btn_labelledby_mixed_object", "object"); - - // Gets the name from text nodes. Element br adds space between them. - testName("btn_labelledby_mixed_br", "text text"); - - // Gets the name from label content which allows name from subtree, - // ignore @title attribute on label - testName("from_label_ignoretitle", "Country:"); - - // Gets the name from html:p content, which doesn't allow name from - // subtree, ignore @title attribute on label - testName("from_p_ignoretitle", "Choose country from."); - - // Gets the name from html:input value, ignore @title attribute on input - testName("from_input_ignoretitle", "Custom country"); - - // Insert spaces around the control's value to not jamm sibling text nodes - testName("insert_spaces_around_control", "start value end"); - - // Gets the name from @title, ignore whitespace content - testName("from_label_ignore_ws_subtree", "about"); - - // role="alert" doesn't get name from subtree... - testName("alert", null); - // but the subtree is used if referenced by aria-labelledby. - testName("inputLabelledByAlert", "Error"); - - // //////////////////////////////////////////////////////////////////////// - // label element - - // The label element contains the button. The name of the button is - // calculated from the content of the label. - // Note: the name does not contain the content of the button. - testName("btn_label_inside", "texttext"); - - // The label element and the button are placed in the same form. Gets - // the name from the label subtree. - testName("btn_label_inform", "in form"); - - // The label element is placed outside of form where the button is. - // Take into account the label. - testName("btn_label_outform", "out form"); - - // The label element and the button are in the same document. Gets the - // name from the label subtree. - testName("btn_label_indocument", "in document"); - - // Multiple label elements for single button - testName("btn_label_multi", "label1 label2"); - - // Multiple controls inside a label element - testName("ctrl_in_label_1", "Enable a button control"); - testName("ctrl_in_label_2", "button"); - - - // //////////////////////////////////////////////////////////////////////// - // name from children - - // ARIA role button is presented allowing the name calculation from - // children. - testName("btn_children", "14"); - - // html:button, no name from content - testName("btn_nonamefromcontent", null); - - // ARIA role option is presented allowing the name calculation from - // visible children (bug 443081). - testName("lb_opt1_children_hidden", "i am visible"); - - // Get the name from subtree of menuitem crossing role nothing to get - // the name from its children. - testName("tablemenuitem", "menuitem 1"); - - // Get the name from child acronym title attribute rather than from - // acronym content. - testName("label_with_acronym", "O A T F World Wide Web"); - - testName("testArticle", "Test article"); - - testName("h1", "heading"); - testName("aria_heading", "aria_heading"); - - // //////////////////////////////////////////////////////////////////////// - // title attribute - - // If nothing is left. Let's try title attribute. - testName("btn_title", "title"); - - // //////////////////////////////////////////////////////////////////////// - // textarea name - - // textarea's name should not have the value, which initially is specified - // by a text child. - testName("textareawithchild", "Story is ended."); - - // new textarea name should not reflect the value change. - var elem = document.getElementById("textareawithchild"); - elem.value = "Bar"; - - testName("textareawithchild", "Story is ended."); - - // //////////////////////////////////////////////////////////////////////// - // controls having a value used as a part of computed name - - testName("ctrlvalue_progressbar:input", "foo 5 baz"); - testName("ctrlvalue_scrollbar:input", "foo 5 baz"); - testName("ctrlvalue_slider:input", "foo 5 baz"); - testName("ctrlvalue_spinbutton:input", "foo 5 baz"); - testName("ctrlvalue_combobox:input", "foo 5 baz"); - testName("ctrlvalue_meter:input", "foo 5 baz"); - - - // /////////////////////////////////////////////////////////////////////// - // label with nested combobox (test for 'f' item of name computation guide) - - testName("comboinstart", "One day(s)."); - testName("combo3", "day(s)."); - - testName("textboxinstart", "Two days."); - testName("textbox1", "days."); - - testName("comboinmiddle", "Subscribe to ATOM feed."); - testName("combo4", "Subscribe to feed."); - - testName("comboinmiddle2", "Play the Haliluya sound when new mail arrives"); - testName("combo5", null); // label isn't used as a name for control - testName("checkbox", "Play the Haliluya sound when new mail arrives"); - testName("comboinmiddle3", "Play the Haliluya sound when new mail arrives"); - testName("combo6", "Play the sound when new mail arrives"); - - testName("comboinend", "This day was sunny"); - testName("combo7", "This day was"); - - testName("textboxinend", "This day was sunny"); - testName("textbox2", "This day was"); - - // placeholder - testName("ph_password", "a placeholder"); - testName("ph_text", "a placeholder"); - testName("ph_textarea", "a placeholder"); - testName("ph_text2", "a label"); - testName("ph_textarea2", "a label"); - testName("ph_text3", "a label"); - - // Test equation image - testName("img_eq", "x^2 + y^2 + z^2"); - testName("input_img_eq", "x^2 + y^2 + z^2"); - testName("txt_eq", "x^2 + y^2 + z^2"); - - // ////////////////////////////////////////////////////////////////////// - // tests for duplicate announcement of content - - testName("test_note", null); - - // ////////////////////////////////////////////////////////////////////// - // Tests for name from sub tree of tr element. - - // By default, we want no name. - testName("NoNameForTR", null); - testName("NoNameForNonStandardTR", null); - - // But we want it if the tr has an ARIA role. - testName("NameForTRBecauseStrongARIA", "a b"); - - // But not if it is a weak (landmark) ARIA role - testName("NoNameForTRBecauseWeakARIA", null); - - // Name from sub tree of grouping if requested by other accessible. - testName("grouping", null); - testName("requested_name_from_grouping", "label"); - testName("listitem_containing_block_tbody", "label"); - // Groupings shouldn't be included when calculating from the subtree of - // a treeitem. - testName("treeitem_containing_grouping", "root"); - - // Name from subtree of grouping labelled by an ancestor. - testName("grouping_labelledby_ancestor", "label"); - - // Name from subtree of a container containing text nodes and inline - // elements. There should be no spaces because everyhing is inline. - testName("container_text_inline", "abc"); - // Name from subtree of a container containing text nodes and block - // elements. There should be a space on both sides of the block. - testName("container_text_block", "a b c"); - // Name from subtree of a container containing text nodes and empty - // block elements. There should be space on either side of the blocks, but - // not a double space. - testName("container_text_emptyblock", "a b"); - - const shadowRoot = getNode("shadowHost").shadowRoot; - const shadowButtonVisibleText = shadowRoot.getElementById("shadowButtonVisibleText"); - testName(shadowButtonVisibleText, "shadowButtonVisibleText"); - const shadowButtonHiddenText = shadowRoot.getElementById("shadowButtonHiddenText"); - testName(shadowButtonHiddenText, "shadowButtonHiddenText"); - - // Label from a hidden element containing script and style elements. - testName("buttonScriptStyle", "content"); - - // Name from subtree on a link containing <code>, etc. - testName("linkWithCodeSupSubInsDel", "before code sup sub ins del after"); - - SimpleTest.finish(); - } - - SimpleTest.waitForExplicitFinish(); - addA11yLoadEvent(doTest); - </script> - -</head> - -<body> - - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=428479" - title="Bug 428479 - Support ARIA role=math"> - Bug 428479 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=429666" - title="Expose ROLE_DOCUMENT for ARIA landmarks that inherit from document"> - Bug 429666 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=444279" - title="mochitest for accessible name calculating"> - Bug 444279 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=459635" - title="nsIAccessible::name calculation for HTML buttons"> - Bug 459635 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=530081" - title="Clean up our tree walker"> - Bug 530081 - </a><br> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=604391" - title="Use placeholder as name if name is otherwise empty"> - Bug 604391 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=669312" - title="Accessible name is duplicated when input has a label associated uisng for/id and is wrapped around the input"> - Bug 669312 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=704416" - title="HTML acronym and abbr names should be provided by @title"> - Bug 704416 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=812041" - title="ARIA slider and spinbutton don't provide a value for name computation"> - Bug 812041 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=823927" - title="Text is jammed with control's text in name computation"> - Bug 823927 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=835666" - title="ARIA combobox selected value is not a part of name computation"> - Bug 835666 - </a> - <a target="_blank" - href="https://bugzilla.mozilla.org/show_bug.cgi?id=833256" - title="role note shouldn't pick up the name from subtree"> - Mozilla Bug 833256 - </a> - <p id="display"></p> - <div id="content" style="display: none"></div> - <pre id="test"> - </pre> - - <!-- aria-label, simple label --> - <span id="btn_simple_aria_label" role="button" aria-label="I am a button"/> - <br/> - <!-- aria-label plus aria-labelledby --> - <span id="btn_both_aria_labels" role="button" aria-label="I am a button, two" - aria-labelledby="labelledby_text btn_both_aria_labels"/> - <br/> - - <!-- aria-labelledby, single relation --> - <span id="labelledby_text">text</span> - <button id="btn_labelledby_text" - aria-labelledby="labelledby_text">1</button> - <br/> - - <!-- aria-labelledby, multiple relations --> - <span id="labelledby_text1">text1</span> - <span id="labelledby_text2">text2</span> - <button id="btn_labelledby_texts" - aria-labelledby="labelledby_text1 labelledby_text2">2</button> - <br/> - - <!-- name from named accessible --> - <input id="labelledby_namedacc" type="checkbox" - aria-label="Data" /> - <input id="input_labelledby_namedacc" - aria-labelledby="labelledby_namedacc" /> - - <!-- the name from subtree, mixed content --> - <span id="labelledby_mixed">no<span>more text</span></span> - <button id="btn_labelledby_mixed" - aria-labelledby="labelledby_mixed">3</button> - <br/> - - <!-- the name from subtree, mixed/hidden content --> - <span id="labelledby_mixed_hidden_child"> - no<span>more - <span style="display: none;">hidden</span> - text2 - <span style="visibility: hidden">hidden2</span> - </span> - </span> - <button id="btn_labelledby_mixed_hidden_child" - aria-labelledby="labelledby_mixed_hidden_child">3.1</button> - <br/> - - <!-- the name from subtree, mixed/completely hidden content --> - <span id="labelledby_mixed_hidden" - style="display: none;">lala <span>more hidden </span>text</span></span> - <button id="btn_labelledby_mixed_hidden" - aria-labelledby="labelledby_mixed_hidden">3.2</button> - <br/> - - <!-- the name from subtree, mixed content, block structure --> - <div id="labelledby_mixed_block"><div>text</div>more text</div></div> - <button id="btn_labelledby_mixed_block" - aria-labelledby="labelledby_mixed_block">4</button> - <br/> - - <!-- the name from subtree, mixed content, table structure --> - <table><tr> - <td id="labelledby_mixed_table">text<span>TEXT</span>text</td> - </tr></table> - <button id="btn_labelledby_mixed_table" - aria-labelledby="labelledby_mixed_table">5</button> - <br/> - - <!-- the name from subtree, child img --> - <span id="labelledby_mixed_img">text<img alt="image"/></span> - <button id="btn_labelledby_mixed_img" - aria-labelledby="labelledby_mixed_img">6</button> - <br/> - - <!-- the name from subtree, child inputs --> - <span id="labelledby_mixed_input"> - <input type="button" id="input_button" title="input button"/> - <input type="submit" id="input_submit"/> - <input type="reset" id="input_reset"/> - <input type="image" id="input_image" title="input image"/> - </span> - <button id="btn_labelledby_mixed_input" - aria-labelledby="labelledby_mixed_input">7</button> - <br/> - - <!-- the name from subtree, child object --> - <span id="labelledby_mixed_object"> - <object data="about:blank" title="object"></object> - </span> - <button id="btn_labelledby_mixed_object" - aria-labelledby="labelledby_mixed_object">8</button> - <br/> - - <!-- the name from subtree, child br --> - <span id="labelledby_mixed_br">text<br/>text</span> - <button id="btn_labelledby_mixed_br" - aria-labelledby="labelledby_mixed_br">9</button> - <br/> - - <!-- the name from subtree, name from label content rather than from its title - attribute --> - <label for="from_label_ignoretitle" - title="Select your country of origin">Country:</label> - <select id="from_label_ignoretitle"> - <option>Germany</option> - <option>Russia</option> - </select> - - <!-- the name from subtree, name from html:p content rather than from its - title attribute --> - <p id="p_ignoretitle" - title="Select your country of origin">Choose country from.</p> - <select id="from_p_ignoretitle" aria-labelledby="p_ignoretitle"> - <option>Germany</option> - <option>Russia</option> - </select> - - <!-- the name from subtree, name from html:input value rather than from its - title attribute --> - <p id="from_input_ignoretitle" aria-labelledby="input_ignoretitle">Country</p> - <input id="input_ignoretitle" - value="Custom country" - title="Input your country of origin"/ > - - <!-- name from subtree, surround control by spaces to not jamm the text --> - <label id="insert_spaces_around_control"> - start<input value="value">end - </label> - - <!-- no name from subtree because it holds whitespaces only --> - <a id="from_label_ignore_ws_subtree" href="about:mozilla" title="about">&nbsp;&nbsp; </a> - - <!-- Don't use subtree unless referenced by aria-labelledby. --> - <div id="alert" role="alert">Error</div> - <input type="text" id="inputLabelledByAlert" aria-labelledby="alert"> - - <!-- label element, label contains control --> - <label>text<button id="btn_label_inside">10</button>text</label> - <br/> - - <!-- label element, label and the button are in the same form --> - <form> - <label for="btn_label_inform">in form</label> - <button id="btn_label_inform">11</button> - </form> - - <!-- label element, label is outside of the form of the button --> - <label for="btn_label_outform">out form</label> - <form> - <button id="btn_label_outform">12</button> - </form> - - <!-- label element, label and the button are in the same document --> - <label for="btn_label_indocument">in document</label> - <button id="btn_label_indocument">13</button> - - <!-- multiple label elements for single button --> - <label for="btn_label_multi">label1</label> - <label for="btn_label_multi">label2</label> - <button id="btn_label_multi">button</button> - - <!-- a label containing more than one controls --> - <label> - Enable <input id="ctrl_in_label_1" type="checkbox"> a - <input id="ctrl_in_label_2" type="button" value="button"> control - </label> - - <!-- name from children --> - <span id="btn_children" role="button">14</span> - - <!-- no name from content, ARIA role overrides this rule --> - <button id="btn_nonamefromcontent" role="img">1</button> - - <!-- name from children, hidden children --> - <div role="listbox" tabindex="0"> - <div id="lb_opt1_children_hidden" role="option" tabindex="0"> - <span>i am visible</span> - <span style="display:none">i am hidden</span> - </div> - </div> - - <table role="menu"> - <tr role="menuitem" id="tablemenuitem"> - <td>menuitem 1</td> - </tr> - <tr role="menuitem"> - <td>menuitem 2</td> - </tr> - </table> - - <label id="label_with_acronym"> - <acronym title="O A T F">OATF</acronym> - <abbr title="World Wide Web">WWW</abbr> - </label> - - <div id="testArticle" role="article" title="Test article"> - <p>This is a paragraph inside the article.</p> - </div> - - <h1 id="h1" title="oops">heading</h1> - <div role="heading" id="aria_heading">aria_heading</div> - - <!-- name from title attribute --> - <span id="btn_title" role="group" title="title">15</span> - - <!-- A textarea nested in a label with a text child (bug #453371). --> - <form> - <label>Story - <textarea id="textareawithchild" name="name">Foo</textarea> - is ended. - </label> - </form> - - <!-- controls having a value used as part of computed name --> - <input type="checkbox" id="ctrlvalue_progressbar:input"> - <label for="ctrlvalue_progressbar:input"> - foo <span role="progressbar" - aria-valuenow="5" aria-valuemin="1" - aria-valuemax="10">5</span> baz - </label> - - <input type="checkbox" id="ctrlvalue_scrollbar:input" /> - <label for="ctrlvalue_scrollbar:input"> - foo <span role="scrollbar" - aria-valuenow="5" aria-valuemin="1" - aria-valuemax="10">5</span> baz - </label> - - <input type="checkbox" id="ctrlvalue_slider:input"> - <label for="ctrlvalue_slider:input"> - foo <input role="slider" type="range" - value="5" min="1" max="10" - aria-valuenow="5" aria-valuemin="1" - aria-valuemax="10"> baz - </label> - - <input type="checkbox" id="ctrlvalue_spinbutton:input"> - <label for="ctrlvalue_spinbutton:input"> - foo <input role="spinbutton" type="number" - value="5" min="1" max="10" - aria-valuenow="5" aria-valuemin="1" - aria-valuemax="10"> - baz - </label> - - <input type="checkbox" id="ctrlvalue_combobox:input"> - <label for="ctrlvalue_combobox:input"> - foo - <div role="combobox"> - <div role="textbox"></div> - <ul role="listbox" style="list-style-type: none;"> - <li role="option">1</li> - <li role="option" aria-selected="true">5</li> - <li role="option">3</li> - </ul> - </div> - baz - </label> - - <input type="checkbox" id="ctrlvalue_meter:input"> - <label for="ctrlvalue_meter:input"> - foo - <meter>5</meter> - </div> - baz - </label> - - <!-- a label with a nested control in the start, middle and end --> - <form> - <!-- at the start (without and with whitespaces) --> - <label id="comboinstart"><select id="combo3"> - <option>One</option> - <option>Two</option> - </select> - day(s). - </label> - - <label id="textboxinstart"> - <input id="textbox1" value="Two"> - days. - </label> - - <!-- in the middle --> - <label id="comboinmiddle"> - Subscribe to - <select id="combo4" name="occupation"> - <option>ATOM</option> - <option>RSS</option> - </select> - feed. - </label> - - <label id="comboinmiddle2" for="checkbox">Play the - <select id="combo5"> - <option>Haliluya</option> - <option>Hurra</option> - </select> - sound when new mail arrives - </label> - <input id="checkbox" type="checkbox" /> - - <label id="comboinmiddle3" for="combo6">Play the - <select id="combo6"> - <option>Haliluya</option> - <option>Hurra</option> - </select> - sound when new mail arrives - </label> - - <!-- at the end (without and with whitespaces) --> - <label id="comboinend"> - This day was - <select id="combo7" name="occupation"> - <option>sunny</option> - <option>rainy</option> - </select></label> - - <label id="textboxinend"> - This day was - <input id="textbox2" value="sunny"> - </label> - </form> - - <!-- placeholder --> - <input id="ph_password" type="password" value="" placeholder="a placeholder" /> - <input id="ph_text" type="text" placeholder="a placeholder" /> - <textarea id="ph_textarea" cols="5" placeholder="a placeholder"></textarea> - - <!-- placeholder does not win --> - <input id="ph_text2" type="text" aria-label="a label" placeholder="meh" /> - <textarea id="ph_textarea2" cols="5" aria-labelledby="ph_text2" - placeholder="meh"></textarea> - - <label for="ph_text3">a label</label> - <input id="ph_text3" placeholder="meh" /> - - <p>Image: - <img id="img_eq" role="math" src="foo" alt="x^2 + y^2 + z^2"> - <input type="image" id="input_img_eq" src="foo" alt="x^2 + y^2 + z^2"> - </p> - - <p>Text: - <span id="txt_eq" role="math" title="x^2 + y^2 + z^2">x<sup>2</sup> + - y<sup>2</sup> + z<sup>2</sup></span> - - <!-- duplicate announcement --> - <div id="test_note" role="note">subtree</div> - - <!-- No name for tr from its sub tree --> - <table><tr id="NoNameForTR"><th>a</th><td>b</td></tr></table> - <table style="display: block;"> - <tr id="NoNameForNonStandardTR" style="display:block;"> - <th>a</th><td>b</td> - </tr> - </table> - - <!-- Name from sub tree of tr, because it has a strong ARIA role --> - <table><tr id="NameForTRBecauseStrongARIA" role="row"><th>a</th><td>b</td></tr></table> - - <!-- No name for tr because of weak (landmark) role --> - <table><tr id="NoNameForTRBecauseWeakARIA" role="main"><th>a</th><td>b</td></tr></table> - - <!-- Name from subtree of grouping if requested by other object --> - <div id="grouping" role="group">label</div> - <button id="requested_name_from_grouping"aria-labelledby="grouping"></button> - <!-- Name from sub tree of tbody marked as display:block;, which is also a grouping --> - <div role="list"> - <div id="listitem_containing_block_tbody" role="listitem"> - <table> - <tbody style="display: block;"> - <tr><td>label</td></tr> - </tbody> - </table> - </div> - </div> - <!-- Name from subtree of treeitem containing grouping --> - <div role="tree"> - <div id="treeitem_containing_grouping" role="treeitem" aria-level="1" aria-expanded="true">root - <div role="group"> - <div role="treeitem" aria-level="2">sub</div> - </div> - </div> - </div> - - <!-- Name from subtree of grouping labelled by an ancestor. --> - <div id="grouping_ancestor_label">label - <div id="grouping_labelledby_ancestor" role="group" aria-labelledby="grouping_ancestor_label"> - This content should not be included in the grouping's label. - </div> - </div> - - <!-- Text nodes and inline elements. --> - <div role="listbox"> - <div id="container_text_inline" role="option">a<strong>b</strong>c</div> - <!-- Text nodes and block elements. --> - <div id="container_text_block" role="option">a<p>b</p>c</div> - <!-- Text nodes and empty block elements. --> - <div id="container_text_emptyblock" role="option">a<p></p><p></p>b</div> - </div> - - <!-- aria-labelledby referring to a slot --> - <div id="shadowHost"> - shadowButtonVisibleText - <span slot="hiddenSlot">shadowButtonHiddenText</span> - </div> - <template id="shadowTemplate"> - <input type="button" id="shadowButtonVisibleText" aria-labelledby="visibleSlot"> - <slot id="visibleSlot"></slot> - <input type="button" id="shadowButtonHiddenText" aria-labelledby="hiddenSlot"> - <slot id="hiddenSlot" name="hiddenSlot" hidden></slot> - </template> - <script> - const shadowHost = document.getElementById("shadowHost"); - const shadowRoot = shadowHost.attachShadow({ mode: "open" }); - shadowRoot.append(document.getElementById("shadowTemplate").content.cloneNode(true)); - </script> - - <!-- aria-labelledby referring to a hidden container with script/style --> - <button id="buttonScriptStyle" aria-labelledby="hiddenScriptStyle"></button> - <div id="hiddenScriptStyle" hidden> - <script> 42; </script> - <style> .noOp {} </style> - <span>content</span> - </div> - - <!-- Name from subtree on link including <code>, etc. --> - <a id="linkWithCodeSupSubInsDel" href="#"> - before - <code>code</code> - <sup>sup</sup> - <sub>sub</sub> - <ins>ins</ins> - <del>del</del> - after - </a> -</body> -</html>