Bug 1824112 - rewrite test_autocomplete_basic_form_related_realms.html r=credential-management-reviewers,dimi

to create dom dynamically once passwords have been setup

Differential Revision: https://phabricator.services.mozilla.com/D176525
This commit is contained in:
Johannes J. Schmidt
2023-05-10 07:47:25 +00:00
parent 66f21f2a67
commit 025ac0ef47

View File

@@ -12,27 +12,40 @@
<body>
Login Manager test: related realms autocomplete
<p id="display"></p>
<div id="content">
<form id="form1" onsubmit="return false;">
<input type="text" name="uname">
<input type="password" name="pword">
<button type="submit">Submit</button>
</form>
</div>
<div id="content"></div>
<pre id="test">
<script class="testbody" type="text/javascript">
/** Test for Login Manager: related realms autocomplete. **/
const uname = getFormElementByName(1, "uname");
const pword = getFormElementByName(1, "pword");
function createForm () {
const form = document.createElement("form");
function restoreForm() {
uname.value = "";
pword.value = "";
uname.focus();
const usernameInput = document.createElement("input");
usernameInput.type = "text";
usernameInput.name = "uname";
form.appendChild(usernameInput);
const passwordInput = document.createElement("input");
passwordInput.type = "password";
passwordInput.name = "pword";
form.appendChild(passwordInput);
const submitButton = document.createElement("button");
submitButton.type = "submit";
submitButton.name = "submit";
submitButton.innerText = "Submit";
form.appendChild(submitButton);
const content = document.getElementById("content");
if (content.firstChild) {
content.replaceChild(form, content.firstChild);
} else {
content.appendChild(form);
}
return form;
}
function sendFakeAutocompleteEvent(element) {
@@ -41,13 +54,9 @@ function sendFakeAutocompleteEvent(element) {
element.dispatchEvent(acEvent);
}
function spinEventLoop() {
return Promise.resolve();
}
async function promiseACPopupClosed() {
return SimpleTest.promiseWaitForCondition(async () => {
let popupState = await getPopupState();
const popupState = await getPopupState();
return !popupState.open;
}, "Wait for AC popup to be closed");
}
@@ -67,57 +76,59 @@ add_setup(async () => {
});
add_task(async function test_form1_initial_empty() {
await SimpleTest.promiseFocus(window);
const form = createForm();
// Make sure initial form is empty.
checkLoginForm(uname, "", pword, "");
let popupState = await getPopupState();
checkLoginForm(form.uname, "", form.pword, "");
const popupState = await getPopupState();
is(popupState.open, false, "Check popup is initially closed");
});
add_task(async function test_form_related_domain_menuitems() {
await SimpleTest.promiseFocus(window);
restoreForm();
const form = createForm();
form.uname.focus();
const autocompleteItems = await popupByArrowDown();
let popupState = await getPopupState();
const popupState = await getPopupState();
is(popupState.selectedIndex, -1, "Check no entires are selected upon opening");
let expectedMenuItems = ["relatedUser1", "subUser1"];
const expectedMenuItems = ["relatedUser1", "subUser1"];
checkAutoCompleteResults(autocompleteItems, expectedMenuItems, window.location.host, "Check all menuitems are displayed correctly");
let acEvents = await getTelemetryEvents({ process: "parent", filterProps: TelemetryFilterPropsAC, clear: true });
const acEvents = await getTelemetryEvents({ process: "parent", filterProps: TelemetryFilterPropsAC, clear: true });
is(acEvents.length, 1, "One autocomplete event");
checkACTelemetryEvent(acEvents[0], uname, {
checkACTelemetryEvent(acEvents[0], form.uname, {
"hadPrevious": "0",
"login": expectedMenuItems.length + "",
"loginsFooter": "1"
});
checkLoginForm(uname, "", pword, ""); // value shouldn't update just by opening
checkLoginForm(form.uname, "", form.pword, ""); // value shouldn't update just by opening
synthesizeKey("KEY_ArrowDown"); // first item
checkLoginForm(uname, "", pword, ""); // value shouldn't update just by selecting
checkLoginForm(form.uname, "", form.pword, ""); // value shouldn't update just by selecting
synthesizeKey("KEY_Enter");
await promiseFormsProcessedInSameProcess();
is(pword.value, "relatedPass1", "password should match the login that was selected");
checkLoginForm(uname, "relatedUser1", pword, "relatedPass1");
is(form.pword.value, "relatedPass1", "password should match the login that was selected");
checkLoginForm(form.uname, "relatedUser1", form.pword, "relatedPass1");
restoreForm();
form.uname.value = "";
form.pword.value = "";
form.uname.focus();
await popupByArrowDown();
synthesizeKey("KEY_ArrowDown"); // first item
synthesizeKey("KEY_ArrowDown"); // second item
checkLoginForm(uname, "", pword, ""); // value shouldn't update just by selecting
checkLoginForm(form.uname, "", form.pword, ""); // value shouldn't update just by selecting
synthesizeKey("KEY_Enter");
await promiseFormsProcessedInSameProcess();
is(pword.value, "subPass1", "password should match the login that was selected");
checkLoginForm(uname, "subUser1", pword, "subPass1");
restoreForm();
is(form.pword.value, "subPass1", "password should match the login that was selected");
checkLoginForm(form.uname, "subUser1", form.pword, "subPass1");
});
</script>
</pre>
</body>