diff --git a/lib/checks/forms/autocomplete-valid-evaluate.js b/lib/checks/forms/autocomplete-valid-evaluate.js index 8139dc64dd..8e80aa06fb 100644 --- a/lib/checks/forms/autocomplete-valid-evaluate.js +++ b/lib/checks/forms/autocomplete-valid-evaluate.js @@ -1,6 +1,6 @@ import { isValidAutocomplete } from '../../commons/text'; -function autocompleteValidEvaluate(node, options, virtualNode) { +function autocompleteValidEvaluate(_node, options, virtualNode) { const autocomplete = virtualNode.attr('autocomplete') || ''; return isValidAutocomplete(autocomplete, options); } diff --git a/lib/checks/forms/autocomplete-valid.json b/lib/checks/forms/autocomplete-valid.json index 0906e4b89a..43cc04358c 100644 --- a/lib/checks/forms/autocomplete-valid.json +++ b/lib/checks/forms/autocomplete-valid.json @@ -5,7 +5,8 @@ "impact": "serious", "messages": { "pass": "the autocomplete attribute is correctly formatted", - "fail": "the autocomplete attribute is incorrectly formatted" + "fail": "the autocomplete attribute is incorrectly formatted", + "incomplete": "the autocomplete attribute is incorrect but safe to use" } }, "options": { diff --git a/lib/commons/text/is-valid-autocomplete.js b/lib/commons/text/is-valid-autocomplete.js index 8ca49035a2..2ad0b4f6d6 100644 --- a/lib/commons/text/is-valid-autocomplete.js +++ b/lib/commons/text/is-valid-autocomplete.js @@ -59,7 +59,8 @@ export const autocomplete = { 'email', 'impp' ], - locations: ['billing', 'shipping'] + locations: ['billing', 'shipping'], + invalidButSafe: ['text'] }; function isValidAutocomplete( @@ -117,6 +118,11 @@ function isValidAutocomplete( } const purposeTerm = autocompleteTerms[autocompleteTerms.length - 1]; + + if (autocomplete.invalidButSafe.includes(purposeTerm)) { + return undefined; + } + return ( standaloneTerms.includes(purposeTerm) || qualifiedTerms.includes(purposeTerm) diff --git a/locales/_template.json b/locales/_template.json index 9aa84b106a..b9ab7bbdef 100644 --- a/locales/_template.json +++ b/locales/_template.json @@ -683,7 +683,8 @@ }, "autocomplete-valid": { "pass": "the autocomplete attribute is correctly formatted", - "fail": "the autocomplete attribute is incorrectly formatted" + "fail": "the autocomplete attribute is incorrectly formatted", + "incomplete": "the autocomplete attribute is incorrect but safe to use" }, "accesskeys": { "pass": "Accesskey attribute value is unique", diff --git a/test/checks/forms/autocomplete-valid.js b/test/checks/forms/autocomplete-valid.js index d44b0dd73c..f6ce08dcc3 100644 --- a/test/checks/forms/autocomplete-valid.js +++ b/test/checks/forms/autocomplete-valid.js @@ -21,6 +21,11 @@ describe('autocomplete-valid', function () { assert.isFalse(evaluate.apply(checkContext, params)); }); + it('returns undefined (incomplete) if autocomplete is not valid but safe', function () { + var params = checkSetup(''); + assert.isUndefined(evaluate.apply(checkContext, params)); + }); + it('uses options to change what is valid autocomplete', function () { var options = { stateTerms: ['foo'] }; var params = checkSetup( diff --git a/test/integration/rules/autocomplete-valid/autocomplete-valid.html b/test/integration/rules/autocomplete-valid/autocomplete-valid.html index d68033d65f..b73d75ef2c 100644 --- a/test/integration/rules/autocomplete-valid/autocomplete-valid.html +++ b/test/integration/rules/autocomplete-valid/autocomplete-valid.html @@ -170,3 +170,6 @@ + + + diff --git a/test/integration/rules/autocomplete-valid/autocomplete-valid.json b/test/integration/rules/autocomplete-valid/autocomplete-valid.json index f1f6f4d974..885682b0b3 100644 --- a/test/integration/rules/autocomplete-valid/autocomplete-valid.json +++ b/test/integration/rules/autocomplete-valid/autocomplete-valid.json @@ -2,6 +2,7 @@ "description": "autocomplete-valid tests", "rule": "autocomplete-valid", "violations": [["#fail1"], ["#fail2"], ["#fail3"], ["#fail4"], ["#fail5"]], + "incomplete": [["#incomplete1"]], "passes": [ ["#pass1"], ["#pass2"],