From 95de1698596ab5138d553836c90c422566d0527d Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Mon, 21 Dec 2020 11:09:18 -0700 Subject: [PATCH] fix(aria-required-children): only match for roles that require children (#2703) * fix(aria-required-children): only match for roles that require children * fix * fix tests --- lib/core/base/metadata-function-map.js | 2 + lib/rules/aria-required-children-matches.js | 8 ++++ lib/rules/aria-required-children.json | 1 + .../aria-required-children.html | 43 +++++++++---------- .../aria-required-children.json | 16 +------ .../aria-required-children-matches.js | 27 ++++++++++++ 6 files changed, 60 insertions(+), 37 deletions(-) create mode 100644 lib/rules/aria-required-children-matches.js create mode 100644 test/rule-matches/aria-required-children-matches.js diff --git a/lib/core/base/metadata-function-map.js b/lib/core/base/metadata-function-map.js index 6e40a4a1af..54478a02b7 100644 --- a/lib/core/base/metadata-function-map.js +++ b/lib/core/base/metadata-function-map.js @@ -132,6 +132,7 @@ import ariaAllowedAttrMatches from '../../rules/aria-allowed-attr-matches'; import ariaAllowedRoleMatches from '../../rules/aria-allowed-role-matches'; import ariaHasAttrMatches from '../../rules/aria-has-attr-matches'; import ariaHiddenFocusMatches from '../../rules/aria-hidden-focus-matches'; +import ariaRequiredChildrenMatches from '../../rules/aria-required-children-matches'; import autocompleteMatches from '../../rules/autocomplete-matches'; import bypassMatches from '../../rules/bypass-matches'; import colorContrastMatches from '../../rules/color-contrast-matches'; @@ -303,6 +304,7 @@ const metadataFunctionMap = { 'aria-form-field-name-matches': noNamingMethodMatches, 'aria-has-attr-matches': ariaHasAttrMatches, 'aria-hidden-focus-matches': ariaHiddenFocusMatches, + 'aria-required-children-matches': ariaRequiredChildrenMatches, 'autocomplete-matches': autocompleteMatches, 'bypass-matches': bypassMatches, 'color-contrast-matches': colorContrastMatches, diff --git a/lib/rules/aria-required-children-matches.js b/lib/rules/aria-required-children-matches.js new file mode 100644 index 0000000000..0ca21cf03a --- /dev/null +++ b/lib/rules/aria-required-children-matches.js @@ -0,0 +1,8 @@ +import { requiredOwned, getExplicitRole } from '../commons/aria'; + +function ariaRequiredChildrenMatches(node, virtualNode) { + const role = getExplicitRole(virtualNode, { dpub: true }); + return !!requiredOwned(role); +} + +export default ariaRequiredChildrenMatches; diff --git a/lib/rules/aria-required-children.json b/lib/rules/aria-required-children.json index fac887685c..6d7527665b 100644 --- a/lib/rules/aria-required-children.json +++ b/lib/rules/aria-required-children.json @@ -1,6 +1,7 @@ { "id": "aria-required-children", "selector": "[role]", + "matches": "aria-required-children-matches", "tags": ["cat.aria", "wcag2a", "wcag131"], "metadata": { "description": "Ensures elements with an ARIA role that require child roles contain them", diff --git a/test/integration/rules/aria-required-children/aria-required-children.html b/test/integration/rules/aria-required-children/aria-required-children.html index fafeae32ad..aff30c2ae3 100644 --- a/test/integration/rules/aria-required-children/aria-required-children.html +++ b/test/integration/rules/aria-required-children/aria-required-children.html @@ -1,19 +1,19 @@