From ce8281e6d45c6888d238ea33c2d39f4c67e8b267 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Mon, 4 Jan 2021 08:23:53 -0700 Subject: [PATCH] fix(aria-required-parent): only match for roles that require parents (#2707) * fix(aria-required-parent): only match for roles that require parents * fix --- lib/core/base/metadata-function-map.js | 2 + lib/rules/aria-required-parent-matches.js | 8 ++++ lib/rules/aria-required-parent.json | 1 + .../aria-required-parent.html | 44 +++++++++---------- .../aria-required-parent.json | 17 +------ .../aria-required-parent-matches.js | 27 ++++++++++++ 6 files changed, 61 insertions(+), 38 deletions(-) create mode 100644 lib/rules/aria-required-parent-matches.js create mode 100644 test/rule-matches/aria-required-parent-matches.js diff --git a/lib/core/base/metadata-function-map.js b/lib/core/base/metadata-function-map.js index 54478a02b7..fa5988e613 100644 --- a/lib/core/base/metadata-function-map.js +++ b/lib/core/base/metadata-function-map.js @@ -133,6 +133,7 @@ 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 ariaRequiredParentMatches from '../../rules/aria-required-parent-matches'; import autocompleteMatches from '../../rules/autocomplete-matches'; import bypassMatches from '../../rules/bypass-matches'; import colorContrastMatches from '../../rules/color-contrast-matches'; @@ -305,6 +306,7 @@ const metadataFunctionMap = { 'aria-has-attr-matches': ariaHasAttrMatches, 'aria-hidden-focus-matches': ariaHiddenFocusMatches, 'aria-required-children-matches': ariaRequiredChildrenMatches, + 'aria-required-parent-matches': ariaRequiredParentMatches, 'autocomplete-matches': autocompleteMatches, 'bypass-matches': bypassMatches, 'color-contrast-matches': colorContrastMatches, diff --git a/lib/rules/aria-required-parent-matches.js b/lib/rules/aria-required-parent-matches.js new file mode 100644 index 0000000000..2ee67c83ba --- /dev/null +++ b/lib/rules/aria-required-parent-matches.js @@ -0,0 +1,8 @@ +import { requiredContext, getExplicitRole } from '../commons/aria'; + +function ariaRequiredParentMatches(node, virtualNode) { + const role = getExplicitRole(virtualNode); + return !!requiredContext(role); +} + +export default ariaRequiredParentMatches; diff --git a/lib/rules/aria-required-parent.json b/lib/rules/aria-required-parent.json index 1c9296d045..2a41fa8e9c 100644 --- a/lib/rules/aria-required-parent.json +++ b/lib/rules/aria-required-parent.json @@ -1,6 +1,7 @@ { "id": "aria-required-parent", "selector": "[role]", + "matches": "aria-required-parent-matches", "tags": ["cat.aria", "wcag2a", "wcag131"], "metadata": { "description": "Ensures elements with an ARIA role that require parent roles are contained by them", diff --git a/test/integration/rules/aria-required-parent/aria-required-parent.html b/test/integration/rules/aria-required-parent/aria-required-parent.html index 85adbe35b6..60f090f844 100644 --- a/test/integration/rules/aria-required-parent/aria-required-parent.html +++ b/test/integration/rules/aria-required-parent/aria-required-parent.html @@ -1,40 +1,40 @@ -
Item 1
-
-
+
Item 1
+
+
- - + +
-
-
-
Item 1
-
-
Item 1
+
+
+
Item 1
+
+
Item 1
-
-
Item 1
+
+
Item 1
-
+
Item 1
-
-