149 lines
7.6 KiB
HTML
149 lines
7.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
<script>
|
|
description('Tests for valid autocomplete tokens on input, select, and textarea elements.');
|
|
|
|
var input = document.createElement('input');
|
|
var textarea = document.createElement('textarea');
|
|
var select = document.createElement('select');
|
|
var button = document.createElement('button');
|
|
var keygen = document.createElement('keygen');
|
|
var autocompleteableControls = [ input, textarea, select ];
|
|
|
|
var keywords = [ "name", "honorific-prefix", "given-name", "additional-name", "family-name", "honorific-suffix", "nickname", "organization-title", "username", "new-password", "current-password", "organization", "street-address", "address-line1", "address-line2", "address-line3", "address-level4", "address-level3", "address-level2", "address-level1", "country", "country-name", "postal-code", "cc-name", "cc-given-name", "cc-additional-name", "cc-family-name", "cc-number", "cc-exp", "cc-exp-month", "cc-exp-year", "cc-csc", "cc-type", "transaction-currency", "transaction-amount", "language", "bday", "bday-day", "bday-month", "bday-year", "sex", "url", "photo", "tel", "tel-country-code", "tel-national", "tel-area-code", "tel-local", "tel-local-prefix", "tel-local-suffix", "tel-extension", "email", "impp" ];
|
|
|
|
var modeTokens = [ "billing", "shipping" ];
|
|
|
|
debug('Valid keywords:');
|
|
keywords.forEach(keyword => {
|
|
input.autocomplete = keyword;
|
|
shouldBeEqualToString('input.autocomplete', keyword);
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', keyword);
|
|
});
|
|
|
|
debug('');
|
|
debug('Contact scope:');
|
|
var contactTokens = [ "tel", "tel-country-code", "tel-national", "tel-area-code", "tel-local", "tel-local-prefix", "tel-local-suffix", "tel-extension", "email", "impp" ];
|
|
var contactScopeTokens = [ "home", "work", "mobile", "fax", "pager" ];
|
|
contactScopeTokens.forEach(scopeToken => {
|
|
contactTokens.forEach(contactToken => {
|
|
input.autocomplete = scopeToken + " " + contactToken;
|
|
shouldBeEqualToString('input.autocomplete', scopeToken + " " + contactToken);
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', contactToken);
|
|
})
|
|
});
|
|
|
|
debug('');
|
|
debug('Mode:');
|
|
var addressTokens = [ "street-address", "address-line1", "address-line2", "address-line3", "address-level4", "address-level3", "address-level2", "address-level1", "country", "country-name", "postal-code" ];
|
|
var modeTokens = [ "shipping", "billing" ];
|
|
modeTokens.forEach(modeToken => {
|
|
addressTokens.forEach(addressToken => {
|
|
input.autocomplete = modeToken + " " + addressToken;
|
|
shouldBeEqualToString('input.autocomplete', modeToken + " " + addressToken);
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', addressToken);
|
|
})
|
|
});
|
|
|
|
debug('');
|
|
debug('Section:');
|
|
keywords.forEach(keyword => {
|
|
var value = "section-parent " + keyword;
|
|
input.autocomplete = value;
|
|
shouldBeEqualToString('input.autocomplete', value);
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', keyword);
|
|
});
|
|
|
|
debug('');
|
|
debug('Invalid combinations:');
|
|
autocompleteableControls.forEach(control => {
|
|
control.autocomplete = 'invalid';
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
});
|
|
// Two normal tokens
|
|
input.autocomplete = "name name";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
input.autocomplete = "name bday";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
// Contact scope token + non-contact token.
|
|
input.autocomplete = "pager bday";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
// Two contact scope tokens.
|
|
input.autocomplete = "home work tel";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
// Two mode tokens.
|
|
input.autocomplete = "shipping billing tel";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
// Two section tokens.
|
|
input.autocomplete = "section-a section-b tel";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
// Anything + on/off.
|
|
input.autocomplete = "tel on";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
input.autocomplete = "tel off";
|
|
shouldBeEmptyString('input.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(input)', "on");
|
|
|
|
// Test dynamically changing the form owner's autocomplete attribute
|
|
// to ensure the field name correctly reflects it.
|
|
var form = document.createElement("form");
|
|
var inputInAutocompleteOffForm = document.createElement("input");
|
|
form.appendChild(inputInAutocompleteOffForm);
|
|
document.body.appendChild(form);
|
|
form.autocomplete = "off";
|
|
inputInAutocompleteOffForm.autocomplete = "";
|
|
shouldBeEmptyString('inputInAutocompleteOffForm.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(inputInAutocompleteOffForm)', "off");
|
|
|
|
form.autocomplete = "on";
|
|
shouldBeEmptyString('inputInAutocompleteOffForm.autocomplete');
|
|
if (window.internals)
|
|
shouldBeEqualToString('window.internals.autofillFieldName(inputInAutocompleteOffForm)', "on");
|
|
|
|
debug('');
|
|
debug('Non-autocompleteable controls:');
|
|
// Buttons and keygens are not autocompleteable, so their autocomplete attribute is not sanitized.
|
|
button.autocomplete = 'invalid';
|
|
shouldBeEqualToString('button.autocomplete', 'invalid');
|
|
keygen.autocomplete = 'invalid';
|
|
shouldBeEqualToString('keygen.autocomplete', 'invalid');
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|