Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(autocomplete-valid ): Ignore readonly autocomplete field #4721

Merged
9 changes: 9 additions & 0 deletions lib/rules/autocomplete-matches.js
Original file line number Diff line number Diff line change
@@ -14,6 +14,15 @@ function autocompleteMatches(node, virtualNode) {
return false;
}

// The element has a `readonly` or `aria-readonly="true"` attribute
const ariaReadonly = virtualNode.attr('aria-readonly') || 'false';
if (
virtualNode.hasAttr('readonly') ||
ariaReadonly.toLowerCase() === 'true'
) {
return false;
}

// The element is an `input` element a `type` of `hidden`, `button`, `submit` or `reset`
const excludedInputTypes = ['submit', 'reset', 'button', 'hidden'];
if (
Original file line number Diff line number Diff line change
@@ -177,3 +177,7 @@
<input autocomplete="gender" id="incomplete3" />
<input autocomplete="message" id="incomplete4" />
<input autocomplete="content" id="incomplete5" />

<!-- When readonly attributes placed, should be ignored -->
<input autocomplete="badterm" readonly id="inapplicable11" />
<input autocomplete="badterm" aria-readonly="true" id="inapplicable12" />
21 changes: 21 additions & 0 deletions test/rule-matches/autocomplete-matches.js
Original file line number Diff line number Diff line change
@@ -129,4 +129,25 @@ describe('autocomplete-matches', function () {
);
assert.isFalse(rule.matches(null, vNode));
});

it('returns false if readonly attribute is placed whether autocomplete is not valid', function () {
var vNode = queryFixture(
'<input readonly autocomplete="some invalid value" id="target" />'
);
assert.isFalse(rule.matches(null, vNode));
});

it('returns false if aria-readonly attribute is true whether autocomplete is not valid', function () {
var vNode = queryFixture(
'<input aria-readonly="true" autocomplete="some invalid value" id="target" />'
);
assert.isFalse(rule.matches(null, vNode));
});

it('returns true if aria-readonly attribute is false whether autocomplete is not valid', function () {
var vNode = queryFixture(
'<input aria-readonly="false" autocomplete="some invalid value" id="target" />'
);
assert.isTrue(rule.matches(null, vNode));
});
});