ARIA 1.1 Testable Statements original

From W3C Wiki

ARIA 1.1 Testing Wiki Pages


THIS IS THE ORIGINAL VERSION BEFORE CONVERSION AND IS OBSOLETE - SHANE

Overview

  • The following testable statements are the tests needed for exiting ARIA 1.1 Candidate Recommendation
  • These statements are based on ARIA 1.1 Change Log
  • The wiki format for test cases is based on Fred Esch's work on SVG test cases
  • That format has been extended to allow for improved readability and increased ability to ensure test automation works seamlessly across all platforms that support it. The format in use in this file is:
=== UNIQUE NAME FOR THE TEST ===
* List documenting purpose of test

; // name of thing(s) being tested
<pre>
if given
  <element>some HTML fragment
  </element>
then CONDITIONS FOR TEST
</pre>
{| class="wikitable"
|-
|rowspan=NUMBER OF CONDITIONS|NAME OF API
|TEST CLASS
|TEST TYPE
|ASSERTION TYPE
|VALUE
... etc...
|}
  • "NAME OF API" is one of (MSAA, AXAPI, UIA, IAccessible2, or ATK)
  • "TEST CLASS" is one of (property, result, event, or TBD (to be determined))
  • "TEST TYPE" is dependent upon "TEST CLASS"
    • PROPERTY then one of (name, description, childCount, role, subrole, parentID, relations, states, controlPatterns, interfaces, or objectAttributes)
    • RESULT then an expression or method call (e.g., Selection.clear_selection())
    • EVENT @@@TODO@@@
  • ASSERTION TYPE is one of (is, isNot, contains, doesNotContain, isType, isAny)
  • VALUE is the value or values to evaluate using ASSERTION TYPE. If multiple values, enclose in brackets and separate with commas (e.g. [value1, value2, value3])

NOTE: All of these things are extensible. The list of PROPERTY values, for example, will surely need to be expanded over time as additional platform ATTAs are implemented.

ARIA Property and State Testable Statements

aria-busy="true" on a listbox

  • Changed aria-busy so that it could be applied to all elements rather than limited to live regions;
  • Added normative requirement that authors MUST set aria-busy to true if changes to a rendered widget would result in that widget missing required owned elements during the update process.
// aria-busy
if given
  <ul role="listbox" aria-busy="true" id="test">
       <li role="option">option 1</li>
       <li role="option">option 2</li>
  </ul>
then expose aria-busy="true" and role "listbox" on the element with id="test"
MSAA role ROLE_SYSTEM_LISTBOX
STATE_SYSTEM_BUSY <shown>
UIA Control Type List
AriaProperties.busy true
ATK property role is ROLE_LIST_BOX
property interfaces contains Selection
result Selection.select_child(1) is false
property states contains STATE_BUSY
AXAPI AXRole AXList
AXSubrole <nil>
AXRoleDescription 'list'
AXElementBusy YES

aria-busy="false" on a listbox

  • Changed aria-busy so that it could be applied to all elements rather than limited to live regions;
  • Added normative requirement that authors MUST set aria-busy to true if changes to a rendered widget would result in that widget missing required owned elements during the update process.
// aria-busy
if given
  <ul role="listbox" aria-busy="false" id="test">
       <li role="option">option 1</li>
       <li role="option">option 2</li>
  </ul>
then expose aria-busy="false" and role "listbox" on the element with id="test"
MSAA role ROLE_SYSTEM_LISTBOX
STATE_SYSTEM_BUSY cleared <shown>
UIA Control Type List
AriaProperties.busy false
ATK property role is ROLE_LIST_BOX
property interfaces contains Selection
result Selection.clear_selection() is false
property states doesNotContain STATE_BUSY
AXAPI AXRole AXList
AXSubrole <nil>
AXRoleDescription 'list'
AXElementBusy NO

aria-busy="true" on a grid

  • Changed aria-busy so that it could be applied to all elements rather than limited to live regions;
  • Added normative requirement that authors MUST set aria-busy to true if changes to a rendered widget would result in that widget missing required owned elements during the update process.
// aria-busy
if given
  <div role="grid" aria-busy="true" id="test">
    <div role="row">
       <div role="columnheader">shoes</div>
       <div role="columnheader">shirts</div>
    </div>
    <div role="row">
       <div role="gridcell">loafers</div>
       <div role="gridcell">polo</div>
    </div>
    <div role="row">
       <div role="gridcell">laced</div>
       <div role="gridcell">rugby</div>
    </div>
  </div>
then expose aria-busy="true" and role "grid" on the element with id="test"
MSAA role ROLE_SYSTEM_TABLE
STATE_SYSTEM_BUSY <shown>
IAccessible2 object attribute xml-roles "grid"
IAccessibleTable2 <shown>
UIA Control Type DataGrid
Selection Pattern <shown>
AriaProperties.busy true
ATK property role is ROLE_TABLE
property objectAttributes contains xml-roles:grid
property interfaces contains Table
result Selection.clear_selection() is false
property states contains STATE_BUSY
AXAPI AXRole AXTable
AXSubrole <nil>
AXRoleDescription 'grid'
AXElementBusy YES

aria-busy="false" on a grid

  • Changed aria-busy so that it could be applied to all elements rather than limited to live regions;
  • Added normative requirement that authors MUST set aria-busy to true if changes to a rendered widget would result in that widget missing required owned elements during the update process.
// aria-busy
if given
  <div role="grid" aria-busy="false" id="test">
    <div role="row">
       <div role="columnheader">shoes</div>
       <div role="columnheader">shirts</div>
    </div>
    <div role="row">
       <div role="gridcell">loafers</div>
       <div role="gridcell">polo</div>
    </div>
    <div role="row">
       <div role="gridcell">laced</div>
       <div role="gridcell">rugby</div>
    </div>
  </div>
then expose aria-busy="false" and role "grid" on the element with id="test"
MSAA role ROLE_SYSTEM_TABLE
STATE_SYSTEM_BUSY cleared <shown>
IAccessible2 object attribute xml-roles "grid"
IAccessibleTable2 <shown>
UIA Control Type DataGrid
Selection Pattern <shown>
AriaProperties.busy false
ATK property role is ROLE_TABLE
property objectAttributes contains xml-roles:grid
property interfaces contains Table
property interfaces contains Selection
result Selection.clear_selection() is false
property states doesNotContain STATE_BUSY
AXAPI AXRole AXTable
AXSubrole <nil>
AXRoleDescription 'grid'
AXElementBusy NO

aria-busy="true" on a menubar

  • Changed aria-busy so that it could be applied to all elements rather than limited to live regions;
  • Added normative requirement that authors MUST set aria-busy to true if changes to a rendered widget would result in that widget missing required owned elements during the update process.
// aria-busy
if given
  <div role="menubar" aria-busy="true" id="test">
    <div role="menuitem">File</div>
    <div role="menuitem">Edit</div>
    <div role="menuitem">View</div>
  </div>
then expose aria-busy="true" and role "menubar" on the element with id="test"
MSAA role ROLE_SYSTEM_MENUBAR
STATE_SYSTEM_BUSY <shown>
IAccessible2 object attribute xml-roles "menubar"
UIA Control Type MenuBar
Selection Pattern <shown>
AriaProperties.busy true
ATK property role is ROLE_MENU_BAR
property objectAttributes contains xml-roles:menubar
property interfaces contains Selection
result Selection.clear_selection() is false
property states contains STATE_BUSY
AXAPI AXRole AXMenuBar
AXSubrole <nil>
AXRoleDescription 'menu bar'
AXElementBusy YES

aria-busy="false" on a menubar

  • Changed aria-busy so that it could be applied to all elements rather than limited to live regions;
  • Added normative requirement that authors MUST set aria-busy to flse if changes to a rendered widget would result in that widget missing required owned elements during the update process.
// aria-busy
if given
  <div role="menubar" aria-busy="false" id="test">
    <div role="menuitem">File</div>
    <div role="menuitem">Edit</div>
    <div role="menuitem">View</div>
  </div>
then expose aria-busy="false" and role "menubar" on the element with id="test"
MSAA role ROLE_SYSTEM_MENUBAR
STATE_SYSTEM_BUSY cleared <shown>
IAccessible2 object attribute xml-roles "menubar"
UIA Control Type MenuBar
Selection Pattern <shown>
AriaProperties.busy false
ATK property role is ROLE_MENU_BAR
property objectAttributes contains xml-roles:menubar
property interfaces contains Selection
result Selection.clear_selection() is false
property states doesNotContain STATE_BUSY
AXAPI AXRole AXMenuBar
AXSubrole <nil>
AXRoleDescription 'menu bar'
AXElementBusy NO

aria-colcount

  • New property
// missing from core AAM

aria-colindex

  • New property
// aria-colindex
if given
  <div role="table">
    <div role="row">
       <div id="test" role="cell" aria-colindex="4" aria-colcount="8">test cell</div>
    </div>
  </div>
then XXXX??
MSAA TBD
UIA GridItem.Column 4
ATK TBD
AXAPI TBD

aria-colspan

  • New property

aria-current

  • New property

aria-details

  • New property

aria-errormessage

  • New property

aria-haspopup

  • Changed the value type of aria-haspopup from boolean to token. Supported values are: true, false, menu, listbox, tree, grid, and dialog.

aria-level

  • Made aria-level a required attribute for heading with an implicit value of 2.

aria-keyshortcuts

  • New property

aria-modal="true" on a dialog

  • New property
if given
  <body>
     <h1 id="Test2">Modal Dialog Box Test</h1>
     <div role="dialog" aria-modal="true" id="test">
       <input type="button" value="ok"/>
     </div>
  </body>
then the element with role="dialog" and id="test" exposes aria-modal="true"
MSAA role ROLE_SYSTEM_DIALOG
IA2 IA2_STATE_MODAL "true"
UIA Control Type Pane
Window.isModal "true"
ATK property role is ROLE_DIALOG
property interfaces contains Window
property states contains STATE_MODAL
AXAPI AXRole AXGroup
AXSubrole AXApplicationDialog
AXRoleDescription 'dialog'
The element with role="dialog" and id="test", has a parent with childcount=1, exposes aria-modal="true", and has a childcount=1 <shown>

aria-modal="false" on a dialog

  • New property
if given
  <h1 id="Test2">Modal Dialog Box Test</h1>
  <div role="dialog" aria-modal="false" id="test">
    You have an error.
    <input type="button" value="ok"/>
  </div>
then the element with role="dialog" and id="test" exposes aria-modal="true"
MSAA role ROLE_SYSTEM_DIALOG
IA2 IA2_STATE_MODAL "false"
UIA Control Type Pane
Window.isModal "false"
ATK property role is ROLE_DIALOG
property interfaces contains Window
property states doesNotContain STATE_MODAL
AXAPI AXRole AXGroup
AXSubrole AXApplicationDialog
AXRoleDescription 'dialog'
All content of id="Test2" and id="Test" and their subtrees are exposed. <shown>

aria-modal="true" on an alertdialog

  • New property
if given
  <h1 id="Test2">Modal Dialog Box Test</h1>
  <div role="alertdialog" aria-modal="true" id="test">
    You have an error.
    <input type="button" value="ok"/>
  </div>
then the element with role="dialog" and id="test" exposes aria-modal="true"
MSAA role ROLE_SYSTEM_DIALOG
IA2 IA2_STATE_MODAL <shown>
UIA Control Type Pane
Window.isModal "true"
ATK property role is ROLE_DIALOG
property interfaces contains Window
property states contains STATE_MODAL
AXAPI AXRole AXGroup
AXSubrole AXApplictionAlertDialog
AXRoleDescription 'alert dialog'
The element with id="Test2" and its subtree are missing. The tree whose root has Id "Test is exposed.

aria-modal="false" on an alertdialog

  • New property
if given
  <h1 id="Test2">Modal Dialog Box Test</h1>
  <div role="alertdialog" aria-modal="false" id="test">
    You have an error.
    <input type="button" value="ok"/>
  </div>
then the element with role="dialog" and id="test" exposes aria-modal="true"
MSAA role ROLE_SYSTEM_DIALOG
IA2 IA2_STATE_MODAL cleared <shown>
UIA Control Type Pane
Window.isModal "false"
ATK property role is ROLE_DIALOG
property interfaces contains Window
property states contains STATE_MODAL
AXAPI AXRole AXGroup
AXSubrole AXApplictionAlertDialog
AXRoleDescription 'alert dialog'
All content of id="Test2" and id="Test" and their subtrees are exposed. <shown>

No aria-orientation applied to a scrollbar

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="scrollbar" id="test"></div>
then the element with role="scrollbar" and id="test" exposes aria-orientation="vertical"
MSAA role ROLE_SYSTEM_SCROLLBAR
IA2 IA2_STATE_HORIZONTAL cleared <shown>
IA2_STATE_VERTICAL set
UIA Control Type scrollbar
Orientation "vertical"
ATK property role is ROLE_SCROLLBAR
property interfaces contains Value
property states contains STATE_VERTICAL
AXAPI AXRole AXScrollBar
AXSubrole <nil>
AXRoleDescription 'scroll bar'
AXOrientation AXVerticalOrientation

No aria-orientation applied to a slider

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="slider" id="test"></div>
then the element with role="scrollbar" and id="test" exposes aria-orientation="horizontal"
MSAA role ROLE_SYSTEM_SLIDER
IA2 IA2_STATE_VERTICAL cleared <shown>
IA2_STATE_HORIZONTAL set
UIA Control Type slider
Orientation "horizontal"
ATK property role is ROLE_SLIDER
property interfaces contains Value
property states contains STATE_HORIZONTAL
AXAPI AXRole AXSlider
AXSubrole <nil>
AXRoleDescription 'slider'
AXOrientation AXHorizontalOrientation

No aria-orientation applied to a separator

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="separator" id="test"></div>
then the element with role="separator" and id="test" exposes aria-orientation="horizontal"
MSAA role ROLE_SYSTEM_SEPARATOR
IA2 IA2_STATE_VERTICAL cleared <shown>
IA2_STATE_HORIZONTAL set
UIA Control Type Separator
Orientation "horizontal"
ATK property role is ROLE_SEPARATOR
property states contains STATE_HORIZONTAL
AXAPI AXRole AXSlider
AXSubrole <nil>
AXRoleDescription 'slider'
AXOrientation AXHorizontalOrientation

No aria-orientation applied to a tablist

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="tablist" id="test">
      <div role="tab" tabindex="0">Tab1</div><div role="tab" tabindex="-1">Tab2</div>
  </div>
  <div role="tabpanel">
  </div>
then the element with role="tablist" and id="test" exposes aria-orientation="horizontal"
MSAA role ROLE_SYSTEM_PAGETABLIST
IA2 IA2_STATE_VERTICAL cleared <shown>
IA2_STATE_HORIZONTAL set
UIA Control Type Tab
Selection Pattern <shown>
Orientation "horizontal"
ATK property role is ROLE_PAGE_TAB_LIST
property interfaces contains Selection
property states contains STATE_HORIZONTAL
AXAPI AXRole AXTabGrup
AXSubrole <nil>
AXRoleDescription 'tabgroup'
AXOrientation AXHorizontalOrientation

No aria-orientation applied to a toolbar

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="toolbar" id="test">
     <button value="b1"> <button value="b2">
  </div>
then the element with role="toolbar" and id="test" exposes aria-orientation="horizontal"
MSAA role ROLE_SYSTEM_TOOLBAR
IA2 IA2_STATE_VERTICAL cleared <shown>
IA2_STATE_HORIZONTAL set
UIA Control Type ToolBar
Orientation "horizontal"
ATK property role is ROLE_TOOL_BAR
property states contains STATE_HORIZONTAL
AXAPI AXRole AXToolbar
AXSubrole <nil>
AXRoleDescription 'toolbar'
AXOrientation AXHorizontalOrientation

aria-orientation = "vertical" on a toolbar

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="toolbar" aria-orientation="vertical" id="test">
     <button value="b1"> <button value="b2">
  </div>
then the element with role="toolbar" and id="test" exposes aria-orientation="vertical"
MSAA role ROLE_SYSTEM_TOOLBAR
IA2 IA2_STATE_VERTICAL set <shown>
IA2_STATE_HORIZONTAL cleared
UIA Control Type ToolBar
Orientation "vertical"
ATK property role is ROLE_TOOL_BAR
property states contains STATE_VERTICAL
AXAPI AXRole AXToolbar
AXSubrole <nil>
AXRoleDescription 'toolbar'
AXOrientation AXVerticalOrientation

aria-orientation="horizontal" applied to a toolbar

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="toolbar" aria-orientation="horizontal" id="test">
     <button value="b1"> <button value="b2">
  </div>
then the element with role="toolbar" and id="test" exposes aria-orientation="horizontal"
MSAA role ROLE_SYSTEM_TOOLBAR
IA2 IA2_STATE_VERTICAL cleared <shown>
IA2_STATE_HORIZONTAL set
UIA Control Type ToolBar
Orientation "horizontal"
ATK property role is ROLE_TOOL_BAR
property states contains STATE_HORIZONTAL
AXAPI AXRole AXToolbar
AXSubrole <nil>
AXRoleDescription 'toolbar'
AXOrientation AXHorizontalOrientation

aria-orientation = "vertical" on a tablist

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="tablist" aria-orientation="vertical" id="test">
      <div role="tab" tabindex="0">Tab1</div><div role="tab" tabindex="-1">Tab2</div>
  </div>
  <div role="tabpanel">
  </div>
then the element with role="tablist" and id="test" exposes aria-orientation="vertical"
MSAA role ROLE_SYSTEM_PAGETABLIST
IA2 IA2_STATE_VERTICAL set <shown>
IA2_STATE_HORIZONTAL cleared
UIA Control Type Tab
Selection Pattern <shown>
Orientation "vertical"
ATK property role is ROLE_PAGE_TAB_LIST
property interfaces contains Selection
property states contains STATE_VERTICAL
AXAPI AXRole AXTabGrup
AXSubrole <nil>
AXRoleDescription 'tabgroup'
AXOrientation AXVerticalOrientation

aria-orientation="horizontal" applied to a toolbar

  • aria-orientation now defaults to undefined, and is allowed on more roles with implicit defaults defined per role.
if given
  <div role="toolbar" aria-orientation="horizontal" id="test">
     <button value="b1"> <button value="b2">
  </div>
then the element with role="toolbar" and id="test" exposes aria-orientation="horizontal"
MSAA role ROLE_SYSTEM_TOOLBAR
IA2 IA2_STATE_VERTICAL cleared <shown>
IA2_STATE_HORIZONTAL set
UIA Control Type ToolBar
Orientation "horizontal"
ATK property role is ROLE_TOOL_BAR
property states contains STATE_HORIZONTAL
AXAPI AXRole AXToolbar
AXSubrole <nil>
AXRoleDescription 'toolbar'
AXOrientation AXHorizontalOrientation

aria-placeholder

  • New property
if given
  <div contenteditable="true" role="textbox" aria-placeholder="DD/MM/YYYY" id="test">
  "DD/MM/YYYY"
  </div>
then the element with role="textbox" and id="test" exposes aria-placeholder="DD/MM/YYYY"
MSAA role ROLE_SYSTEM_TEXT
IA2 IA2_STATE_SINGLE_LINE <shown>
object attribute placeholder "DD/MM/YYYY"
UIA Control Type Edit
AriaProperties.placeholder "DD/MM/YYYY"
ATK property role is ROLE_ENTRY
property interfaces contains EditableText
property states contains STATE_SINGLE_LINE
property objectAttributes contains placeholder-text:DD/MM/YYYY
AXAPI AXRole AXTextField
AXSubrole <nil>
AXRoleDescription 'text field'
AXOrientation AXHorizontalOrientation

aria-readonly

  • Added aria-readonly as a supported property of checkbox, menuitemcheckbox, menuitemradio, and switch. Because this property should not apply to radio, radio was made a subclass of input.
  • Added aria-readonly as a supported property of: combobox, listbox, radiogroup, slider, and spinbutton.

aria-rowcount

  • New property
// missing from core AAM

aria-rowindex

  • New property

aria-rowspan

  • New property

aria-setsize

  • Added -1 as a valid value for aria-setsize as a means to indicate that the set size is unknown and should not be calculated by user agents.

aria-valuemax

  • Expanded explanation of "supported" vs. "required" states and properties. Added implicit default values of aria-valuemin, aria-valuemax, and aria-valuenow when they are required for roles scrollbar, slider, and spinbutton.

aria-valuemin

  • Expanded explanation of "supported" vs. "required" states and properties. Added implicit default values of aria-valuemin, aria-valuemax, and aria-valuenow when they are required for roles scrollbar, slider, and spinbutton.

aria-valuenow

  • Expanded explanation of "supported" vs. "required" states and properties. Added implicit default values of aria-valuemin, aria-valuemax, and aria-valuenow when they are required for roles scrollbar, slider, and spinbutton.


role "button" with aria-roledescription="SassyButton"

  • New property
  • Explicitly prohibit use of empty and whitespace-only values for aria-roledescription. Add several normative requirements for authors, user agents, and assistive technologies.
if given
  <div role="button" aria-roledescription="SassyButton" id="test">
  Go Fish
  </div>
then the element with role="button" and id="test" exposes aria-roledescription="SassyButton"
MSAA role ROLE_SYSTEM_PUSHBUTTON
IA2 IAccessible2_2.localizedExtendedRole "SassyButton"
UIA Control Type Button
Localized Control Type "SassyButton"
ATK property role is ROLE_PUSH_BUTTON
property objectAttributes contains roledescription:SassyButton
AXAPI AXRole AXButton
AXSubrole <nil>
AXRoleDescription 'SassyButton'

input type="button" with aria-roledescription="SassyButton"

  • New property
  • Explicitly prohibit use of empty and whitespace-only values for aria-roledescription. Add several normative requirements for authors, user agents, and assistive technologies.
if given
  <input type="button" value="Go Fish" aria-roledescription="SassyButton" id="test"/>
then the element with role="button" and id="test" exposes aria-roledescription="SassyButton"
MSAA role ROLE_SYSTEM_PUSHBUTTON
IA2 IAccessible2_2.localizedExtendedRole "SassyButton"
UIA Control Type Button
Localized Control Type "SassyButton"
ATK property role is ROLE_PUSH_BUTTON
property objectAttributes contains roledescription:SassyButton
AXAPI AXRole AXButton
AXSubrole <nil>
AXRoleDescription 'SassyButton'

role button with aria-roledescription empty

  • New property
  • Explicitly prohibit use of an empty value for aria-roledescription
if given
  <div role="button" aria-roledescription="" id="test">
  Go Fish
  </div>
then the element with role="button" and id="test" don't expose aria-roledescription
MSAA role ROLE_SYSTEM_PUSHBUTTON
IA2 IAccessible2_2.localizedExtendedRole null
UIA Control Type Button
Localized Control Type "Button"
ATK property role is ROLE_PUSH_BUTTON
property objectAttributes doesNotContain roledescription
AXAPI AXRole AXButton
AXSubrole <nil>
AXRoleDescription 'button'

role button and aria-roledescription spaces

  • New property
  • Explicitly use of whitespace-only values for aria-roledescription.
if given
  <div role="button" aria-roledescription="    " id="test">
  Go Fish
  </div>
then the element with role="button" and id="test" does not expose aria-roledescription
MSAA role ROLE_SYSTEM_PUSHBUTTON
UIA Control Type Edit
Localized Control Type "button"
ATK property role is ROLE_PUSH_BUTTON
property objectAttributes doesNotContain roledescription
AXAPI AXRole AXButton
AXSubrole <nil>
AXRoleDescription 'button'

ARIA Role Testable Statements

alert

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel.
// NO CHANGE IN MAPPINGS

application

  • Added aria-activedescendant as a supported property of application
  • Changed the superclass of application from landmark to structure;
// div application, div child, aria-activedescendant
  if given
   <div id='test' role='application' aria-activedescendant='bob'>
     <div id='bob' tabindex='0' class='bobber'>Hello world</div>
  </div>
 then role:application, aria-activedescendant: bob
MSAA ROLE_SYSTEM_APPLICATION
UIA Control Type Pane
Localized Control Type application
ATK property role is ROLE_EMBEDDED
AXAPI AXRole AXGroup
AXSubrole AXWebApplication
AXRoleDescription web application
array AXSelectedRows pointer id='bob'

article

  • Made aria-posinset and aria-setsize supported properties of article;
// div article, aria-posinset, aria-setsize
if given 
  <div id="test" role="article" aria-posinset="4" aria-setsize="8">test cell</div>
then role: article, aria-posinset: 4, aria-setsize: 8
MSAA role ROLE_SYSTEM_DOCUMENT
STATE_SYSTEM_READONLY <shown>
IAccessible2 object xml-roles article
posinset 4
setsize 8
groupPosition() similarItemsInGroup 8
positionInGroup 4
UIA control type Group
localize control type article
AriaProperties posinset 4
setsize 8
ATK property role is ROLE_ARTICLE
property objectAttributes contains xml-roles:article
property objectAttributes contains posinset:4
property objectAttributes contains setsize:8
AXAPI AXRole AXGroup
AXSubrole AXDocumentArticle
AXDescription article
AXARIAPosInSet 4
AXARIASetSize 8

cell

  • New role
// span cell, aria-colindex, aria-colcount
// aria-colindex, aria-colcount missing from core AAM
  if given
  <div role="table">
    <div role="row">
       <span id="test" role="cell" aria-colindex="4" aria-colcount="8">test cell</span>
    </div>
  </div>
 then role: cell, aria-colindex: 4, aria-colcount:8
MSAA role ROLE_SYSTEM_CELL
UIA Control Type TableItem
Selection pattern TODO
NOT invoke pattern TODO
ATK property role is ROLE_TABLE_CELL
property interfaces contains TableCell
AXAPI AXRole AXCell
AXSubrole <nil>
AXRoleDescription 'cell'

checkbox

  • Added non-default value (false) for aria-checked to checkable widget roles: checkbox, menuitemcheckbox, menuitemradio, and radio.
// div checkbox, aria-checked false
if given
  <div id='test' role='checkbox' aria-checked='false' class='chkbox'>I like cars</div>
then role: checkbox, aria-checked: false
MSAA ROLE_SYSTEM_CHECKBUTTON
NOT STATE_SYSTEM_CHECKED
IAccessibile2 object checkable true
UIA Control Type Checkbox
Toggle ToggleState Off
ATK property role is ROLE_CHECK_BOX
property states contains STATE_CHECKABLE
propert states doesNotContain STATE_CHECKED
AXAPI AXRole AXCheckbox
AXSubrole <nil>
AXDescription check box
AXValue 0

checkbox

// div checkbox, aria-checked true
if given
  <div id='test' role='checkbox' aria-checked='true' class='chkbox'>I like cars</div>
then role: checkbox, aria-checked: true
MSAA ROLE_SYSTEM_CHECKBUTTON
STATE_SYSTEM_CHECKED
IAccessibile2 object checkable true
UIA Control Type Checkbox
Toggle ToggleState On
ATK property role is ROLE_CHECK_BOX
property states contains STATE_CHECKABLE
property states contains STATE_CHECKED
AXAPI AXRole AXCheckbox
AXSubrole <nil>
AXDescription check box
AXValue 1

columnheader

  • Removed widget as one of the immediate superclasses of columnheader and rowheader.
  • Headers that subclass gridcell will still inherit the supported properties of widget.
// NO CHANGE IN MAPPINGS

combobox

  • Expanded the roles which can be owned by a combobox to include tree, grid, and dialog.
  • Implicit value for aria-haspopup for role combobox was changed from true to listbox.
  • Removed the implicit value for aria-orientation on combobox
  • Authoring patterns changed to allow combobox role on textbox

directory

  • Removed directory as a superclass of tablist.
// NO CHANGE IN MAPPINGS

document

  • Removed the accessible name requirement from document.
// NO CHANGE IN MAPPINGS

feed

  • New role
// missing from core AAM

figure

  • New role
// missing from core AAM

grid

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel.
  • Made gridcell and grid subclasses of cell and table respectively.
// div grid, aria-colcount,aria-rowcount
// missing aria-colcount and aria-rowcount from core AAM
if given
  <div role='grid' id='test' aria-rowcount='3' aria-colcount='2'>
   <div role='row'>
      <span role='gridcell'> 
        <button>hello</button>
     </span>
   </div>
  </div>
then role: grid, colcount: 2, rowcount: 3
MSAA ROLE_SYSTEM_TABLE
IAccessible2 IAccessibleTable2
UIA DataGrid
Selection pattern TODO
ATK property role is ROLE_TABLE
property objectAttributes contains xml-roles:grid
property interfaces contains Table
property interfaces contains Selection
AXAPI AXRole AXTable
AXSubrole <nil>
AXDescription grid

gridcell

  • Made gridcell and grid subclasses of cell and table respectively. Removed widget as one of the immediate superclasses of columnheader and rowheader. Headers that subclass gridcell will still inherit the supported properties of widget.

input

  • Removed input as a superclass of scrollbar and select.
// NO CHANGE IN MAPPINGS

landmark

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel.
// NO CHANGE IN MAPPINGS

list

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel
  • Removed list as a superclass of menu and listbox, making it a related concept of each.
// NO CHANGE IN MAPPINGS

log

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel.
// log, implicit aria-live polite
if given
  <div id='test' role='log' > </div>
then role: log
IAccessible2 object xml-roles log
container-live polite
live polite
container-live-role log
UIA Control Type Group
Localized Control Type log
LiveSettingProperty Polite
ATK property role is ROLE_LOG
property objectAttributes contains xml-roles:log
property objectAttributes contains container-live:polite
property objectAttributes contains live:polite
property objectAttributes contains container-live-role:log
AXAPI AXRole AXGroup
AXSubrole AXApplicationLog
AXRoleDescription log

main

  • new role
// main
if given
  <div id='test' role='main'>Hellp world</div>
then role: main
Iaccessible2 IA2_ROLE_LANDMARK
object xml-roles main
UIA Control Type Group
Localized Control Type main
Landmark Type Main
Localized Landmark Type main
ATK property role is ROLE_LANDMARK
property objectAttributes contains xml-roles:main
AXAPI AXRole AXGroup
AXSubrole AXLandmarkMain
AXRoleDescription main

menuitem

  • Added aria-posinset and aria-setsize as supported properties of menuitem.
  • Remove children-presentational true from menuitem and treeitem.
// menuitem, aria-posinset, aria-setsize
if given
  <ul role='menu'>Menu
    <li role='menuitem'> option 1</li>
    <li role='menuitem' id='test' aria-posinset='4' aria-setsize='8'> option 2</li>
    <li role='menuitem'> option 3</li>
  </ul>

then role: menuitem, aria-posinset:4, aria-setsize:8

MSAA ROLE_SYSTEM_MENUITEM
IAccessible2 object posinset 4
setsize 8
groupPosition() similarItemsInGroup 8
positionInGroup 4
UIA Control Type MenuItem
AriaProperties posinset 4
setsize 8
ATK property role is ROLE_MENU_ITEM
property objectAttributes contains posinset:4
property objectAttributes contains setsize:8
AXAPI AXRole AXMenuItem
AXSubrole <nil>
AXRoleDescription menu item
AXARIAPosInSet 4
AXARIASetSize 8

menuitemcheckbox

  • Added non-default value (false) for aria-checked to checkable widget roles: checkbox, menuitemcheckbox, menuitemradio, and radio.
// menuitemcheckbox, aria-posinset, aria-setsize
if given
  <ul role='menu'>Menu
    <li role='menuitem'> option 1</li>
    <li role='menuitemcheckbox' id='test' aria-posinset='4' aria-setsize='8' 
        class='ckbox' aria-checked='true'>panda doodles</li>
    <li role='menuitem'> option 3</li>
  </ul>

then role: menuitemcheckbox, aria-posinset:4, aria-setsize:8, aria-checked:true

MSAA OR ROLE_SYSTEM_MENUITEM ROLE_SYSTEM_CHECKBUTTON
IAccessible2 IA2_ROLE_CHECK_MENU_ITEM
object checkable true
posinset 4
setsize 8
groupPosition() similarItemsInGroup 8
positionInGroup 4
UIA Control Type MenuItem
Toggle ToggleState On
AriaProperties posinset 4
setsize 8
ATK property role is ROLE_CHECK_MENU_ITEM
property states contains STATE_CHECKABLE
property states contains STATE_CHECKED
property objectAttributes contains posinset:4
property objectAttributes contains setsize:8
AXAPI AXRole AXMenuItem
AXSubrole <nil>
AXRoleDescription menu item
AXValue 1
AXARIAPosInSet 4
AXARIASetSize 8

menuitemradio

  • Added non-default value (false) for aria-checked to checkable widget roles: checkbox, menuitemcheckbox, menuitemradio, and radio.
// menuitemradio
if given
  <ul role='menu'>Menu
    <li role='menuitemradio'> option 1</li>
    <li role='menuitemradio'> option 2</li>
    <li role='menuitemradio'  id='test' > option 3</li>
  </ul>

then role: menuitemradio

MSAA OR ROLE_SYSTEM_RADIOBUTTON ROLE_SYSTEM_MENUITEM
IAccessibile2 IA2_ROLE_RADIO_MENU_ITEM
object checkable true
UIA Control Type MenuItem
Toggle ToggleState Off
SelectItem Pattern
ATK property role is ROLE_RADIO_MENU_ITEM
property states contains STATE_CHECKABLE
property states doesNotContain STATE_CHECKED
AXAPI AXRole AXMenuItem
AXSubrole <nil>
AXDescription menu item
AXMenuItemMarkChar <nil>

option

  • Moved aria-selected from "supported" to "required" attribute list for option role.
// NO CHANGE IN MAPPINGS

none

  • New role, replaces presentation role
  • Add children-presentational true to checkbox, menuitem, menuitemcheckbox, menuitemradio, option, radio, spinbutton, switch, tab, and treeitem.

radio

  • radio no longer inherits from option, just from checkbox.
  • radio now adds aria-posinset and aria-setsize.
// div, radio role, aria-checked false
if given
  <div id='test' role='radio' aria-checked='false' class='radio' aria-posinset='4' aria-setsize='8'>Car</div>
then role: radio, aria-checked: false, aria-posinset: 4 aria-setsize: 8
MSAA ROLE_SYSTEM_RADIOBUTTON
NOT STATE_SYSTEM_CHECKED
IAccessibile2 object checkable true
posinset 4
setsize 8
groupPosition() similarItemsInGroup 8
positionInGroup 4
UIA Control Type RadioButton
Toggle ToggleState Off
AriaProperties posinset 4
setsize 8
ATK property role is ROLE_RADIO_BUTTON
property states doesNotContain STATE_CHECKABLE
property states doesNotContain STATE_CHECKED
property objectAttributes contains posinset:4
property objectAttributes contains setsize:8
AXAPI AXRole AXRadioButton
AXSubrole <nil>
AXDescription radio button
AXValue 0
AXARIAPosInSet 4
AXARIASetSize 8

region

  • Made region a type of landmark.
  • Add requirement that authors MUST give a region a brief label that describes the purpose of the content it contains.
  • Remove the accessible name property from the section role.
  • Remove region as a superclass role of article, making document the only superclass role of article.
// NO CHANGE IN MAPPINGS

rowheader

  • Removed widget as one of the immediate superclasses of columnheader and rowheader.
  • Headers that subclass gridcell will still inherit the supported properties of widget.
// NO CHANGE IN MAPPINGS

rowgroup

  • Changed rowgroup to subclass structure instead of group.
// NO CHANGE IN MAPPINGS

search

  • New role
// div search
if given
  <div id='test' role='search' contenteditable='true'></div>
then role:search, contenteditable:true
IAccessible2 IA2_ROLE_LANDMARK
object xml-roles search
UIA Control Type Group
Localized Control Type search
Landmark Type Search
Localized Landmark Type search
ATK property role is ROLE_LANDMARK
property objectAttributes contains xml-roles:search
AXAPI AXRole AXGroup
AXSubrole AXLandmarkSearch
AXRoleDescription search

searchbox

  • New role
// div searchbox, default single line
if given
  <div id='test' role='searchbox' contenteditable='true'></div>
then role:searchbox, contenteditable:true
MSAA ROLE_SYSTEM_TEXT
IAccessible2 object xml-roles search
UIA Control Type Edit
Localized Control Type search box
ATK property role is ROLE_ENTRY
property states contains STATE_SINGLE_LINE
property interfaces contains EditableText
AXAPI AXRole AXTextField
AXSubrole AXSearchField
AXRoleDescription search text field

searchbox-multiline

  • New role
// div searchbox, role search, multiline
if given
  <div id='test' role='searchbox' contenteditable='true' aria-multiline='true'></div>
then role:searchbox, contenteditable:true
MSAA ROLE_SYSTEM_TEXT
IAccessible2 IA2_MULTI_LINE
NOT IA2_SINGLE_LINE
object xml-roles search
UIA Control Type Edit
Localized Control Type search box
AriaProperties multiline true
ATK property role is ROLE_ENTRY
property states doesNotContain STATE_SINGLE_LINE
property states contains STATE_MULTI_LINE
property interfaces contains EditableText
AXAPI AXRole AXTextField
AXSubrole AXSearchField
AXRoleDescription search text field

separator

  • Add widget as a (possible) superclass of separator.
  • Add aria-valuemax, aria-valuemin, aria-valuenow, and aria-valuetext as supported properties of separator.
  • Make aria-valuenow a required property, and remove aria-expanded as a supported state, of focusable separator elements.

spinbutton

  • Remove children-presentational true from spinbutton
  • Make spinbutton a subclass of composite.
  • Updated text regarding implicit values for spinbutton: Default for aria-valuenow is 0. There is no minimum value for aria-valuemin and no maximum value for aria-valuemax.


status

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel.
// div status, aria-expanded false
If given
  <div role='status' id='test' aria-expanded='false'> </div>
then role: status, aria-expanded: false
MSAA ROLE_SYSTEM_STATUSBAR
STATE_SYSTEM_EXPANDED
IAccessible2 object container-live polite
live polite
container-live-role status
UIA Control Type Group
Localized Control Type status
LiveSettingProperty 1
ExpandCollapse ExpandCollapseState expanded
ATK property role is ROLE_STATUSBAR
property objectAttributes contains container-live:polite
property objectAttributes contains live:polite
property objectAttributes contains container-live-role:status
property states contains STATE_EXPANDABLE
property states doesNotContain STATE_EXPANDED
AXAPI AXRole AXGroup
AXSubrole AXApplicationStatus
AXRoleDescription status
AXExpanded YES

switch

  • New role
// div switch, aria-checked false
if given
  <div id='test' role='switch' aria-checked='false' class='switch'>power</div>
then role: switch, aria-checked: false
IAccessibile2 IA2_ROLE_TOGGLE_BUTTON
object xml-roles switch
UIA Control Type Button
Localized Control Type toggleswitch
Toggle ToggleState Off
ATK property role is ROLE_TOGGLE_BUTTON
property states contains STATE_CHECKABLE
property states doesNotContain STATE_CHECKED
AXAPI AXRole AXCheckbox
AXSubrole AXSwitch
AXDescription switch
AXValue 0

tab

  • Added aria-posinset and aria-setsize to tab.
// div tab, aria-posinset and aria-setsize
if given
  <div role='tabpanel'>
    <div role='tab' aria-selected='false'>Hello Mary</div>
    <div role='tab' id='test' aria-selected='true' aria-posinset='3' aria-setsize='7'>Hello Bob</div>
  </div>
then role:tab, aria-selected: true, aria-posinset: 3, aria-setsize: 7 
MSAA ROLE_SYSTEM_PAGETAB
STATE_SYSTEM_SELECTED
STATE_SYSTEM_SELECTABLE
IAccessible2 object posinset 3
setsize 7
groupPosition() similarItemsInGroup 7
positionInGroup 3
UIA Control Type TabItem
AriaProperties posinset 3
setsize 7
SelectionItem IsSelected
ATK property role is ROLE_PAGE_TAB
property states contains STATE_SELECTED
property states contains STATE_SELECTABLE
property objectAttributes contains posinset:3
property objectAttributes contains setsize:7
AXAPI AXRole AXRadioButton
AXSubrole <nil>
AXRoleDescription tab
AXARIAPosInSet 3
AXARIASetSize 7
AXSelected YES

table

  • new role
// div table, colcount, rowcount
// aria-rowcount and aria-colcount not in core AAM
if given 
  <div role='table' id='test' aria-rowcount='3' aria-colcount='2'>
    <div role='row'> 
      <span role='cell'>cheese</span>
    </div>
  </div>
then role: table, aria-colcount: 2, aria-rowcount: 3
MSAA ROLE_SYSTEM_TABLE
IAccessible2 object xml-roles table
IAccessibleTable2
UIA Control Type Table
grid pattern TODO
table pattern TODO
ATK property role is ROLE_TABLE
property objectAttributes contains xml-roles:table
property interfaces contains Table
AXAPI AXRole AXTable
AXSubrole <nil>
AXRoleDescription grid

tabpanel

  • Change the superclass role from region to section for the following roles: alert, grid, landmark, list, log, status, and tabpanel.
// NO CHANGE IN MAPPINGS

term

  • New role
// missing from core AAM