├── -assets
├── aom.js
├── search.jpg
├── shared.css
└── shared.js
├── .gitignore
├── LICENSE
├── README.md
├── aria-directory
└── index.html
├── aria-haspopup
└── index.html
├── aria-hidden
└── index.html
├── aria-img
└── index.html
├── aria-landmark-form
└── index.html
├── aria-list
└── group.html
├── aria-live
├── default-alert.html
├── default-assertive.html
├── default-empty.html
├── default-log.html
├── default-marquee.html
├── default-polite.html
├── default-progressbar.html
├── default-status.html
├── default-timer.html
├── index.html
├── shadow.html
├── svg.html
└── timer.html
├── aria-none
└── index.html
├── aria-option
└── index.html
├── aria-owns
└── index.html
├── aria-readonly-chk
└── index.html
├── aria-region
└── index.html
├── aria-vs-html-roles
└── index.html
├── attr-html
├── _support
│ ├── ElephantsDream.mp4
│ ├── style.css
│ ├── subtitles-en.vtt
│ └── subtitles-es.vtt
├── abbr.html
├── accept-charset.html
├── accept.html
├── accesskey.html
├── action.html
├── allow.html
├── allowfullscreen.html
├── allowpaymentrequest.html
├── alt-area.html
├── alt-img.html
├── alt-input.html
├── as.html
├── async.html
├── autocapitalize-form.html
├── autocapitalize.html
├── autoccomplete-form.html
├── autoccomplete.html
├── autofocus-ahref.html
├── autofocus-contenteditablehtml.html
├── autofocus-p.html
├── autofocus-summary.html
├── autofocus.html
├── autoplay-controls-audio.html
├── autoplay-controls-video.html
├── charset.html
├── checked.html
├── cite.html
├── cols.html
├── colspan.html
├── contenteditable.html
├── decoding.html
├── defer.html
├── loop-audio.html
├── loop-video.html
├── minlength.html
├── pattern.html
├── ping.html
├── playsinline.html
├── reversed.html
├── rows.html
├── tabindex-a-href.html
└── tabindex-a.html
├── attr-indeterminate
└── index.html
├── css-content
└── index.html
├── css-text
└── index.html
├── html-a
├── a-aria-disabled.html
├── a-no-href.html
└── placeholder.html
├── html-abbr
└── index.html
├── html-address
└── index.html
├── html-area
├── index.html
└── yellow.jpg
├── html-article
└── index.html
├── html-b
└── index.html
├── html-bdi
└── index.html
├── html-bdo
└── index.html
├── html-blockquote
├── desc.html
├── index.html
└── names.html
├── html-button
├── font-awesome.html
├── naming-1.html
└── naming.html
├── html-cite
└── index.html
├── html-code
└── index.html
├── html-custom-element
└── index.html
├── html-data
└── index.html
├── html-del
└── index.html
├── html-details-summary
├── index.html
└── mixed-content.html
├── html-dl
└── index.html
├── html-fieldset-legend
├── index.html
├── legends.html
├── radios.html
└── roles.html
├── html-figure-figcaption
├── index.html
└── screen-reader-results
│ ├── earth.jpg
│ ├── icon.svg
│ └── index.html
├── html-footer
└── contentinfo-landmark-tests.html
├── html-header
├── banner-landmark-tests.html
└── firefox-a11ytree-aug2019.jpg
├── html-headings
├── 6plus.html
├── index.html
└── within-legend.html
├── html-hgroup
└── index.html
├── html-history-test
├── index.html
└── test.html
├── html-hr
└── index.html
├── html-i
└── index.html
├── html-iframe
└── index.html
├── html-img
├── broken.html
├── index.html
├── lazy-images-2.html
├── lazy-img-links.html
├── sample-usemap.png
├── usemap.html
├── whitespace.html
├── yellow-small.jpg
└── yellow.jpg
├── html-inputs
├── double-label.html
├── example-req-checkbox-group.html
├── input-checkbox-required-group.html
├── input-checkbox-required.html
├── input-img.html
├── input-radio.html
├── input-range.html
├── input-steps.html
├── labelling.html
├── readonly.html
└── size.html
├── html-ins
└── index.html
├── html-kbd
└── index.html
├── html-landmark-contentinfo
└── index.html
├── html-landmarks
├── header-footer-main-no-div.html
└── header-footer-main.html
├── html-lang
└── index.html
├── html-lists
├── direct.html
├── empty.html
├── ol.html
└── ul.html
├── html-menu
├── index.html
└── menu.html
├── html-meter
└── index.html
├── html-output
├── accessible-name.html
├── add.html
├── index.html
├── inject-text-only.html
├── reduced-test.html
├── toastput-aria.html
└── toastput.html
├── html-p
└── index.html
├── html-progress
├── auto-update-named.html
├── auto-update-unnamed.html
└── index.html
├── html-ruby
└── index.html
├── html-s
└── index.html
├── html-samp
└── index.html
├── html-select
├── index.html
├── label-value-attrs.html
└── versions.html
├── html-small
└── index.html
├── html-span
└── aria-label.html
├── html-strong
└── index.html
├── html-tables
├── empty-cells.html
├── expose-table.html
└── index.html
├── html-title
└── index.html
├── html-u
└── index.html
└── html-var
└── index.html
/-assets/aom.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Run through all test instances and duplicate the
3 | * tested code into a code block.
4 | */
5 | (function ( doc, w, undefined ) {
6 | 'use strict';
7 | var tests = doc.querySelectorAll('.test');
8 | var el;
9 | var resultArea;
10 |
11 | var testCase = '.test__case button';
12 | var testResults = '.test__info__results__aom';
13 |
14 | for ( var i = 0; i < tests.length; i++ ) {
15 | el = tests[i].querySelector(testCase);
16 | resultArea = tests[i].querySelector(testResults);
17 | var elID = el.id;
18 |
19 | var name;
20 | var desc;
21 |
22 | if ( el.ariaLabelledBy ) {
23 | name = doc.getElementById(el.ariaLabelledBy).innerText
24 | }
25 | else if ( el.ariaLabel ) {
26 | name = el.ariaLabel
27 | }
28 | else if ( el.parentNode.tagName === 'LABEL' ) {
29 | // if had additional label via for, append
30 | name = el.parentNode.textContent;
31 | }
32 | else if ( elID ) {
33 | name = document.querySelector('label[for="'+elID+'"]').innerText
34 | }
35 | else {
36 | name = el.innerText
37 | }
38 |
39 | if ( el.ariaDescribedBy ) {
40 | desc = doc.getElementById(el.ariaDescribedBy).innerText
41 | }
42 | else if ( el.title ) {
43 | desc = el.title
44 | }
45 | else if ( el.tagName === 'BUTTON' && el.value ) {
46 | desc = el.value
47 | }
48 |
49 | var label;
50 | resultArea.innerHTML = 'element: ' + el.tagName +
51 | '
role: ' + el.role +
52 | '
accName: ' + name +
53 | '
accDesc: ' + desc;
54 | }
55 | })(document, window);
56 |
--------------------------------------------------------------------------------
/-assets/search.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/scottaohara/tests/3b4e77239183b3d7af1437e36d14570e5e49c5d4/-assets/search.jpg
--------------------------------------------------------------------------------
/-assets/shared.css:
--------------------------------------------------------------------------------
1 | *,
2 | *::before,
3 | *::after {
4 | box-sizing: border-box;
5 | }
6 |
7 | html,
8 | body {
9 | font-family: arial;
10 | margin: 0;
11 | padding: 0;
12 | }
13 |
14 | body {
15 | counter-reset: tests;
16 | overflow-x: hidden;
17 | }
18 |
19 | #app {
20 | margin: auto;
21 | max-width: 50em;
22 | padding: 1.125em;
23 | }
24 |
25 | #app.fullwidth {
26 | max-width: 100%;
27 | }
28 |
29 |
30 | /**
31 | * test wrapper and related info element styles
32 | */
33 | .test {
34 | margin: 2em 0 1.25em 0;
35 | }
36 |
37 | .test > h2 {
38 | margin-top: 0;
39 | }
40 |
41 | .test > h2::before {
42 | content: "Test " counter(tests) ": ";
43 | counter-increment: tests;
44 | }
45 |
46 | .test__info pre {
47 | background: #111;
48 | color: #fff;
49 | margin: 0;
50 | padding: .75em;
51 | overflow: auto;
52 | -moz-tab-size: 2;
53 | tab-size: 2;
54 | }
55 |
56 | .test__info details {
57 | border: 1px solid #ccc;
58 | display: block;
59 | margin-top: -1px;
60 | }
61 |
62 | .test__info summary {
63 | cursor: default;
64 | }
65 |
66 | .test__info summary:focus,
67 | .test__info summary:hover {
68 | outline: 2px solid blue;
69 | }
70 |
71 | .test__info summary,
72 | .test__info details > div {
73 | padding: .75em;
74 | }
75 |
76 | .test__info details > div :last-child {
77 | margin-bottom: 0;
78 | }
79 |
80 | .test__info details > div :first-child {
81 | margin-top: 0
82 | }
83 |
84 | .test__case {
85 | border: 1px solid #ccc;
86 | padding: .825em;
87 | }
88 |
89 |
90 |
91 | /**
92 | * Results tables
93 | */
94 | .results-table-wrap {
95 | overflow: auto;
96 | }
97 |
98 | .results-table-wrap.large table {
99 | table-layout: auto;
100 | }
101 |
102 | .results-table-wrap.large td {
103 | padding: .5em;
104 | vertical-align: top;
105 | }
106 |
107 | .results-table-wrap table {
108 | border-spacing: 0;
109 | border: 1px solid #111;
110 | margin-left: 0;
111 | margin-right: 0;
112 | min-width: 820px;
113 | table-layout: fixed;
114 | text-align: left;
115 | width: 100%;
116 | }
117 |
118 | .results-table-wrap caption {
119 | background: #eee;
120 | border: 1px solid #111;
121 | border-bottom: 0;
122 | padding: .825em;
123 | text-align: left;
124 | }
125 |
126 | .results-table-wrap thead th {
127 | background: #ddd;
128 | }
129 |
130 | .results-table-wrap tbody tr:not(:last-of-type) > *,
131 | .results-table-wrap thead tr > * {
132 | border-bottom: 1px solid #111;
133 | }
134 |
135 | .results-table-wrap td,
136 | .results-table-wrap th {
137 | padding: .25em;
138 | }
139 |
140 | .results-table-wrap td:not(:last-of-type),
141 | .results-table-wrap th:not(:last-of-type) {
142 | border-right: 1px solid #111;
143 | }
144 |
145 | .results-table-wrap td:first-child,
146 | .results-table-wrap th:first-child {
147 | border-right: 1px solid #111;
148 | }
149 |
150 |
151 | .results-table-wrap .na {
152 | background: #eee;
153 | }
154 |
155 | .results-table-wrap .na[contenteditable] {
156 | background: #fff;
157 | }
158 |
159 | .results-table-wrap .partial {
160 | background: lightyellow;
161 | }
162 |
163 | .results-table-wrap .fail {
164 | background: darkred;
165 | color: #fff;
166 | }
167 |
168 | .results-table-wrap .pass {
169 | background: darkgreen;
170 | color: #fff;
171 | }
172 |
173 |
174 |
175 |
176 |
177 | /**
178 | * Some normalization for elements within tests
179 | */
180 | button,
181 | input {
182 | font-size: inherit;
183 | }
184 |
--------------------------------------------------------------------------------
/-assets/shared.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Run through all test instances and duplicate the
3 | * tested code into a code block.
4 | */
5 | (function ( doc, w, undefined ) {
6 | 'use strict';
7 | var template = doc.createElement('template');
8 | template.innerHTML = "
Published September 11, 2019
4 | 5 |30 | role=list with groups in it breaks Safari + VO being able to discover the list. 31 |
32 | role=list with 2 groups in it with Chrome + VO exposes a list of 2 items. individual items are not announced as being x of y. 33 |
34 | No issues with JAWS + Chrome/Firefox. Group only announced by JAWS if has author provided name, and user navigates with virtual cursor. Not announced if navigating by list items. 35 | 36 |
37 | NVDA + Firefox announce list with 2 groups as a list with 2 items. All items are accessible when navigating by list items. Group name not announced when navigating by list item or virtual cursor. 38 | 39 |
40 | NVDA + Chrome announce list with 2 groups as a list with 2 items. All items are accessible when navigating by list items. Accessible name of second group is sometimes announced. Not sure what causes it to be/not to be announced at times. 41 | -------------------------------------------------------------------------------- /aria-live/default-alert.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |Published:
18 |Updated:
19 |role="alert"
in the DOM on page loadPublished:
18 |Updated:
19 |aria-live="assertive"
in the DOM on page loadPublished:
18 | 19 |role="log"
in the DOM on page loadPublished:
18 | 19 |role="marquee"
in the DOM on page loadPublished:
18 |Updated:
19 |aria-live="polite"
in the DOM on page loadPublished:
18 | 19 |role="progressbar"
in the DOM on page load. Value 50%, aria-label="TestingPublished:
18 |Updated:
19 |role="status"
in the DOM on page loadPublished:
18 | 19 |role="timer"
in the DOM on page loadrole=timer
Published:
18 |A role=timer
is a live region with an implicit aria-live=off
.
An aria-live=off
23 | is not meant to announce dynamic changes "unless the user is currently focused on that region".
The following test has a role=timer
with a tabindex=0
to allow for testing with Virtual Cursor "focus" as well as keyboard focus.
role="timer"
in the DOM on page loadPublished: September 12, 2019
18 | 19 |Published: August 12, 2019
18 | 19 |28 | link outside of main and owned element 29 |
30 |56 | link outside of label and owned element 57 |
58 |role=region
Published:
18 |5 | Column A 6 | | 7 |8 | Col B 9 | | 10 |11 | Column C 12 | | 13 |
---|---|---|
18 | r test 19 | | 20 |21 | cell 22 | | 23 |24 | cell 25 | | 26 |
allow=geolocation pointing to a page that automatically fires a geolocation script
2 | 3 | -------------------------------------------------------------------------------- /attr-html/allowfullscreen.html: -------------------------------------------------------------------------------- 1 |with allowfullscreen
2 | 3 | 4 | 5 |without allowfullscreen
6 | 7 | -------------------------------------------------------------------------------- /attr-html/allowpaymentrequest.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /attr-html/alt-area.html: -------------------------------------------------------------------------------- 1 |2 | | 3 |
4 | 5 | 6 | 7 | 8 | 9 |10 | | 11 |
12 | 13 | 14 | 15 | 16 | 17 |18 | 19 |
20 | 21 | 22 | 23 |24 | 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /attr-html/autoccomplete-form.html: -------------------------------------------------------------------------------- 1 |on
2 | 9 | 10 |off
11 | 18 | 19 |not present
20 | 27 | -------------------------------------------------------------------------------- /attr-html/autoccomplete.html: -------------------------------------------------------------------------------- 1 | 52 | -------------------------------------------------------------------------------- /attr-html/autofocus-ahref.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | 12 | 16 | 17 | 18 |autofocus should go to the following anchor element
19 | 20 | I don't go anywhere. sorry. 21 | 22 | -------------------------------------------------------------------------------- /attr-html/autofocus-contenteditablehtml.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | 12 | 16 | 17 |autofocus should go to the following editable div
18 |autofocus should go to the following paragraph with tabindex=0
19 |20 | I'm just a p. Sorry. 21 |
22 | -------------------------------------------------------------------------------- /attr-html/autofocus-summary.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | 12 | 16 | 17 |autofocus should go to the following summary element
18 |I have nothing important to add. Sorry. 23 |
autofocus should go to the following input
16 | 20 |with autoplay attr, without controls attr
2 | 3 | 4 | 5 |with autoplay attr, with controls attr
6 | 7 | 8 | 9 |with controls attr
10 | 11 | -------------------------------------------------------------------------------- /attr-html/autoplay-controls-video.html: -------------------------------------------------------------------------------- 1 |with autoplay attr, without controls attr
2 | 3 | 4 | 5 | 6 |with autoplay attr, with controls attr
7 | 8 | 9 | 10 |with controls attr
11 | 12 | -------------------------------------------------------------------------------- /attr-html/charset.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /attr-html/checked.html: -------------------------------------------------------------------------------- 1 |With checked attribute
2 |Without checked attribute
6 |4 | I'm a quote. 5 |6 | 7 |
10 | I'm a quote. 11 |12 | 13 |
cols=14
2 | 3 | -------------------------------------------------------------------------------- /attr-html/colspan.html: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 |12 | Before and after 13 | | 14 |15 | Third 16 | | 17 |18 | Fourth 19 | | 20 ||
---|---|---|---|
23 | first 24 | | 25 |26 | second 27 | | 28 |29 | The end 30 | | 31 |
async
2 |sync
5 |with loop attr, with controls attr
2 | 3 | 4 | 5 |with controls attr
6 | 7 | -------------------------------------------------------------------------------- /attr-html/loop-video.html: -------------------------------------------------------------------------------- 1 |with loop attr, with controls attr
2 | 3 | 4 | 5 |with controls attr
6 | 7 | -------------------------------------------------------------------------------- /attr-html/minlength.html: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /attr-html/pattern.html: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /attr-html/ping.html: -------------------------------------------------------------------------------- 1 | 2 | Ping away 3 | 4 | -------------------------------------------------------------------------------- /attr-html/playsinline.html: -------------------------------------------------------------------------------- 1 |with playsinline attribute
2 | 3 | 4 |without playsinline attribute
5 | 6 | -------------------------------------------------------------------------------- /attr-html/reversed.html: -------------------------------------------------------------------------------- 1 |Default ol
2 |Reversed ol
10 |rows=14
2 | 3 | -------------------------------------------------------------------------------- /attr-html/tabindex-a-href.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |Published: July 31, 2019
18 |26 | THIS TEXT IS WRITTEN IN UPPERCASE 27 |
28 |29 | THIS TEXT IS WRITTEN IN UPPERCASE 30 |
31 | 32 | THIS TEXT IS WRITTEN IN UPPERCASE 33 |52 | THIS TEXT is written in UPPERCASE 53 |
54 |55 | THIS TEXT is written in UPPERCASE 56 |
57 | 58 | THIS TEXT is written in UPPERCASE 59 |77 | This text is written in lowercase. 78 |
79 |80 | This text is written in lowercase. 81 |
82 | 83 | This text is written in lowercase. 84 |103 | This text is written in lowercase. 104 |
105 |106 | This text is written in lowercase. 107 |
108 | 109 | This text is written in lowercase. 110 |a
element with the aria-disabled
attributePublished: August 22, 2019
18 |a
with aria-disabled="true"
abbr
element testsPublished:
15 | 16 |abbr
with title
abbr
with title
within a paragraph33 | I like CSS 34 |
35 |abbr
within a paragraph44 | HTML 45 |
46 |abbr
with aria-label
within a paragraph55 | HTML 56 |
57 |address
element testsPublished: June 22, 2020
18 |Note: as of June 22, 2020, Webkit still treats address
as a contentinformation
landmark.
br
pre
within address
The Fakerson Family 51 | 123 Fake Street 52 | Fakestown FA, 5555553 | 54 |
p
s within address
The Fakerson Family
73 |123 Fake Street
74 |Fakestown FA, 55555
75 | 76 |aria-label
on address
NVDA 2020.1 + IE11 will announce "aria label" when navigating with virtual cursor.
105 |NVDA + other browsers will not announce "aria label"
106 |VO + Safari announce address as content info and will announce "aria label" as its name.
107 |JAWS 2020 + all browsers do not announce "aria label"
108 |map by itself
22 | 23 | 24 | 25 |no alt on image with no area
28 |no alt on image or area
35 |no alt on image
44 |no alt on area
53 |just alt
62 |alt and aria-label
71 |aria-label and title
80 |title and alt
89 |only title
98 |alt on area but not img
106 |Published:
18 |b
elementPublished:
18 |b
b
with title
b
with aria-label
b
with aria-label
and title
b
with tabindex=0
b
with tabindex=0
and title
b
with tabindex=0
, aria-label
and title
bdi
elementPublished:
18 |bdi
bdi
with dir=rtl
bdi
with title
bdi
with aria-label
bdi
with aria-label
and title
bdi
with tabindex=0
bdi
with tabindex=0
and title
bdi
with tabindex=0
, aria-label
and title
bdo
elementPublished:
18 |
20 | bdo
MUST have a dir
set.
21 | If not noted otherwise, dir="ltr"
.
22 |
bdo
bdo
with dir="rtl"
bdo
with title
bdo
with aria-label
bdo
with aria-label
and title
bdo
with tabindex=0
bdo
with tabindex=0
and title
bdo
with tabindex=0
, aria-label
and title
blockquote
element testsPublished: September 8, 2019
15 | 16 |18 | Note: navigate by blockquotes with NVDA by use of Q button. 19 | CTRL+INSERT+Q to open JAWS dialog of blockquotes. 20 |
21 |22 | A blockquote won't expose an accessible description from the title attribute, unless the blockquote also has an accessible name. 23 |
24 |31 | Text goes here 32 |33 |
40 | Should expose "aria description" as its description. 41 |
42 |53 | Text goes here 54 |55 |
62 | Should expose "aria description" as its description. 63 |
64 |65 | Should expose accessible name of "Title". 66 |
67 |78 | Text goes here 79 |80 |
87 | Should expose "aria label" as its accessible name. 88 |
89 |90 | Should expose "title" as its description. 91 |
92 |103 | Text goes here 104 |105 |
112 | Should expose "aria description" as its description, title will be ignored. 113 |
114 |115 | Should expose accessible name of "Aria label". 116 |
117 |blockquote
element testsPublished: September 8, 2019
15 | 16 |18 | Note: navigate by blockquotes with NVDA by use of Q button. 19 | CTRL+INSERT+Q to open JAWS dialog of blockquotes. 20 |
21 |27 | Text goes here 28 |29 |
36 | Should expose no accessible name. 37 |
38 |49 | Text goes here 50 |51 |
58 | Should expose accessible name of "Title". 59 |
60 |71 | Text goes here 72 |73 |
80 | Should expose accessible name of "Aria label". 81 |
82 |94 | Text goes here 95 |96 |
103 | Should expose accessible name of "Aria label". 104 |
105 |Published: April 25, 2020
48 | 49 |aria-hidden=true
and visible textaria-hidden=true
and visible textaria-hidden=true
and 2 lines of visible textcite
elementPublished:
18 |cite
cite
with title
cite
with aria-label
cite
with aria-label
and title
cite
with tabindex=0
cite
with tabindex=0
and title
cite
with tabindex=0
, aria-label
and title
code
elementPublished:
18 |code
code
33 | code
with title
code
45 | code
with aria-label
code
56 | code
with aria-label
and title
code
67 | code
with tabindex=0
code
79 | code
with tabindex=0
and title
code
91 | code
with tabindex=0
, aria-label
and title
code
103 | details
and summary
21 | Published: 22 |
23 | 24 |details
without summary
details
with summary
, but no child contentdetails
with summary
, with title
but no child contentdetails
with title
and summary
with no child contentVO + Safari will announce the accName of summary
as the value of the details
title
attribute.
VO + Chrome will announce the details
as a group with title
as the accName. summary
will be given no accName.
details
and summary
element testsPublished: November 26th, 2019
26 |details
with a summary
containing an a
elementa
element
36 | details
with a summary
containing a heading
details
with a summary
containing a heading
and phrasing contentdl
, dt
, dd
elementsPublished: April 20, 2021
18 |dl dt dd
dl dt dt dd
dl dt dd dt dd
dl div dt dd div dt dd
fieldset
and legend
element testsPublished: November 26th, 2019
25 |fieldset
with a legend
containing an a
elementfieldset
with a legend
containing a heading
fieldset
with a legend
containing a heading
and phrasing contentfieldset
and legend
element testsPublished: September 5th, 2019
18 |fieldset
with a legend
Published: October 22, 2019
17 |Published: July 31, 2019
18 |Published: August 20, 2019
18 |27 | Initial content goes here
28 | 29 |test page content
16 |the following link has standard link behavior
17 | return to index page 18 | 19 |i
elementPublished:
18 |i
i
with title
i
with aria-label
i
with aria-label
and title
i
with tabindex=0
i
with tabindex=0
and title
i
with tabindex=0
, aria-label
and title
iframe
elementPublished: September 15, 2019
18 |iframe
with no accessible nameiframe
with aria-labeliframe
with titlePublished:
25 |Last Updated:
26 |28 | Tests to run in different browsers to demonstrate what's rendered 29 | as fall back content for broken images. 30 |
31 | 32 |33 | As an additional test, add a set height and width to images to show how that may change what fall back content, if any, is rendered. 34 |
35 |36 | 40 |
41 |aria-labelledby text
76 |img
element
19 | Published: September 15, 2019
22 | 23 |aria-labelledby text
59 |usemap
attribute
19 | Published: October 18, 2019
22 | 23 |Published: April 28, 2020
27 |fieldset
with required
attributePublished: February 08, 2020
27 |input type=range
18 | Published: September 15, 2019 19 |
20 | 21 |ins
element testsPublished:
18 | 19 |ins
with no childrenins
with child text nodesins
, within a paragraph, with child text nodesThis content was here, this content is new
58 |ins
, within a paragraph, with child text nodes and containing a linkThis content was here, this content is new, as is this link
74 |ins
containing explicit and implicit paragraphs and a link.This paragraph is new
91 | As is this one. And a link. 92 | 93 |94 | This content was here. 95 |
96 |kbd
elementPublished:
18 |kbd
kbd
with title
kbd
with aria-label
kbd
with aria-label
and title
kbd
with tabindex=0
kbd
with tabindex=0
and title
kbd
with tabindex=0
, aria-label
and title
41 | Apologies but this test has moved to a different directory. 42 | Visit the new test page here. 43 |
head
and body
elements.
15 | Test to see how NVDA, JAWS and VoiceOver react to a directly nested list within a list.
7 | 8 |macOS Safari + VO - test immediately announces existence of a sublist.
38 |Chrome, IE11, firefox + JAWS - announces 2 item list for primary list. Announces nested list as nested.
39 |NVDA - no difference between control and test examples.
40 |Published: September 3, 2019
20 | 21 |ul
and ol
with no childrenul
with empty li
childrenol
with empty li
childrenul
with empty li
children and no list markersol
with empty li
children and no list markersmeter
element testsPublished:
18 | 19 |meter
within label
elementmeter
with label [for]
elementmeter
with aria-label attroutput
element test cases
14 | Published:
17 | 18 |Note that Firefox MSAA accRole="output", IA2 role="section". While Chrome MSAA and IA2 report as "status bar".
19 |Per HTML AAM, output
should map to ARIA's role=status
.
20 |
output
used to construct a "toast" component
22 | Published:
25 |
27 | Read additional information about output
and this demo.
28 |
30 | Note this demo makes no accommodations for mouse hover or keyboard focus within the popup message into account for delaying the automatic dismissal. Such functionality should be included in a more robust form of this demo. 31 |
32 |Activating the "press me" button will inject content into an output
element. CSS and JavaScript are then used to visually reveal and dismiss the message.
The dismiss button of the "toast" is not a child of the output
element, but rather a sibling to it. This is so that it is not part of the live announcement of the element. Activating the dismiss button will return focus to the invoking element, so keyboard focus does not become 'lost'.
progress
element
28 | Published: July 3, 2019
31 | 32 |aria-label
Note: VC is short for "virtual cursor".
59 |progress
element
28 | Published: July 3, 2019
31 | 32 |Expectation: should announce flattened text string.
59 |ruby
and related elementsPublished: September 22, 2019
18 |ruby
containing rb
, rt
and rtc
elements25 | Example taken from HTML 5.2. 26 |
27 |s
elementPublished:
18 |s
s
with title
s
with aria-label
s
with aria-label
and title
s
with tabindex=0
s
with tabindex=0
and title
s
with tabindex=0
, aria-label
and title
samp
elementPublished:
18 |samp
samp
with title
samp
with aria-label
samp
with aria-label
and title
samp
with tabindex=0
samp
with tabindex=0
and title
samp
with tabindex=0
, aria-label
and title
option
elementsPublished: August 6, 2019
22 |24 | option element. 25 |
26 |select
with child option
sThe label
attribute should provide user visible text for an option
, specifically if following the first line of the HTML Living Standard's Content Model for the element:
51 |53 |If the element has a label attribute and a value attribute: Nothing
52 |
e.g., there is no expected subtree content for the option
element because the value and label are provided by the element's attributes.
55 | However, a visible text label fails to load with: 56 |
57 |62 | Testing with IE11, Edge (pre and post chromium), Chrome (mac, Android and PC), Firefox Android, and Safari on macOS, all options render with a visible label. 63 |
64 |small
elementPublished:
18 |small
small
with title
small
with aria-label
small
with aria-label
and title
small
with tabindex=0
small
with tabindex=0
and title
small
with tabindex=0
, aria-label
and title
strong
elementPublished:
18 |strong
strong
with title
strong
with aria-label
strong
with aria-label
and title
strong
with tabindex=0
strong
with tabindex=0
and title
strong
with tabindex=0
, aria-label
and title
Published: August 13, 2019
34 |46 | | Vegetable | 47 |Fruit | 48 |
---|---|---|
Sammy | 53 |Carrots | 54 |Apples | 55 |
Tammy | 58 |Red pepper | 59 |60 | |
63 | Jammy 64 | | 65 |66 | | 67 | Grapes 68 | | 69 |
title
element
14 | Published:
17 |Last Updated:
18 |u
elementPublished:
18 |u
u
with title
u
with aria-label
u
with aria-label
and title
u
with tabindex=0
u
with tabindex=0
and title
u
with tabindex=0
, aria-label
and title
var
elementPublished:
18 |var
var
with title
var
with aria-label
var
with aria-label
and title
var
with tabindex=0
var
with tabindex=0
and title
var
with tabindex=0
, aria-label
and title