From 1a028793ab7375cd1e483cfd6bdbf582421bd5dc Mon Sep 17 00:00:00 2001 From: Gabe Olesen Date: Mon, 13 Sep 2021 21:10:27 +0100 Subject: [PATCH 1/8] add visible checks and tests --- lib/checks/aria/aria-errormessage-evaluate.js | 10 +++- lib/checks/aria/aria-errormessage.json | 3 +- test/checks/aria/errormessage.js | 48 +++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/lib/checks/aria/aria-errormessage-evaluate.js b/lib/checks/aria/aria-errormessage-evaluate.js index 6986efdb78..5ebd1e6879 100644 --- a/lib/checks/aria/aria-errormessage-evaluate.js +++ b/lib/checks/aria/aria-errormessage-evaluate.js @@ -1,7 +1,7 @@ import standards from '../../standards'; import { idrefs } from '../../commons/dom'; import { tokenList } from '../../core/utils'; - +import { isVisible } from '../../commons/dom'; /** * Check if `aria-errormessage` references an element that also uses a technique to announce the message (aria-live, aria-describedby, etc.). * @@ -55,6 +55,13 @@ function ariaErrormessageEvaluate(node, options, virtualNode) { } if (idref) { + if (!isVisible(idref)) { + this.data({ + messageKey: 'hidden', + values: tokenList(attr) + }); + return false; + } return ( idref.getAttribute('role') === 'alert' || idref.getAttribute('aria-live') === 'assertive' || @@ -62,6 +69,7 @@ function ariaErrormessageEvaluate(node, options, virtualNode) { tokenList(virtualNode.attr('aria-describedby')).indexOf(attr) > -1 ); } + return; } diff --git a/lib/checks/aria/aria-errormessage.json b/lib/checks/aria/aria-errormessage.json index ce672a591c..deeaccddf0 100644 --- a/lib/checks/aria/aria-errormessage.json +++ b/lib/checks/aria/aria-errormessage.json @@ -7,7 +7,8 @@ "pass": "aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique", "fail": { "singular": "aria-errormessage value `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)", - "plural": "aria-errormessage values `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)" + "plural": "aria-errormessage values `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)", + "hidden": "aria-errormessage value `${data.values}` cannot be reference a hidden element" }, "incomplete": { "singular": "ensure aria-errormessage value `${data.values}` references an existing element", diff --git a/test/checks/aria/errormessage.js b/test/checks/aria/errormessage.js index 1fc42bcb92..416e3a3875 100644 --- a/test/checks/aria/errormessage.js +++ b/test/checks/aria/errormessage.js @@ -144,6 +144,54 @@ describe('aria-errormessage', function() { ); }); + it('should return false when hidden attribute is used', function() { + var vNode = queryFixture( + '' + + '' + ); + assert.isFalse( + axe.testUtils + .getCheckEvaluate('aria-errormessage') + .call(checkContext, null, null, vNode) + ); + assert.deepEqual(checkContext._data, { + messageKey: 'hidden', + values: ['id-message-1'] + }); + }); + + it('should return false when display: "none" is used', function() { + var vNode = queryFixture( + '' + + '' + ); + assert.isFalse( + axe.testUtils + .getCheckEvaluate('aria-errormessage') + .call(checkContext, null, null, vNode) + ); + assert.deepEqual(checkContext._data, { + messageKey: 'hidden', + values: ['id-message-1'] + }); + }); + + it('should return false when visibility: "hidden" is used', function() { + var vNode = queryFixture( + '' + + '' + ); + assert.isFalse( + axe.testUtils + .getCheckEvaluate('aria-errormessage') + .call(checkContext, null, null, vNode) + ); + assert.deepEqual(checkContext._data, { + messageKey: 'hidden', + values: ['id-message-1'] + }); + }); + (shadowSupported ? it : xit)( 'should return undefined if aria-errormessage value crosses shadow boundary', function() { From 0ea303c3c91db8e554ffc4d346b312a0884fb54c Mon Sep 17 00:00:00 2001 From: Gabe <41127686+Zidious@users.noreply.github.com> Date: Mon, 20 Sep 2021 16:22:16 +0100 Subject: [PATCH 2/8] fix typo --- lib/checks/aria/aria-errormessage.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/checks/aria/aria-errormessage.json b/lib/checks/aria/aria-errormessage.json index deeaccddf0..84901729af 100644 --- a/lib/checks/aria/aria-errormessage.json +++ b/lib/checks/aria/aria-errormessage.json @@ -8,7 +8,7 @@ "fail": { "singular": "aria-errormessage value `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)", "plural": "aria-errormessage values `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)", - "hidden": "aria-errormessage value `${data.values}` cannot be reference a hidden element" + "hidden": "aria-errormessage value `${data.values}` cannot reference a hidden element" }, "incomplete": { "singular": "ensure aria-errormessage value `${data.values}` references an existing element", From 49a913bb3f7244d18d127df86a9ad004058f2b86 Mon Sep 17 00:00:00 2001 From: Gabe Olesen Date: Mon, 20 Sep 2021 16:33:56 +0100 Subject: [PATCH 3/8] enable screenreader on isVisible --- lib/checks/aria/aria-errormessage-evaluate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/checks/aria/aria-errormessage-evaluate.js b/lib/checks/aria/aria-errormessage-evaluate.js index 5ebd1e6879..bacb1c9c7c 100644 --- a/lib/checks/aria/aria-errormessage-evaluate.js +++ b/lib/checks/aria/aria-errormessage-evaluate.js @@ -55,7 +55,7 @@ function ariaErrormessageEvaluate(node, options, virtualNode) { } if (idref) { - if (!isVisible(idref)) { + if (!isVisible(idref, true)) { this.data({ messageKey: 'hidden', values: tokenList(attr) From c4555246b0abce73e21dbc984a7172b5a96d2539 Mon Sep 17 00:00:00 2001 From: Gabe Olesen Date: Mon, 20 Sep 2021 18:33:30 +0100 Subject: [PATCH 4/8] add tests --- test/checks/aria/errormessage.js | 14 ++++- .../aria-valid-attr-value.html | 60 +++++++++++++++++++ .../aria-valid-attr-value.json | 11 +++- test/playground.html | 12 +++- 4 files changed, 93 insertions(+), 4 deletions(-) diff --git a/test/checks/aria/errormessage.js b/test/checks/aria/errormessage.js index 416e3a3875..82d1ddf566 100644 --- a/test/checks/aria/errormessage.js +++ b/test/checks/aria/errormessage.js @@ -146,7 +146,7 @@ describe('aria-errormessage', function() { it('should return false when hidden attribute is used', function() { var vNode = queryFixture( - '' + + '
' + '' ); assert.isFalse( @@ -192,6 +192,18 @@ describe('aria-errormessage', function() { }); }); + it('should return true when no hidden functionality is used', function() { + var vNode = queryFixture( + '' + + '
Error message 1
' + ); + assert.isTrue( + axe.testUtils + .getCheckEvaluate('aria-errormessage') + .call(checkContext, null, null, vNode) + ); + }); + (shadowSupported ? it : xit)( 'should return undefined if aria-errormessage value crosses shadow boundary', function() { 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 52448862ff..8352613506 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 @@ -51,6 +51,46 @@

Violations

hi
hi
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +

Possible False Positives

@@ -276,6 +316,26 @@

Possible False Positives

hi
hi
+
+ +
+ +
hi
+ +
+ +
+
Hi
Hi2
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 6abcb9708b..6d1c6d7e15 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 @@ -41,7 +41,11 @@ ["#violation40"], ["#violation41"], ["#violation42"], - ["#violation43"] + ["#violation43"], + ["#violation44"], + ["#violation45"], + ["#violation46"], + ["#violation47"] ], "passes": [ ["#pass1"], @@ -220,7 +224,10 @@ ["#pass183"], ["#pass184"], ["#pass185"], - ["#pass186"] + ["#pass186"], + ["#pass187"], + ["#pass188"], + ["#pass189"] ], "incomplete": [ ["#incomplete1"], diff --git a/test/playground.html b/test/playground.html index 4de25a4c17..19cf4f272d 100644 --- a/test/playground.html +++ b/test/playground.html @@ -2,7 +2,17 @@ O hai -
foo
+ + +
+ + +