accessible/tests/mochitest/test_aria_token_attrs.html

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

     1 <!DOCTYPE html>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=452388
     5 -->
     6 <head>
     7   <title>An NMTOKEN based ARIA property is undefined if the ARIA attribute is not present, or is set to "" or "undefined"</title>
     8   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
    10   <script type="application/javascript"
    11           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
    13   <script type="application/javascript"
    14           src="common.js"></script>
    15   <script type="application/javascript"
    16           src="role.js"></script>
    17   <script type="application/javascript"
    18       src="states.js"></script>
    20   <script type="application/javascript">
    21     function doTest()
    22     {
    23       // test aria-pressed state mapping to roles PUSHBUTTON vs TOGGLEBUTTON
    24       testRole("button_pressed_true", ROLE_TOGGLE_BUTTON);
    25       testRole("button_pressed_false", ROLE_TOGGLE_BUTTON);
    26       testRole("button_pressed_empty", ROLE_PUSHBUTTON);
    27       testRole("button_pressed_undefined", ROLE_PUSHBUTTON);
    28       testRole("button_pressed_absent", ROLE_PUSHBUTTON);
    30       // test button aria-pressed states
    31       testStates("button_pressed_true", STATE_PRESSED, 0, STATE_CHECKABLE);
    32       testStates("button_pressed_false", 0, 0, STATE_CHECKABLE | STATE_PRESSED);
    33       testStates("button_pressed_empty", 0, 0, STATE_PRESSED | STATE_CHECKABLE);
    34       testStates("button_pressed_undefined", 0, 0, STATE_PRESSED | STATE_CHECKABLE);
    35       testStates("button_pressed_absent", 0, 0, STATE_PRESSED | STATE_CHECKABLE);
    37       // test (checkbox) checkable and checked states
    38       testStates("checkbox_checked_true", (STATE_CHECKABLE | STATE_CHECKED));
    39       testStates("checkbox_checked_false", STATE_CHECKABLE, 0, STATE_CHECKED);
    40       testStates("checkbox_checked_empty", STATE_CHECKABLE , 0, STATE_CHECKED);
    41       testStates("checkbox_checked_undefined", STATE_CHECKABLE, 0, STATE_CHECKED);
    42       testStates("checkbox_checked_absent", STATE_CHECKABLE, 0, STATE_CHECKED);
    44       // test native checkbox checked state and aria-checked state (if conflict, native wins)
    45       testStates("native_checkbox_nativechecked_ariatrue", (STATE_CHECKABLE | STATE_CHECKED));
    46       testStates("native_checkbox_nativechecked_ariafalse", (STATE_CHECKABLE | STATE_CHECKED));
    47       testStates("native_checkbox_nativechecked_ariaempty", (STATE_CHECKABLE | STATE_CHECKED));
    48       testStates("native_checkbox_nativechecked_ariaundefined", (STATE_CHECKABLE | STATE_CHECKED));
    49       testStates("native_checkbox_nativechecked_ariaabsent", (STATE_CHECKABLE | STATE_CHECKED));
    51       testStates("native_checkbox_nativeunchecked_ariatrue", STATE_CHECKABLE, 0, STATE_CHECKED);
    52       testStates("native_checkbox_nativeunchecked_ariafalse", STATE_CHECKABLE, 0, STATE_CHECKED);
    53       testStates("native_checkbox_nativeunchecked_ariaempty", STATE_CHECKABLE, 0, STATE_CHECKED);
    54       testStates("native_checkbox_nativeunchecked_ariaundefined", STATE_CHECKABLE, 0, STATE_CHECKED);
    55       testStates("native_checkbox_nativeunchecked_ariaabsent", STATE_CHECKABLE, 0, STATE_CHECKED);
    57       // test (checkbox) readonly states
    58       testStates("checkbox_readonly_true", STATE_READONLY);
    59       testStates("checkbox_readonly_false", 0, 0, STATE_READONLY);
    60       testStates("checkbox_readonly_empty", 0, 0, STATE_READONLY);
    61       testStates("checkbox_readonly_undefined", 0, 0, STATE_READONLY);
    62       testStates("checkbox_readonly_absent", 0, 0, STATE_READONLY);
    64       // test (checkbox) required states
    65       testStates("checkbox_required_true", STATE_REQUIRED);
    66       testStates("checkbox_required_false", 0, 0, STATE_REQUIRED);
    67       testStates("checkbox_required_empty", 0, 0, STATE_REQUIRED);
    68       testStates("checkbox_required_undefined", 0, 0, STATE_REQUIRED);
    69       testStates("checkbox_required_absent", 0, 0, STATE_REQUIRED);
    71       // test (checkbox) invalid states
    72       testStates("checkbox_invalid_true", STATE_INVALID);
    73       testStates("checkbox_invalid_false", 0, 0, STATE_INVALID);
    74       testStates("checkbox_invalid_empty", 0, 0, STATE_INVALID);
    75       testStates("checkbox_invalid_undefined", 0, 0, STATE_INVALID);
    76       testStates("checkbox_invalid_absent", 0, 0, STATE_INVALID);
    78       // test (checkbox) disabled states
    79       testStates("checkbox_disabled_true", STATE_UNAVAILABLE);
    80       testStates("checkbox_disabled_false", 0, 0, STATE_UNAVAILABLE);
    81       testStates("checkbox_disabled_empty", 0, 0, STATE_UNAVAILABLE);
    82       testStates("checkbox_disabled_undefined", 0, 0, STATE_UNAVAILABLE);
    83       testStates("checkbox_disabled_absent", 0, 0, STATE_UNAVAILABLE);
    85       // test (listbox) multiselectable states
    86       testStates("listbox_multiselectable_true", STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    87       testStates("listbox_multiselectable_false", 0, 0, STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    88       testStates("listbox_multiselectable_empty", 0, 0, STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    89       testStates("listbox_multiselectable_undefined", 0, 0, STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    90       testStates("listbox_multiselectable_absent", 0, 0, STATE_MULTISELECTABLE | STATE_EXTSELECTABLE);
    92       // test (option) checkable and checked states
    93       testStates("option_checked_true", (STATE_CHECKABLE | STATE_CHECKED));
    94       testStates("option_checked_false", STATE_CHECKABLE, 0, STATE_CHECKED);
    95       testStates("option_checked_empty", 0 , 0, STATE_CHECKABLE | STATE_CHECKED);
    96       testStates("option_checked_undefined", 0, 0, STATE_CHECKABLE | STATE_CHECKED);
    97       testStates("option_checked_absent", 0, 0, STATE_CHECKABLE | STATE_CHECKED);
    99       // test (menuitem) checkable and checked states
   100       testStates("menuitem_checked_true", (STATE_CHECKABLE | STATE_CHECKED));
   101       testStates("menuitem_checked_false", STATE_CHECKABLE, 0, STATE_CHECKED);
   102       testStates("menuitem_checked_empty", 0, 0, (STATE_CHECKABLE | STATE_CHECKED));
   103       testStates("menuitem_checked_undefined", 0, 0, (STATE_CHECKABLE | STATE_CHECKED));
   104       testStates("menuitem_checked_absent", 0, 0, (STATE_CHECKABLE | STATE_CHECKED));
   106       // test (menuitemradio) checkable and checked states
   107       testStates("menuitemradio_checked_true", (STATE_CHECKABLE | STATE_CHECKED));
   108       testStates("menuitemradio_checked_false", STATE_CHECKABLE, 0, STATE_CHECKED);
   109       testStates("menuitemradio_checked_empty", STATE_CHECKABLE, 0, STATE_CHECKED);
   110       testStates("menuitemradio_checked_undefined", STATE_CHECKABLE, 0, STATE_CHECKED);
   111       testStates("menuitemradio_checked_absent", STATE_CHECKABLE, 0, STATE_CHECKED);
   113       // test (radio) checkable and checked states
   114       testStates("radio_checked_true", (STATE_CHECKABLE | STATE_CHECKED));
   115       testStates("radio_checked_false", STATE_CHECKABLE, 0, STATE_CHECKED);
   116       testStates("radio_checked_empty", STATE_CHECKABLE, 0, STATE_CHECKED);
   117       testStates("radio_checked_undefined", STATE_CHECKABLE, 0, STATE_CHECKED);
   118       testStates("radio_checked_absent", STATE_CHECKABLE, 0, STATE_CHECKED);
   120       // test (textbox) multiline states
   121       testStates("textbox_multiline_true", 0, EXT_STATE_MULTI_LINE);
   122       testStates("textbox_multiline_false", 0, EXT_STATE_SINGLE_LINE);
   123       testStates("textbox_multiline_empty", 0, EXT_STATE_SINGLE_LINE);
   124       testStates("textbox_multiline_undefined", 0, EXT_STATE_SINGLE_LINE);
   125       testStates("textbox_multiline_absent", 0, EXT_STATE_SINGLE_LINE);
   127       // test (textbox) readonly states
   128       testStates("textbox_readonly_true", STATE_READONLY);
   129       testStates("textbox_readonly_false", 0, EXT_STATE_EDITABLE, STATE_READONLY);
   130       testStates("textbox_readonly_empty", 0, EXT_STATE_EDITABLE, STATE_READONLY);
   131       testStates("textbox_readonly_undefined", 0, EXT_STATE_EDITABLE, STATE_READONLY);
   132       testStates("textbox_readonly_absent", 0, EXT_STATE_EDITABLE, STATE_READONLY);
   134       // test native textbox readonly state and aria-readonly state (if conflict, native wins)
   135       testStates("native_textbox_nativereadonly_ariatrue", STATE_READONLY);
   136       testStates("native_textbox_nativereadonly_ariafalse", STATE_READONLY);
   137       testStates("native_textbox_nativereadonly_ariaempty", STATE_READONLY);
   138       testStates("native_textbox_nativereadonly_ariaundefined", STATE_READONLY);
   139       testStates("native_textbox_nativereadonly_ariaabsent", STATE_READONLY);
   141       testStates("native_textbox_nativeeditable_ariatrue", 0, 0, STATE_READONLY);
   142       testStates("native_textbox_nativeeditable_ariafalse", 0, 0, STATE_READONLY);
   143       testStates("native_textbox_nativeeditable_ariaempty", 0, 0, STATE_READONLY);
   144       testStates("native_textbox_nativeeditable_ariaundefined", 0, 0, STATE_READONLY);
   145       testStates("native_textbox_nativeeditable_ariaabsent", 0, 0, STATE_READONLY);
   147       // test (treeitem) selectable and selected states
   148       testStates("treeitem_selected_true", (STATE_SELECTABLE | STATE_SELECTED));
   149       testStates("treeitem_selected_false", STATE_SELECTABLE, 0, STATE_SELECTED);
   150       testStates("treeitem_selected_empty", STATE_SELECTABLE, 0, STATE_SELECTED);
   151       testStates("treeitem_selected_undefined", STATE_SELECTABLE, 0, STATE_SELECTED);
   152       testStates("treeitem_selected_absent", STATE_SELECTABLE, 0, STATE_SELECTED);
   154       // test (treeitem) haspopup states
   155       testStates("treeitem_haspopup_true", STATE_HASPOPUP);
   156       testStates("treeitem_haspopup_false", 0, 0, STATE_HASPOPUP);
   157       testStates("treeitem_haspopup_empty", 0, 0, STATE_HASPOPUP);
   158       testStates("treeitem_haspopup_undefined", 0, 0, STATE_HASPOPUP);
   159       testStates("treeitem_haspopup_absent", 0, 0, STATE_HASPOPUP);
   161       // test (treeitem) expandable and expanded/collapsed states
   162       testStates("treeitem_expanded_true", STATE_EXPANDED, EXT_STATE_EXPANDABLE);
   163       testStates("treeitem_expanded_false", STATE_COLLAPSED, EXT_STATE_EXPANDABLE);
   164       testStates("treeitem_expanded_empty", 0, 0, STATE_EXPANDED | STATE_COLLAPSED, EXT_STATE_EXPANDABLE);
   165       testStates("treeitem_expanded_undefined", 0, 0, STATE_EXPANDED | STATE_COLLAPSED, EXT_STATE_EXPANDABLE);
   166       testStates("treeitem_expanded_absent", 0, 0, STATE_EXPANDED | STATE_COLLAPSED, EXT_STATE_EXPANDABLE);
   168       SimpleTest.finish();
   169     }
   171     SimpleTest.waitForExplicitFinish();
   172     addA11yLoadEvent(doTest);
   173   </script>
   174 </head>
   175 <body>
   177   <a target="_blank"
   178      href="https://bugzilla.mozilla.org/show_bug.cgi?id=452388">
   179     Mozilla Bug 452388
   180   </a>
   181   <a target="_blank"
   182      href="https://bugzilla.mozilla.org/show_bug.cgi?id=499653"
   183      title="Unify ARIA state attributes mapping rules">
   184     Mozilla Bug 499653
   185   </a>
   186   <a target="_blank"
   187      href="https://bugzilla.mozilla.org/show_bug.cgi?id=989958"
   188      title="Pressed state is not exposed on a button element with aria-pressed attribute"
   189     Mozilla Bug 989958
   190   </a>
   191   <p id="display"></p>
   192   <div id="content" style="display: none"></div>
   193   <pre id="test">
   194   </pre>
   196   <div id="button_pressed_true" role="button" aria-pressed="true">This button has aria-pressed="true" and should get ROLE_TOGGLE_BUTTON. It should also get STATE_PRESSED.</div>
   197   <div id="button_pressed_false" role="button" aria-pressed="false">This button has aria-pressed="false" and should get ROLE_TOGGLE_BUTTON.</div>
   198   <div id="button_pressed_empty" role="button" aria-pressed="">This button has aria-pressed="" and should <emph>not</emph> get ROLE_BUTTON.</div>
   199   <div id="button_pressed_undefined" role="button" aria-pressed="undefined">This button has aria-pressed="undefined" and should <emph>not</emph> get ROLE_TOGGLE_BUTTON.</div>
   200   <div id="button_pressed_absent" role="button">This button has <emph>no</emph> aria-pressed attribute and should <emph>not</emph> get ROLE_TOGGLE_BUTTON.</div>
   202   <div id="checkbox_checked_true" role="checkbox" aria-checked="true">This checkbox has aria-checked="true" and should get STATE_CHECKABLE. It should also get STATE_checked.</div>
   203   <div id="checkbox_checked_false" role="checkbox" aria-checked="false">This checkbox has aria-checked="false" and should get STATE_CHECKABLE.</div>
   204   <div id="checkbox_checked_empty" role="checkbox" aria-checked="">This checkbox has aria-checked="" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   205   <div id="checkbox_checked_undefined" role="checkbox" aria-checked="undefined">This checkbox has aria-checked="undefined" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   206   <div id="checkbox_checked_absent" role="checkbox">This checkbox has <emph>no</emph> aria-checked attribute and should get STATE_CHECKABLE.</div>
   208   <form action="">
   209     <input id="native_checkbox_nativechecked_ariatrue" type="checkbox" checked="checked" aria-checked="true"/>
   210     <input id="native_checkbox_nativechecked_ariafalse" type="checkbox" checked="checked" aria-checked="false"/>
   211     <input id="native_checkbox_nativechecked_ariaempty" type="checkbox" checked="checked" aria-checked=""/>
   212     <input id="native_checkbox_nativechecked_ariaundefined" type="checkbox" checked="checked" aria-checked="undefined"/>
   213     <input id="native_checkbox_nativechecked_ariaabsent" type="checkbox" checked="checked"/>
   215     <input id="native_checkbox_nativeunchecked_ariatrue" type="checkbox" aria-checked="true"/>
   216     <input id="native_checkbox_nativeunchecked_ariafalse" type="checkbox" aria-checked="false"/>
   217     <input id="native_checkbox_nativeunchecked_ariaempty" type="checkbox" aria-checked=""/>
   218     <input id="native_checkbox_nativeunchecked_ariaundefined" type="checkbox" aria-checked="undefined"/>
   219     <input id="native_checkbox_nativeunchecked_ariaabsent" type="checkbox"/>
   220   </form>
   222   <div id="checkbox_readonly_true" role="checkbox" aria-readonly="true">This checkbox has aria-readonly="true" and should get STATE_READONLY.</div>
   223   <div id="checkbox_readonly_false" role="checkbox" aria-readonly="false">This checkbox has aria-readonly="false" and should <emph>not</emph> get STATE_READONLY.</div>
   224   <div id="checkbox_readonly_empty" role="checkbox" aria-readonly="">This checkbox has aria-readonly="" and should <emph>not</emph> get STATE_READONLY.</div>
   225   <div id="checkbox_readonly_undefined" role="checkbox" aria-readonly="undefined">This checkbox has aria-readonly="undefined" and should <emph>not</emph> get STATE_READONLY.</div>
   226   <div id="checkbox_readonly_absent" role="checkbox">This checkbox has <emph>no</emph> aria-readonly attribute and should <emph>not</emph> get STATE_READONLY.</div>
   228   <div id="checkbox_required_true" role="checkbox" aria-required="true">This checkbox has aria-required="true" and should get STATE_REQUIRED.</div>
   229   <div id="checkbox_required_false" role="checkbox" aria-required="false">This checkbox has aria-required="false" and should <emph>not</emph> get STATE_REQUIRED.</div>
   230   <div id="checkbox_required_empty" role="checkbox" aria-required="">This checkbox has aria-required="" and should <emph>not</emph> get STATE_REQUIRED.</div>
   231   <div id="checkbox_required_undefined" role="checkbox" aria-required="undefined">This checkbox has aria-required="undefined" and should <emph>not</emph> get STATE_REQUIRED.</div>
   232   <div id="checkbox_required_absent" role="checkbox">This checkbox has <emph>no</emph> aria-required attribute and should <emph>not</emph> get STATE_REQUIRED.</div>
   234   <div id="checkbox_invalid_true" role="checkbox" aria-invalid="true">This checkbox has aria-invalid="true" and should get STATE_INVALID.</div>
   235   <div id="checkbox_invalid_false" role="checkbox" aria-invalid="false">This checkbox has aria-invalid="false" and should <emph>not</emph> get STATE_INVALID.</div>
   236   <div id="checkbox_invalid_empty" role="checkbox" aria-invalid="">This checkbox has aria-invalid="" and should <emph>not</emph> get STATE_INVALID.</div>
   237   <div id="checkbox_invalid_undefined" role="checkbox" aria-invalid="undefined">This checkbox has aria-invalid="undefined" and should <emph>not</emph> get STATE_INVALID.</div>
   238   <div id="checkbox_invalid_absent" role="checkbox">This checkbox has <emph>no</emph> aria-invalid attribute and should <emph>not</emph> get STATE_INVALID.</div>
   240   <div id="checkbox_disabled_true" role="checkbox" aria-disabled="true" tabindex="0">This checkbox has aria-disabled="true" and should get STATE_DISABLED.</div>
   241   <div id="checkbox_disabled_false" role="checkbox" aria-disabled="false">This checkbox has aria-disabled="false" and should <emph>not</emph> get STATE_DISABLED.</div>
   242   <div id="checkbox_disabled_empty" role="checkbox" aria-disabled="">This checkbox has aria-disabled="" and should <emph>not</emph> get STATE_DISABLED.</div>
   243   <div id="checkbox_disabled_undefined" role="checkbox" aria-disabled="undefined">This checkbox has aria-disabled="undefined" and should <emph>not</emph> get STATE_DISABLED.</div>
   244   <div id="checkbox_disabled_absent" role="checkbox">This checkbox has <emph>no</emph> aria-disabled attribute and should <emph>not</emph> get STATE_DISABLED.</div>
   246   <div id="listbox_multiselectable_true" role="listbox" aria-multiselectable="true">
   247     <div id="option_checked_true" role="option" aria-checked="true">item</div>
   248   </div>
   249   <div id="listbox_multiselectable_false" role="listbox" aria-multiselectable="false">
   250     <div id="option_checked_false" role="option" aria-checked="false">item</div>
   251   </div>
   252   <div id="listbox_multiselectable_empty" role="listbox" aria-multiselectable="">
   253     <div id="option_checked_empty" role="option" aria-checked="">item</div>
   254   </div>
   255   <div id="listbox_multiselectable_undefined" role="listbox" aria-multiselectable="undefined">
   256     <div id="option_checked_undefined" role="option" aria-checked="undefined">item</div>
   257   </div>
   258   <div id="listbox_multiselectable_absent" role="listbox">
   259     <div id="option_checked_absent" role="option">item</div>
   260   </div>
   262   <div role="menu">
   263     <div id="menuitem_checked_true" role="menuitem" aria-checked="true">This menuitem has aria-checked="true" and should get STATE_CHECKABLE. It should also get STATE_checked.</div>
   264     <div id="menuitem_checked_false" role="menuitem" aria-checked="false">This menuitem has aria-checked="false" and should get STATE_CHECKABLE.</div>
   265     <div id="menuitem_checked_empty" role="menuitem" aria-checked="">This menuitem has aria-checked="" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   266     <div id="menuitem_checked_undefined" role="menuitem" aria-checked="undefined">This menuitem has aria-checked="undefined" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   267     <div id="menuitem_checked_absent" role="menuitem">This menuitem has <emph>no</emph> aria-checked attribute and should <emph>not</emph> get STATE_CHECKABLE.</div>
   269     <div id="menuitemradio_checked_true" role="menuitemradio" aria-checked="true">This menuitem has aria-checked="true" and should get STATE_CHECKABLE. It should also get STATE_checked.</div>
   270     <div id="menuitemradio_checked_false" role="menuitemradio" aria-checked="false">This menuitem has aria-checked="false" and should get STATE_CHECKABLE.</div>
   271     <div id="menuitemradio_checked_empty" role="menuitemradio" aria-checked="">This menuitem has aria-checked="" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   272     <div id="menuitemradio_checked_undefined" role="menuitemradio" aria-checked="undefined">This menuitem has aria-checked="undefined" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   273     <div id="menuitemradio_checked_absent" role="menuitemradio">This menuitem has <emph>no</emph> aria-checked attribute but should get STATE_CHECKABLE.</div>
   274   </div>
   276   <div id="radio_checked_true" role="radio" aria-checked="true">This menuitem has aria-checked="true" and should get STATE_CHECKABLE. It should also get STATE_CHECKED.</div>
   277   <div id="radio_checked_false" role="radio" aria-checked="false">This menuitem has aria-checked="false" and should get STATE_CHECKABLE.</div>
   278   <div id="radio_checked_empty" role="radio" aria-checked="">This menuitem has aria-checked="" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   279   <div id="radio_checked_undefined" role="radio" aria-checked="undefined">This menuitem has aria-checked="undefined" and should <emph>not</emph> get STATE_CHECKABLE.</div>
   280   <div id="radio_checked_absent" role="radio">This menuitem has <emph>no</emph> aria-checked attribute but should get STATE_CHECKABLE.</div>
   282   <div id="textbox_readonly_true" role="textbox" aria-readonly="true"></div>
   283   <div id="textbox_readonly_false" role="textbox" aria-readonly="false"></div>
   284   <div id="textbox_readonly_empty" role="textbox" aria-readonly=""></div>
   285   <div id="textbox_readonly_undefined" role="textbox" aria-readonly="undefined"></div>
   286   <div id="textbox_readonly_absent" role="textbox"></div>
   288   <div id="textbox_multiline_true" role="textbox" aria-multiline="true"></div>
   289   <div id="textbox_multiline_false" role="textbox" aria-multiline="false"></div>
   290   <div id="textbox_multiline_empty" role="textbox" aria-multiline=""></div>
   291   <div id="textbox_multiline_undefined" role="textbox" aria-multiline="undefined"></div>
   292   <div id="textbox_multiline_absent" role="textbox"></div>
   294   <form action="">
   295     <input id="native_textbox_nativereadonly_ariatrue" readonly="readonly" aria-readonly="true"/>
   296     <input id="native_textbox_nativereadonly_ariafalse" readonly="readonly" aria-readonly="false"/>
   297     <input id="native_textbox_nativereadonly_ariaempty" readonly="readonly" aria-readonly=""/>
   298     <input id="native_textbox_nativereadonly_ariaundefined" readonly="readonly" aria-readonly="undefined"/>
   299     <input id="native_textbox_nativereadonly_ariaabsent" readonly="readonly"/>
   301     <input id="native_textbox_nativeeditable_ariatrue" aria-readonly="true"/>
   302     <input id="native_textbox_nativeeditable_ariafalse" aria-readonly="false"/>
   303     <input id="native_textbox_nativeeditable_ariaempty" aria-readonly=""/>
   304     <input id="native_textbox_nativeeditable_ariaundefined" aria-readonly="undefined"/>
   305     <input id="native_textbox_nativeeditable_ariaabsent"/>
   306   </form>
   308   <div role="tree">
   309     <div id="treeitem_selected_true" role="treeitem" aria-selected="true">This treeitem has aria-selected="true" and should get STATE_SELECTABLE. It should also get STATE_SELECTED.</div>
   310     <div id="treeitem_selected_false" role="treeitem" aria-selected="false">This treeitem has aria-selected="false" and should get STATE_SELECTABLE.</div>
   311     <div id="treeitem_selected_empty" role="treeitem" aria-selected="">This treeitem has aria-selected="" and should <emph>not</emph> get STATE_SELECTABLE.</div>
   312     <div id="treeitem_selected_undefined" role="treeitem" aria-selected="undefined">This treeitem has aria-selected="undefined" and should <emph>not</emph> get STATE_SELECTABLE.</div>
   313     <div id="treeitem_selected_absent" role="treeitem">This treeitem has <emph>no</emph> aria-selected attribute and should <emph>not</emph> get STATE_SELECTABLE.</div>
   315     <div id="treeitem_haspopup_true" role="treeitem" aria-haspopup="true">This treeitem has aria-haspopup="true" and should get STATE_HASPOPUP.</div>
   316     <div id="treeitem_haspopup_false" role="treeitem" aria-haspopup="false">This treeitem has aria-haspopup="false" and should get STATE_HASPOPUP.</div>
   317     <div id="treeitem_haspopup_empty" role="treeitem" aria-haspopup="">This treeitem has aria-haspopup="" and should <emph>not</emph> get STATE_HASPOPUP.</div>
   318     <div id="treeitem_haspopup_undefined" role="treeitem" aria-haspopup="undefined">This treeitem has aria-haspopup="undefined" and should <emph>not</emph> get STATE_HASPOPUP.</div>
   319     <div id="treeitem_haspopup_absent" role="treeitem">This treeitem has <emph>no</emph> aria-haspopup attribute and should <emph>not</emph> get STATE_HASPOPUP.</div>
   321     <div id="treeitem_expanded_true" role="treeitem" aria-expanded="true">This treeitem has aria-expanded="true" and should get STATE_EXPANDABLE. It should also get STATE_EXPANDED.</div>
   322     <div id="treeitem_expanded_false" role="treeitem" aria-expanded="false">This treeitem has aria-expanded="false" and should get STATE_EXPANDABLE. It should also get STATE_COLLAPSED.</div>
   323     <div id="treeitem_expanded_empty" role="treeitem" aria-expanded="">This treeitem has aria-expanded="" and should <emph>not</emph> get STATE_EXPANDABLE.</div>
   324     <div id="treeitem_expanded_undefined" role="treeitem" aria-expanded="undefined">This treeitem has aria-expanded="undefined" and should <emph>not</emph> get STATE_EXPANDABLE.</div>
   325     <div id="treeitem_expanded_absent" role="treeitem">This treeitem has <emph>no</emph> aria-expanded attribute and should <emph>not</emph> get STATE_EXPANDABLE.</div>
   326   </div>
   328   </body>
   329 </html>

mercurial