From 116eb06101ea49a02dbd3e86d2f91ac51e8fe9a9 Mon Sep 17 00:00:00 2001 From: Steven Lambert <2433219+straker@users.noreply.github.com> Date: Mon, 4 Jan 2021 08:28:50 -0700 Subject: [PATCH] fix(aria-valid-attr-value): report when aria-labelledby ref is not in DOM (#2723) --- lib/checks/aria/aria-valid-attr-value-evaluate.js | 11 +++++++++++ test/checks/aria/valid-attr-value.js | 10 ++++++++++ .../aria-valid-attr-value/aria-valid-attr-value.html | 2 +- .../aria-valid-attr-value/aria-valid-attr-value.json | 3 +-- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/checks/aria/aria-valid-attr-value-evaluate.js b/lib/checks/aria/aria-valid-attr-value-evaluate.js index a5a04deed3..edd5d56796 100644 --- a/lib/checks/aria/aria-valid-attr-value-evaluate.js +++ b/lib/checks/aria/aria-valid-attr-value-evaluate.js @@ -74,6 +74,17 @@ function ariaValidAttrValueEvaluate(node, options) { } return; + }, + // aria-labelledby should not mark missing element as violation but + // instead as needs review + // @see https://github.com/dequelabs/axe-core/issues/2621 + 'aria-labelledby': () => { + if (!validateAttrValue(node, 'aria-labelledby')) { + needsReview = `aria-labelledby="${node.getAttribute( + 'aria-labelledby' + )}"`; + messageKey = 'noId'; + } } }; diff --git a/test/checks/aria/valid-attr-value.js b/test/checks/aria/valid-attr-value.js index 8c0108feff..8e9dfbdce5 100644 --- a/test/checks/aria/valid-attr-value.js +++ b/test/checks/aria/valid-attr-value.js @@ -232,6 +232,16 @@ describe('aria-valid-attr-value', function() { ); }); + it('should return undefined on aria-labelledby when the element is not in the DOM', function() { + fixtureSetup(''); + var undefined1 = fixture.querySelector('button'); + assert.isUndefined( + axe.testUtils + .getCheckEvaluate('aria-valid-attr-value') + .call(checkContext, undefined1) + ); + }); + it('should return undefined on aria-current with invalid value', function() { fixtureSetup(''); var undefined1 = fixture.querySelector('button'); diff --git a/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.html b/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.html index aaf14c27ba..7d1ed37c33 100644 --- a/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.html +++ b/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.html @@ -19,7 +19,6 @@

Violations

hi
hi
hi
-
hi
hi
hi
hi
@@ -284,4 +283,5 @@

Possible False Positives

hi
hi
+
hi
diff --git a/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.json b/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.json index 1e94e6447d..ab968fbaaa 100644 --- a/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.json +++ b/test/integration/rules/aria-valid-attr-value/aria-valid-attr-value.json @@ -17,7 +17,6 @@ ["#violation15"], ["#violation16"], ["#violation17"], - ["#violation18"], ["#violation19"], ["#violation20"], ["#violation21"], @@ -225,5 +224,5 @@ ["#pass185"], ["#pass186"] ], - "incomplete": [["#incomplete1"], ["#incomplete2"]] + "incomplete": [["#incomplete1"], ["#incomplete2"], ["#incomplete3"]] }