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
|
- 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
|
- 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
- // missing from core AAM
aria-colindex
- // 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
aria-current
aria-details
aria-errormessage
- 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
aria-modal="true" on a dialog
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
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
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
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
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
- // missing from core AAM
aria-rowindex
aria-rowspan
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
- // 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
- // missing from core AAM
figure
- // 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
- // 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
|
- 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
|
- 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
|
- 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
- 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
- // 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
- // 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
- // 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
- // 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
- // 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
- // missing from core AAM