summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/browser/browser_test_changeContentInputValue.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/passwordmgr/test/browser/browser_test_changeContentInputValue.js')
-rw-r--r--toolkit/components/passwordmgr/test/browser/browser_test_changeContentInputValue.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/toolkit/components/passwordmgr/test/browser/browser_test_changeContentInputValue.js b/toolkit/components/passwordmgr/test/browser/browser_test_changeContentInputValue.js
new file mode 100644
index 0000000000..d0016708b2
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/browser/browser_test_changeContentInputValue.js
@@ -0,0 +1,129 @@
+/**
+ * Tests head.js#changeContentInputValue.
+ */
+
+"use strict";
+
+// The origin for the test URIs.
+const TEST_ORIGIN = "https://example.com";
+const BASIC_FORM_PAGE_PATH = DIRECTORY_PATH + "form_basic.html";
+const USERNAME_INPUT_SELECTOR = "#form-basic-username";
+
+let testCases = [
+ {
+ name: "blank string should clear input value",
+ originalValue: "start text",
+ inputEvent: "",
+ expectedKeypresses: ["Backspace"],
+ },
+ {
+ name: "input value that adds to original string should only add the difference",
+ originalValue: "start text",
+ inputEvent: "start text!!!",
+ expectedKeypresses: ["!", "!", "!"],
+ },
+ {
+ name: "input value that is a subset of original string should only delete the difference",
+ originalValue: "start text",
+ inputEvent: "start",
+ expectedKeypresses: ["Backspace"],
+ },
+ {
+ name: "input value that is unrelated to the original string should replace it",
+ originalValue: "start text",
+ inputEvent: "wut?",
+ expectedKeypresses: ["w", "u", "t", "?"],
+ },
+];
+
+for (let testData of testCases) {
+ let tmp = {
+ async [testData.name]() {
+ await testStringChange(testData);
+ },
+ };
+ add_task(tmp[testData.name]);
+}
+
+async function testStringChange({
+ name,
+ originalValue,
+ inputEvent,
+ expectedKeypresses,
+}) {
+ info("Starting test " + name);
+ await LoginTestUtils.clearData();
+
+ await LoginTestUtils.addLogin({
+ username: originalValue,
+ password: "password",
+ });
+
+ let formProcessedPromise = listenForTestNotification("FormProcessed");
+ let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
+ info("Opening tab with url: " + url);
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url,
+ },
+ async function (browser) {
+ info(`Opened tab with url: ${url}, waiting for focus`);
+ await SimpleTest.promiseFocus(browser.ownerGlobal);
+ info("Waiting for form-processed message");
+ await formProcessedPromise;
+ await checkForm(browser, originalValue);
+ info("form checked");
+
+ await ContentTask.spawn(
+ browser,
+ { USERNAME_INPUT_SELECTOR, expectedKeypresses },
+ async function ({ USERNAME_INPUT_SELECTOR, expectedKeypresses }) {
+ let input = content.document.querySelector(USERNAME_INPUT_SELECTOR);
+
+ let verifyKeyListener = event => {
+ Assert.equal(
+ expectedKeypresses[0],
+ event.key,
+ "Key press matches expected value"
+ );
+ expectedKeypresses.shift();
+
+ if (!expectedKeypresses.length) {
+ input.removeEventListner("keydown", verifyKeyListener);
+ input.addEventListener("keydown", () => {
+ throw new Error("Unexpected keypress encountered");
+ });
+ }
+ };
+
+ input.addEventListener("keydown", verifyKeyListener);
+ }
+ );
+
+ changeContentInputValue(browser, USERNAME_INPUT_SELECTOR, inputEvent);
+ }
+ );
+}
+
+async function checkForm(browser, expectedUsername) {
+ await ContentTask.spawn(
+ browser,
+ {
+ expectedUsername,
+ USERNAME_INPUT_SELECTOR,
+ },
+ async function contentCheckForm({
+ expectedUsername,
+ USERNAME_INPUT_SELECTOR,
+ }) {
+ let field = content.document.querySelector(USERNAME_INPUT_SELECTOR);
+ Assert.equal(
+ field.value,
+ expectedUsername,
+ `Username field has teh expected initial value '${expectedUsername}'`
+ );
+ }
+ );
+}