Skip to content

Commit 5783c12

Browse files
eps1lonKent C. Dodds
authored andcommitted
feat: Export isInaccessible (#364)
* feat: Export shouldExcludeFromA11yTree * Add tests for negative assertions * shouldExcludeFromA11yTree -> isInaccessible
1 parent bb3c145 commit 5783c12

File tree

4 files changed

+27
-17
lines changed

4 files changed

+27
-17
lines changed

src/__tests__/role-helpers.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import {getRoles, logRoles, getImplicitAriaRoles} from '../role-helpers'
1+
import {
2+
getRoles,
3+
logRoles,
4+
getImplicitAriaRoles,
5+
isInaccessible,
6+
} from '../role-helpers'
27
import {render} from './helpers/test-utils'
38

49
beforeEach(() => {
@@ -160,4 +165,19 @@ test('getImplicitAriaRoles returns expected roles for various dom nodes', () =>
160165
expect(getImplicitAriaRoles(input)).toEqual(['textbox'])
161166
})
162167

168+
test.each([
169+
['<div />', false],
170+
['<div aria-hidden="false" />', false],
171+
['<div style="visibility: visible" />', false],
172+
['<div hidden />', true],
173+
['<div style="display: none;"/>', true],
174+
['<div style="visibility: hidden;"/>', true],
175+
['<div aria-hidden="true" />', true],
176+
])('shouldExcludeFromA11yTree for %s returns %p', (html, expected) => {
177+
const {container} = render(html)
178+
container.firstChild.appendChild(document.createElement('button'))
179+
180+
expect(isInaccessible(container.querySelector('button'))).toBe(expected)
181+
})
182+
163183
/* eslint no-console:0 */

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export * from './get-node-text'
1212
export * from './events'
1313
export * from './get-queries-for-element'
1414
export * from './query-helpers'
15-
export {getRoles, logRoles} from './role-helpers'
15+
export {getRoles, logRoles, isInaccessible} from './role-helpers'
1616
export * from './pretty-dom'
1717
export {configure} from './config'
1818

src/queries/role.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
getImplicitAriaRoles,
33
prettyRoles,
4-
shouldExcludeFromA11yTree,
4+
isInaccessible,
55
} from '../role-helpers'
66
import {buildQueries, fuzzyMatches, makeNormalizer, matches} from './all-utils'
77

@@ -15,9 +15,7 @@ function queryAllByRole(
1515

1616
return Array.from(container.querySelectorAll('*'))
1717
.filter(element => {
18-
return hidden === false
19-
? shouldExcludeFromA11yTree(element) === false
20-
: true
18+
return hidden === false ? isInaccessible(element) === false : true
2119
})
2220
.filter(node => {
2321
const isRoleSpecifiedExplicitly = node.hasAttribute('role')

src/role-helpers.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const elementRoleList = buildElementRoleList(elementRoles)
1414
* @param {Element} element -
1515
* @returns {boolean} true if excluded, otherwise false
1616
*/
17-
function shouldExcludeFromA11yTree(element) {
17+
function isInaccessible(element) {
1818
const window = element.ownerDocument.defaultView
1919
const computedStyle = window.getComputedStyle(element)
2020
// since visibility is inherited we can exit early
@@ -120,9 +120,7 @@ function getRoles(container, {hidden = false} = {}) {
120120

121121
return flattenDOM(container)
122122
.filter(element => {
123-
return hidden === false
124-
? shouldExcludeFromA11yTree(element) === false
125-
: true
123+
return hidden === false ? isInaccessible(element) === false : true
126124
})
127125
.reduce((acc, node) => {
128126
const roles = getImplicitAriaRoles(node)
@@ -155,12 +153,6 @@ function prettyRoles(dom, {hidden}) {
155153
const logRoles = (dom, {hidden = false} = {}) =>
156154
console.log(prettyRoles(dom, {hidden}))
157155

158-
export {
159-
getRoles,
160-
logRoles,
161-
getImplicitAriaRoles,
162-
prettyRoles,
163-
shouldExcludeFromA11yTree,
164-
}
156+
export {getRoles, logRoles, getImplicitAriaRoles, prettyRoles, isInaccessible}
165157

166158
/* eslint no-console:0 */

0 commit comments

Comments
 (0)