From 563e4e90facc9b955c1b2395b466cd65d72bf04e Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Thu, 17 Nov 2022 02:48:48 -0700 Subject: [PATCH] feat(required-attr): require aria-checked for checkbox-like and radio-like roles (#3785) Co-authored-by: Wilco Fiers --- lib/standards/aria-roles.js | 35 +++++-------------- .../aria-required-attr/required-attr.html | 7 ++-- .../aria-required-attr/required-attr.json | 1 + 3 files changed, 13 insertions(+), 30 deletions(-) diff --git a/lib/standards/aria-roles.js b/lib/standards/aria-roles.js index bbf031dff3..fcc9d7504c 100644 --- a/lib/standards/aria-roles.js +++ b/lib/standards/aria-roles.js @@ -79,13 +79,10 @@ const ariaRoles = { }, checkbox: { type: 'widget', - // Note: since the checkbox role has an implicit - // aria-checked value it is not required to be added by - // the user - // // Note: aria-required is not in the 1.1 spec but is // consistently supported in ATs and was added in 1.2 - allowedAttrs: ['aria-checked', 'aria-readonly', 'aria-required'], + requiredAttrs: ['aria-checked'], + allowedAttrs: ['aria-readonly', 'aria-required'], superclassRole: ['input'], accessibleNameRequired: true, nameFromContent: true, @@ -370,12 +367,8 @@ const ariaRoles = { menuitemcheckbox: { type: 'widget', requiredContext: ['menu', 'menubar', 'group'], - allowedAttrs: [ - 'aria-checked', - 'aria-posinset', - 'aria-readonly', - 'aria-setsize' - ], + requiredAttrs: ['aria-checked'], + allowedAttrs: ['aria-posinset', 'aria-readonly', 'aria-setsize'], superclassRole: ['checkbox', 'menuitem'], accessibleNameRequired: true, nameFromContent: true, @@ -384,12 +377,8 @@ const ariaRoles = { menuitemradio: { type: 'widget', requiredContext: ['menu', 'menubar', 'group'], - allowedAttrs: [ - 'aria-checked', - 'aria-posinset', - 'aria-readonly', - 'aria-setsize' - ], + requiredAttrs: ['aria-checked'], + allowedAttrs: ['aria-posinset', 'aria-readonly', 'aria-setsize'], superclassRole: ['menuitemcheckbox', 'radio'], accessibleNameRequired: true, nameFromContent: true, @@ -465,18 +454,10 @@ const ariaRoles = { }, radio: { type: 'widget', - // Note: since the radio role has an implicit - // aria-check value it is not required to be added by - // the user - // // Note: aria-required is not in the 1.1 or 1.2 specs but is // consistently supported in ATs on the individual radio element - allowedAttrs: [ - 'aria-checked', - 'aria-posinset', - 'aria-setsize', - 'aria-required' - ], + requiredAttrs: ['aria-checked'], + allowedAttrs: ['aria-posinset', 'aria-setsize', 'aria-required'], superclassRole: ['input'], accessibleNameRequired: true, nameFromContent: true, diff --git a/test/integration/rules/aria-required-attr/required-attr.html b/test/integration/rules/aria-required-attr/required-attr.html index 36f15f64a7..79ac4b5f17 100644 --- a/test/integration/rules/aria-required-attr/required-attr.html +++ b/test/integration/rules/aria-required-attr/required-attr.html @@ -44,8 +44,8 @@ > ok -I am BLUE! -I am RED! +I am RED! +I am GREEN! I am GREEN! @@ -57,4 +57,5 @@
fail
fail
fail
- +I am BLUE! + diff --git a/test/integration/rules/aria-required-attr/required-attr.json b/test/integration/rules/aria-required-attr/required-attr.json index 071a9976b7..8701edf2b6 100644 --- a/test/integration/rules/aria-required-attr/required-attr.json +++ b/test/integration/rules/aria-required-attr/required-attr.json @@ -7,6 +7,7 @@ ["#violation3"], ["#violation4"], ["#violation5"], + ["#violation6"], ["#comboboxWithOwns"] ], "passes": [