This Wiki page is edited by participants of the Protocols and Formats Working Group. It does not necessarily represent consensus and it may have incorrect information or information that is not supported by other Working Group participants, WAI, or W3C. It may also have some very useful information.
ARIA/Tests/Testable Statements
From Protocols and Formats Working Group Wiki
This is a page to work out testable statements for ARIA 1.0 testing. Tests will be migrated to the draft implementation report when ready.
Contents |
Format definition and common reference values
Statement format guidelines
Statement has form "An ELEMENT has RESULT" where:
- ELEMENT is a element in tag form that provides the conditions of the test.
- If the element contains references to other elements, it uses one of the predefined elements listed below.
- If the test needs to self-reference ELEMENT, id="0" is assigned to ELEMENT.
- RESULT is a statement of form " accessible ROLE/STATE/PROPERTY=literal-value"
Testable statements with expected results varying by API
If the expected result of a testable statement does not vary by accessibility API, include the expected result as the final clause of the testable statement.
If the expected result is different in different APIs, the expected result in the testable statement should be "as defined". Then, provide a bulleted list following the expected results that details the results for each API. Begin each bullet with a flag to indicate the AAPI it references, as follows:
- MSAA: MSAA + UIA Express
- IA2: MSAA + IAccessible2
- UIA: UIA
- ATK: ATK/AT-SPI
- AX: Mac OS X
Sample testable statement using this format:
An element with ... has accessible ... according to the AAPI in use, as follows.
- MSAA: ...
- IA2: ...
- UIA: ...
- ATK: ...
- AX: ...
Predefined text values
The text values of the following given elements can be used for reference in any testable statement. Note that the included white space in the text of the elements is intentional to test the requirements for concatenation.
<h1 id="ID1">foo</h1> <p id="ID2">bar </p> <a id="ID3"> baz </a>
Definition of 'BLANK'
It is possible for the accessible name calculation to have no result. However, there is no restriction on how accessibility APIs represent a non-result. The API could use the empty string (""), or a null result. For the purpose of testable statements, this outcome is captured by stating the result is BLANK.
Accessible name computation tests
DIV Tests
Note: any text listing attributes which are specified in parentheses is optional for the test. The results should be the same whether the attribute listed is specified or not.
If given <DIV aria-labelledby="ID1">ABC</DIV> (and aria-label is not specified and title is not specified) then accessible name = "foo"
If given <DIV aria-label="Tag">ABC</DIV> and aria-labelledby is not specified (and title is not specified) then accessible name = "Tag"
If given <DIV aria-labelledby="ID1" aria-label="Tag">ABC</DIV> (and title is not specified) then accessible name = "foo"
If given <DIV id="ID0" aria-labelledby="ID0 ID1" aria-label="Tag">ABC</DIV> (and title is not specified) then accessible name = "Tag foo"
If given <DIV>ABC</DIV> and aria-label is not specified and aria-labelledby is not specified and title is not specified and role is not specified then accessible name is BLANK
If given <DIV role="button">ABC</DIV> and aria-label is not specified and aria-labelledby is not specified (and title is not specified) then accessible name = "ABC"
If given <DIV role="button" title="Tag"></DIV> and aria-label is not specified and aria-labelledby is not specified then accessible name = "Tag"
A (Link) Tests
Note: any text listing attributes which are specified in parentheses is optional for the test. The results should be the same whether the attribute listed is specified or not.
If given <A href="test.html" aria-labelledby="ID1">ABC</A> (and aria-label is not specified and title is not specified) then accessible name = "foo"
If given <A href="test.html" aria-label="Tag">ABC</A> and aria-labelledby is not specified (and title is not specified) then accessible name = "Tag"
If given <A href="test.html" aria-labelledby="ID1" aria-label="Tag">ABC</A> (and title is not specified) then accessible name = "foo"
If given <A href="test.html" id="ID0" aria-labelledby="ID0 ID1" aria-label="Tag">ABC</A> (and title is not specified) then accessible name = "Tag foo"
If given <A href="test.html">ABC</A> and aria-label is not specified and aria-labelledby is not specified (and title is not specified) then accessible name = "ABC"
If given <A href="test.html" title="Tag"></A> and aria-label is not specified and aria-labelledby is not specified then accessible name = "Tag"
IMG tests
IMG-1: If given <IMG aria-label="l"> and aria-labelledby is not specified and alt is not specified and title is not specified then accessible name = "l".
IMG-2: If given <IMG aria-label="l" alt="a" title="t">
and aria-labelledby is not specified,
then accessible name = "l".
IMG-3: If given <IMG aria-labelledby="ID1"> and aria-label is not specified and alt is not specified and title is not specified then accessible name = "foo".
IMG-4: If given <IMG aria-label="l" aria-labelledby="ID1"> and alt is not specified and title is not specified then accessible name = "foo".
IMG-5: If given <IMG id="ID0" aria-label="l" aria-labelledby="ID0 ID1"> and alt is not specified and title is not specified then accessible name = "l foo".
IMG-6: If given <IMG aria-labelledby="ID1 ID2 ID3"> and aria-label is not specified and alt is not specified and title is not specified then accessible name = "foo bar baz".
IMG-7: If given <IMG id="ID0" aria-label="l" aria-labelledby="ID0 ID1 ID2 ID3"> and alt is not specified and title is not specified then accessible name = "L foo bar baz".
IMG-8: If given <IMG id="ID0" aria-label="l" aria-labelledby="ID0 ID1 ID2 ID3" alt="a" title="t"> then accessible name = "L foo bar baz".
IMG-9: If given <IMG id="ID0" aria-label="" aria-labelledby="ID0 ID1 ID2 ID3" alt="" title="t"> then accessible name = "foo bar baz".
IMG-10: If given <IMG aria-labelledby="ID99"> and ID99 does not exist and aria-label is not specified and alt is not specified and title is not specified then accessible name is BLANK.
Not required for CR:
IMG-Optional-1: If given <IMG aria-label="l" aria-labelledby="ID99"> and ID99 does not exist and alt is not specified and title is not specified then accessible name = "l".
INPUT Tests
Definition of ANY
An INPUT element has a @type attribute that has values text, password, checkbox, radio, submit, reset, file, image, button, and hidden. The term "ANY" represents any of the values of @type, with the exceptions of hidden. The latter is a special cases and treated separately.
- <INPUT type="ANY" aria-hidden="true"> not referenced by an aria-labelledby nor aria-describedby has an accessible name = BLANK.
- <INPUT type="ANY" hidden="true"> not referenced by an aria-labelledby nor aria-describedby has an accessible name = BLANK.
- <INPUT type="hidden"> not referenced by aria-labelledby nor aria-describedby has an accessible name = BLANK.
- <INPUT type="ANY" aria-labelledby="ID1"> has an accessible name = "foo".
- <INPUT type="ANY" aria-labelledby="ID1 ID2 ID3"> has an accessible name = "foo bar baz".
- <INPUT type="ANY" aria-labelledby="ID1" aria-label="bar"> has an accessible name = "foo".
- <INPUT type="ANY" id="ID0" aria-labelledby="ID1 ID0" aria-label="bar"> has an accessible name = "foo bar".
- <INPUT type="submit"> that does not have a role="presentation" has an accessible name = "submit".
- <INPUT type="reset"> that does not have a role="presentation" has an accessible name = "reset".
- <INPUT type="button" value="foo"> that does not have a role="presentation" has an accessible name = "foo".
- <INPUT type="image" alt="foo"> that does not have a role="presentation" has an accessible name = "foo".
- <INPUT type="text" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
- <INPUT type="password" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
- <INPUT type="checkbox" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
- <INPUT type="radio" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
- <INPUT type="checkbox" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
- <INPUT type="file" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
- <INPUT type="image" id="ID0"> that is referenced by a <LABEL for="ID0">foo</LABEL> element has an accessible name = "foo".
Embedded controls -- embedded text INPUT
For reference, the following shows the structure of a label with an embedded text INPUT:
<input type="checkbox" id="id0"> <label for="id0">foo <input type="text" value="bar"> baz</label>
- <INPUT type="checkbox" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded text <INPUT value="bar"> has an accessible name = "foo bar baz".
- <INPUT type="text" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded text <INPUT value="bar"> has an accessible name = "foo bar baz".
- <INPUT type="password" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded text <INPUT value="bar"> has an accessible name = "foo bar baz".
- <INPUT type="radio" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded text <INPUT value="bar"> has an accessible name = "foo bar baz".
- <INPUT type="file" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded text <INPUT value="bar"> has an accessible name = "foo bar baz".
Embedded controls -- embedded <SELECT>, @role="MENU", or @role="COMBOBOX"
For reference, the following shows the structure of a label with an embedded SELECT. Similar markup for MENU or COMBOBOX roles applies:
<input type="checkbox" id="ID0">
<label for="IDO">Flash the screen
<select size="1">
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
</select>
times.
</label>
- <INPUT type="checkbox" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded <SELECT>,
@role="MENU", or@role="COMBOBOX"whose text alternative is "1" has an accessible name = "Flash the screen 1 times". - <INPUT type="text" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded <SELECT>,
@role="MENU", or@role="COMBOBOX"whose text alternative is "1" has an accessible name = "Flash the screen 1 times". - <INPUT type="password" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded <SELECT>,
@role="MENU", or@role="COMBOBOX"whose text alternative is "1" has an accessible name = "Flash the screen 1 times". - <INPUT type="radio" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded <SELECT>,
@role="MENU", or@role="COMBOBOX"whose text alternative is "1" has an accessible name = "Flash the screen 1 times". - <INPUT type="file" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded <SELECT>,
@role="MENU", or@role="COMBOBOX"whose text alternative is "1" has an accessible name = "Flash the screen 1 times".
Embedded controls -- embedded @role="RANGE"
These testable statements involve a concrete range object embedded in a label. The two cases are @role='spinbutton' and @role='slider'.
For reference, the following shows the structure of a label with an embedded spinner control. Similar markup for a slider control applies.
<input type="checkbox" id="id1"> <label for="id1">foo <input role="spinbutton" type="text" aria-valuenow="5" aria-valuemin="1" aria-valuemax="10"> baz</label>
- <INPUT type="checkbox" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SPINBUTTON"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="text" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SPINBUTTON"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="password" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SPINBUTTON"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="radio" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SPINBUTTON"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="file" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SPINBUTTON"whose text alternative is "5" has an accessible name = "foo 5 baz".
- <INPUT type="checkbox" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SLIDER"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="text" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SLIDER"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="password" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SLIDER"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="radio" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SLIDER"whose text alternative is "5" has an accessible name = "foo 5 baz". - <INPUT type="file" id="ID0"> that is referenced by a <LABEL for="ID0"> that contains an embedded
@role="SLIDER"whose text alternative is "5" has an accessible name = "foo 5 baz".
@title
- <INPUT type="text" title="foo"> with no aria-labelledby and no aria-label, does not have a role="presentation", is not referenced by a <LABEL> element, and has a title attribute equal to "foo", has an accessible name of "foo".
- <INPUT type="password" title="foo"> with no aria-labelledby and no aria-label, does not have a role="presentation", is not referenced by a <LABEL> element, and has a title attribute equal to "foo", has an accessible name of "foo".
- <INPUT type="checkbox" title="foo"> with no aria-labelledby and no aria-label, does not have a role="presentation", is not referenced by a <LABEL> element, and has a title attribute equal to "foo", has an accessible name of "foo".
- <INPUT type="radio" title="foo"> with no aria-labelledby and no aria-label, does not have a role="presentation", is not referenced by a <LABEL> element, and has a title attribute equal to "foo", has an accessible name of "foo".
- <INPUT type="file" title="foo"> with no aria-labelledby and no aria-label, does not have a role="presentation", is not referenced by a <LABEL> element, and has a title attribute equal to "foo", has an accessible name of "foo".
- <INPUT type="image" title="foo"> with no aria-labelledby and no aria-label, does not have a role="presentation", is not referenced by a <LABEL> element, and has a title attribute equal to "foo", has an accessible name of "foo".
CSS Content Rules
- <INPUT type="image"> that has an associated CSS content rule that replaces the image with the text "foo" has an accessible name equal to "foo".
- <INPUT type="ANY"> that has an associated CSS content rule that replaces old text with the new text "foo" has an accessible name equal to "foo".
For reference, assume the following CSS content rules:
input:before { content: "foo" }
input:after { content: "baz" }
Furthermore, assume that the name computation for the <INPUT> element has thus far generated "bar" as the accessible name before applying the above CSS content rules.
- <INPUT type="text"> that has an CSS :before content rule of "foo" and an associated CSS :after rule of "baz" has an accessible name = "foo bar baz".
- <INPUT type="password"> that has an CSS :before content rule of "foo" and an associated CSS :after rule of "baz" has an accessible name = "foo bar baz".
- <INPUT type="checkbox"> that has an CSS :before content rule of "foo" and an associated CSS :after rule of "baz" has an accessible name = "foo bar baz".
- <INPUT type="radio"> that has an CSS :before content rule of "foo" and an associated CSS :after rule of "baz" has an accessible name = "foo bar baz".
- <INPUT type="file"> that has an CSS :before content rule of "foo" and an associated CSS :after rule of "baz" has an accessible name = "foo bar baz".
aria-describedby tests
An element<img id="0" aria-describedby="ID1">, where element ID1 is visible, has accessible description according to the AAPI in use, as follows:
- MSAA: accDescription="foo"
- IA2: accDescription="foo" AND IA2_RELATION_DESCRIBED_BY contains pointer to element ID1 AND IA2_RELATION_DESCRIPTION_FOR has pointerr to element 0
- UIA:DescribedBy has pointer to element ID1
- ATK: description="foo" and RELATION_DESCRIBED_BY has pointer to element ID1 AND RELATION_DESCRIPTION_FOR has pointer to element 0
- AX: AXHelp="foo"
<img id="0" aria-describedby="ID1">, where element ID1 is NOT visible, has accessible description according to the AAPI in use, as follows:
- MSAA: accDescription="foo"
- IA2: accDescription="foo"
- UIA: not defined (exposing property not named)
- ATK: description="foo"
- AX: AXHelp="foo"
<img id="0" aria-describedby="ID1">, where element ID1 is visible and has role presentation, has accessible description according to the AAPI in use, as follows:
- MSAA: accDescription="foo"
- IA2: accDescription="foo"
- UIA: not defined (exposing property not named)
- ATK: description="foo"
- AX: AXHelp="foo"
Combobox with aria-autocomplete='list'
Context: there is proposed clarification text for the combobox role with respect to its @aria-autocomplete='list' property. The new text is for the third bullet in the combobox section explaining how to determine the currently selected value is:
- If an author sets a combobox's value of aria-autocomplete to 'list', user agents MUST expose changes to the aria-activedescendant attribute on the combobox while the combobox remains focused. ...
The above text contains a MUST, and thereby incurs testable statements.
Using this example markup:
<input type="text" role="combobox" aria-label="Tag" aria-expanded="true"
aria-autocomplete="list" aria-owns="owned_listbox" aria-activedescendant="selected_option">
<ul role="listbox" id="owned_listbox">
<li role="option">Zebra</li>
<li role="option" id="selected_option">Zoom</li>
</ul>
The testable statement is:
- <INPUT type="text">, @role="combobox", @aria-autocomplete="list", @aria-activedescendant="selected_option", the currently selected value of the combobox is "Zoom".
For this example markup:
<div role="combobox" aria-expanded="true" aria-label="Tag"
aria-autocomplete="list" aria-activedescendant="selected_option">
<input type="text" role="textbox" aria-owns="owned_listbox">
<ul role="listbox" id="owned_listbox">
<li role="option">Zebra</li>
<li role="option" id="selected_option">Zoom</li>
</ul>
</div>
The testable statetment is:
- DIV, @role="combobox", @aria-autocomplete="list", @aria-activedescendant="selected_option", the currently selected value of the combobox is "Zoom".
AT-SPI Special Case Testable Statements
AT-SPI Role
Statements are based on the UAIG role mapping table, specifically the "ATK/AT-SPI Role" column.
Because of a "SHOULD", under certain conditions, there are no testable statements for @role='listbox' nor @role='option'. This is because of their parent element. The UAIG role mapping table states that if the listbox is a child or owned by a combobox, then the AAPI role SHOULD be ROLE_MENU. Also, for @role='option': if the option's parent is a menu, then the option SHOULD have ROLE_MENU_ITEM. These are SHOULDs, not MUSTs. Hence, there is no testable statement for these conditions. (Should they be "SHOULD"?)
- listbox
- Element with id "test" having role
listboxthat is not a child of nor owned by an element with rolecombobox: The AAPI object has ROLE_LIST. - Element with id "test" having role
listboxthat is a child of or owned by an element with rolecombobox: The AAPI object has either ROLE_MENU or ROLE_LIST. - menuitem
- Element with id "test" having role
menuitemand@aria-checkednot undefined: The AAPI object has role ROLE_MENU_ITEM and supports object attributecheckable:true. - option
- Element with id "test" having role
optionand@aria-checkednot undefined: The AAPI object has role ROLE_LIST_ITEM and supports object attributecheckable:true. - Element with id "test" having role
optionthat is not a child of nor owned by an element exposed as ROLE_MENU: The AAPI object has ROLE_LIST_ITEM. - Element with id "test" having role
optionthat is a child of or owned by an element exposed as ROLE_MENU: The AAPI object has either ROLE_MENU_ITEM or ROLE_LIST_ITEM. - tab
- Element with id "test" having role
tabwhere focus is in the associatedtabpanelwhose@aria-labelledbyreferences thetab: AAPI object has ROLE_PAGE_TAB and supports SELECTED state. - textbox
- Element with id "test" having role
textboxand@aria-multilineis "false" or undefined: AAPI object has ROLE_ENTRY and STATE_SINGLE_LINE.
AT-SPI States and Properties
Statements are based on the UAIG state and property mapping table, specifically the "ATK/AT-SPI" column.
- aria-activedescendant (states)
- Element with id "test" that is a descendant of another element with an
aria-activedescendantproperty: the AAPI object has STATE_FOCUSABLE. - Element with id "test" that is a descendant of another element with
aria-activedescendant='test': the AAPI object has STATE_FOCUSABLE and STATE_FOCUSED. - aria-atomic
- Element with id "test" having
aria-atomic='true': The AAPI object has object attributeatomic:trueAND all descendants have object attributecontainer-atomic:trueAND all descendants haveRELATION_MEMBER_OFthis atomic root. - Element with id "test" having
aria-atomic='false': The AAPI object has no mapping of this aria property. - aria-autocomplete
- Element with id "test" having role
comboboxandaria-autocomplete="inline": The AAPI object has object attributeautocomplete:inlineAND exposes SUPPORTS_AUTOCOMPLETION. - Element with id "test" having role
comboboxandaria-autocomplete="list": The AAPI object has object attributeautocomplete:listAND exposes SUPPORTS_AUTOCOMPLETION. - Element with id "test" having role
comboboxandaria-autocomplete="both": The AAPI object has object attributeautocomplete:bothAND exposes SUPPORTS_AUTOCOMPLETION. - Element with id "test" having role
comboboxandaria-autocomplete="none": The AAPI object has no mapping of this state. - Element with id "test" having role
textandaria-autocomplete="inline": The AAPI object has object attributeautocomplete:inlineAND exposes SUPPORTS_AUTOCOMPLETION. - Element with id "test" having role
textandaria-autocomplete="list": The AAPI object has object attributeautocomplete:listAND exposes SUPPORTS_AUTOCOMPLETION. - Element with id "test" having role
textandaria-autocomplete="both": The AAPI object has object attributeautocomplete:bothAND exposes SUPPORTS_AUTOCOMPLETION. - Element with id "test" having role
textandaria-autocomplete="none": The AAPI object has no mapping of this state. - aria-checked="mixed"
- Note: table says that for radio and menuitemradio roles, treat aria-checked="mixed" as "false".
- Element with id "test" having role
radioandaria-checked="mixed": The AAPI object has object attributecheckable:trueAND clears STATE_CHECKED. - Element with id "test" having role
menuitemradioandaria-checked="mixed": The AAPI object has object attributecheckable:trueAND clears STATE_CHECKED. - Element with id "test" having role
checkboxandaria-checked="mixed": The AAPI object has object attributecheckable:trueAND exposes STATE_INDETERMINATE. - Element with id "test" having role
menuitemcheckboxandaria-checked="mixed": The AAPI object has object attributecheckable:trueAND exposes STATE_INDETERMINATE. - Element with id "test" having role
optionandaria-checked="mixed": The AAPI object has object attributecheckable:trueAND exposes STATE_INDETERMINATE. - Element with id "test" having role
treeitemandaria-checked="mixed": The AAPI object has object attributecheckable:trueAND exposes STATE_INDETERMINATE. - aria-describedby
- Note: is this covered elsewhere? If not:
- Element with id "test" with
aria-describedby='foo': The AAPI object has a RELATION_DESCRIBED_BY reference to the AAPI object with id 'foo'. AND, the AAPI object with id 'foo' has a RELATION_DESCRIPTION_FOR the AAPI object with id 'test'. - aria-disabled
- Note: the row for
aria-disabledglosses over some subtleties of AT-SPI, namely, that certain aspects of an application can be "enabled" but not "interactive", while other aspects are both. This is captured in ARIA using the distinction betweenwidgetand non-widgetroles. - Element with id "test" and a role that is a subclass of
widgetandaria-disabled="false": The AAPI object exposes both STATE_ENABLED and STATE_SENSITIVE. - Element with id "test" and a role that is a subclass of
widgetandaria-disabled="true": The AAPI object clears STATE_ENABLED and STATE_SENSITIVE. - Element with id "test" and a role that is not a subclass of
widgetandaria-disabled="false": The AAPI object exposes state STATE_ENABLED. - Element with id "test" and a role that is not a subclass of
widgetandaria-disabled="true": The AAPI object clears STATE_ENABLED. - aria-expanded
- Element with id "test" and
aria-expanded="true": The AAPI object exposes STATE_EXPANDABLE and STATE_EXPANDED. - Element with id "test" and
aria-expanded="false": The AAPI object exposes STATE_EXPANDABLE. - aria-invalid
- Element with id "test" and
aria-invalid="true": The AAPI object has a text container child whose contents is the string "aria-invalid='true'". - Element with id "test" and
aria-invalid="spelling": The AAPI object has a text container child whose contents is the string "aria-invalid='spelling'". - Element with id "test" and
aria-invalid="grammar": The AAPI object has a text container child whose contents is the string "aria-invalid='grammar'". - Element with id "test" and
aria-invalid="false": Not mapped -- The AAPI object has no special text container child associated with aria-invalid. - aria-labelledby
- Note: is this covered elsewhere? If not:
- Element with id "test" with
aria-labelledby='foo': The AAPI object has a RELATION_LABELLED_BY reference to the AAPI object with id 'foo'. AND, the AAPI object with id 'foo' has a RELATION_LABEL_FOR the AAPI object with id 'test'. - aria-level
- Element with id "test" with
aria-level='5': The AAPI object has object attributelevel:5. - aria-live (states and properties)
- Element with id "test" with
aria-live='assertive': The AAPI object has object attributeliveAND all descendant AAPI objects have object attributecontainer-live:assertive. - Element with id "test" with
aria-live='polite': The AAPI object has object attributelive:politeAND all descendant AAPI objects have object attributecontainer-live:polite. - Element with id "test" with
aria-live='off': The AAPI object has object attributelive:offAND all descendant AAPI objects have object attributecontainer-live:off. - aria-live (events)
- Note: not sure this requires a special case for AT-SPI, but putting it here nonetheless.
- Note: technically, these events are not specific to aria-live, but for any aria state or property that is associated with removals, insertions, moves, or changes.
- Element with id "test" with an
aria-liveproperty: When text is removed, emit atext_changed::deleteevent. - Element with id "test" with
aria-liveproperty: When text is inserted, emit atext_changed::insertevent. - Element with id "test" with
aria-liveproperty: When text is changed, emit atext_changed::deleteevent immediately followed by atext_changed::insertevent. - Element with id "test" with an
aria-liveproperty: When sub-tree is hidden, emit achildren_changed::removeevent. - Element with id "test" with an
aria-liveproperty: When sub-tree is removed, emit achildren_changed::removeevent. - Element with id "test" with an
aria-liveproperty: When sub-tree is shown, emit achildren_changed::addevent. - Element with id "test" with an
aria-liveproperty: When sub-tree is inserted, emit achildren_changed::addevent. - Element with id "test" with an
aria-liveproperty: When sub-tree is moved, emit achildren_changed::removeevent followed by achildren_changed::add. - Element with id "test" with an
aria-liveproperty: When sub-tree is changed, emit achildren_changed::removeevent followed by achildren_changed::add. - aria-multiline
- Element with id "test" with
aria-multiline='true': The AAPI object sets STATE_MULTI_LINE and clears STATE_SINGLE_LINE. - Element with id "test" with
aria-multiline='false': The AAPI object clears STATE_MULTI_LINE and sets STATE_SINGLE_LINE. - aria-owns
- Element with id "test" with
aria-owns='foo': The AAPI object with id 'foo' has a RELATION_NODE_CHILD_OF the AAPI object with id 'test'. - aria-posinset
- Element with id "test" with
aria-posinset='5': The AAPI object has object propertyposinset:5. - Element with id "test" with no aria-posinset, BUT the container has 10 objects and the "test" element is the fifth one : The User Agent calculates the value "5" and sets the AAPI object such that is has object property
posinset:5. - aria-pressed
- Element with id "test" with
aria-pressed='true': If the AAPI object is a button, expose ROLE_TOGGLE_BUTTON, AND expose STATE_PRESSED, AND expose object propertycheckable:true. - Element with id "test" with
aria-pressed='mixed': If the AAPI object is a button, expose ROLE_TOGGLE_BUTTON, AND expose STATE_INDETERMINATE/STATE_SYSTEM_MIXED, AND exposecheckable:true. - Element with id "test" with
aria-pressed='false': If the AAPI object is a button, expose ROLE_TOGGLE_BUTTON, AND expose object propertycheckable:true. - Element with id "test" with no
aria-pressed: The AAPI object has no mapping for this case. - aria-readonly
- Element with id "test" with
aria-readonly='true': The AAPI object has no mapping. - Element with id "test" with
aria-readonly='false': The AAPI object has STATE_EDITABLE. - aria-relevant (states and properties)
- Element with id "test" with
aria-relevant='additions': The AAPI object has object attributerelevant:additionsAND all descendant AAPI objects have object attributecontainer-relevant. - Element with id "test" with
aria-relevant='removals': The AAPI object has object attributerelevant:removalsAND all descendant AAPI objects have object attributecontainer-relevant. - Element with id "test" with
aria-relevant='all': The AAPI object has object attributerelevant:allAND all descendant AAPI objects have object attributecontainer-relevant. - Element with id "test" with
aria-additions='text all': The AAPI object has object attributerelevant:additions textAND all descendant AAPI objects have object attributecontainer-relevant. - aria-relevant (events)
- Note: not sure this requires a special case for AT-SPI, but putting it here nonetheless.
- Note: technically, these events are not specific to aria-relevant, but for any aria state or property that is associated with removals, insertions, moves, or changes.
- Element with id "test" with an
aria-relevantproperty: When text is removed, emit atext_changed::deleteevent. - Element with id "test" with
aria-relevantproperty: When text is inserted, emit atext_changed::insertevent. - Element with id "test" with
aria-relevantproperty: When text is changed, emit atext_changed::deleteevent immediately followed by atext_changed::insertevent. - Element with id "test" with an
aria-relevantproperty: When sub-tree is hidden, emit achildren_changed::removeevent. - Element with id "test" with an
aria-relevantproperty: When sub-tree is removed, emit achildren_changed::removeevent. - Element with id "test" with an
aria-relevantproperty: When sub-tree is shown, emit achildren_changed::addevent. - Element with id "test" with an
aria-relevantproperty: When sub-tree is inserted, emit achildren_changed::addevent. - Element with id "test" with an
aria-relevantproperty: When sub-tree is moved, emit achildren_changed::removeevent followed by achildren_changed::add. - Element with id "test" with an
aria-relevantproperty: When sub-tree is changed, emit achildren_changed::removeevent followed by achildren_changed::add. - aria-selected (events)
- Element with id "test" whose
aria-selectedis toggled betweentrueandfalse, and is a descendant of an element witharia-multi-selectable='false'where selection follows focus: emit anobject::selection_changedevent but arrange events so that it does not occur on the focussed item. - Element with id "test", whose
aria-selectedis toggled betweentrueandfalse, and is a descendant of an element witharia-multi-selectable='true': emit anobject::selection_changedevent on the AAPI object. - Element with id "test", whose
aria-selectedis toggled betweentrueandfalse, and is a descendant of an element witharia-multi-selectable='true'where selection follows focus: emit anobject::selection_changedevent but arrange events so that it does not occur on the focussed item. - Element with id "test", whose
aria-selectedis toggled betweentrueandfalse, and is a descendant of an element witharia-multi-selectable='true'and where many items' selection is toggled: emit aobject::selection_changedevent for each AAPI object whose selections changes (note: UAIG says that these multiple selection_changed events MAY be trimmed). - aria-setsize
- Element with id "test" with
aria-setsize='5': The AAPI object has object attributesetsize:5. - Element with id "test", with no
aria-setsizeproperty, whose role supportsaria-setsize, and has 5 DOM children: The AAPI object has object attributesetsize:5. - aria-sort
- Element with id "test" with
aria-sort='ascending': The AAPI object has object attributesort:ascending. - Element with id "test" with
aria-sort='descending': The AAPI object has object attributesort:descending. - Element with id "test" with
aria-sort='other': The AAPI object has object attributesort:other. - Element with id "test" with
aria-sort='none': The AAPI object has object attributesort:none. - Element with id "test" with no
aria-sortproperty: The AAPI object has no mapping. - aria-valuemax
- Note: the UAIG does not document how the AtspiValue interface is filled in.
- Element with id "test" with
aria-valuemax='5': The AAPI object's AtspiValue maxiumum property is5.0. - Element with id "test" with
aria-valuemax=' ': The AAPI object's AtspiValue maxiumum property is0.0. - Element with id "test" with no
aria-valuemaxproperty: The AAPI object's AtspiValue maxiumum property is0.0. - aria-valuemin
- Note: the UAIG does not document how the AtsipValue interface is filled in.
- Element with id "test" with
aria-valuemin='5': The AAPI object's AtspiValue miniumum property is5.0. - Element with id "test" with
aria-valuemin=' ': The AAPI object's AtspiValue miniumum property is0.0. - Element with id "test" with no
aria-valueminproperty: The AAPI object's AtspiValue miniumum property is0.0. - aria-valuenow
- Note: the UAIG does not document how the AtsipValue interface is filled in.
- Element with id "test" with
aria-valuenow='5': The AAPI object AtspiValue miniumum property is5.0. - Element with id "test" with
aria-valuenow=' ': The AAPI object AtspiValue miniumum property is0.0. - Element with id "test" with no
aria-valuenowproperty: The AAPI object AtspiValue miniumum property is0.0. - aria-valuetext
- Element with id "test" with
aria-valuetext="Monday": The AAPI object has object propertyvaluetext:Monday.
