summaryrefslogtreecommitdiffstats
path: root/toolkit/content/tests/mochitest/test_autocomplete_change_after_focus.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/content/tests/mochitest/test_autocomplete_change_after_focus.html')
-rw-r--r--toolkit/content/tests/mochitest/test_autocomplete_change_after_focus.html102
1 files changed, 102 insertions, 0 deletions
diff --git a/toolkit/content/tests/mochitest/test_autocomplete_change_after_focus.html b/toolkit/content/tests/mochitest/test_autocomplete_change_after_focus.html
new file mode 100644
index 0000000000..c9ee4870e9
--- /dev/null
+++ b/toolkit/content/tests/mochitest/test_autocomplete_change_after_focus.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=998893
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Bug 998893 - Ensure that input.value changes affect autocomplete</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script type="text/javascript">
+ /** Test for Bug 998893 **/
+ add_task(async function waitForFocus() {
+ await new Promise(resolve => SimpleTest.waitForFocus(resolve));
+ });
+
+ add_task(async function setup() {
+ await new Promise(resolve => {
+ let chromeScript = SpecialPowers.loadChromeScript(function() {
+ /* eslint-env mozilla/chrome-script */
+ const {FormHistory} = ChromeUtils.import("resource://gre/modules/FormHistory.jsm");
+ FormHistory.update([
+ { op: "bump", fieldname: "field1", value: "Default text option" },
+ { op: "bump", fieldname: "field1", value: "New value option" },
+ ]).then(() => {
+ sendAsyncMessage("Test:Resume");
+ });
+ });
+
+ chromeScript.addMessageListener("Test:Resume", function resumeListener() {
+ chromeScript.removeMessageListener("Test:Resume", resumeListener);
+ chromeScript.destroy();
+ resolve();
+ });
+ });
+ });
+
+ add_task(async function runTest() {
+ let promisePopupShown = new Promise(resolve => {
+ let chromeScript = SpecialPowers.loadChromeScript(function() {
+ /* eslint-env mozilla/chrome-script */
+ let window = Services.wm.getMostRecentWindow("navigator:browser");
+ let popup = window.document.getElementById("PopupAutoComplete");
+ popup.addEventListener("popupshown", function() {
+ sendAsyncMessage("Test:Resume");
+ }, {once: true});
+ });
+
+ chromeScript.addMessageListener("Test:Resume", function resumeListener() {
+ chromeScript.removeMessageListener("Test:Resume", resumeListener);
+ chromeScript.destroy();
+ resolve();
+ });
+ });
+
+ let field = document.getElementById("field1");
+
+ let promiseFieldFocus = new Promise(resolve => {
+ field.addEventListener("focus", function onFocus() {
+ info("field focused");
+ field.value = "New value";
+ sendKey("DOWN");
+ resolve();
+ });
+ });
+
+ let handleEnterPromise = new Promise(resolve => {
+ function handleEnter(evt) {
+ if (evt.keyCode != KeyEvent.DOM_VK_RETURN) {
+ return;
+ }
+ info("RETURN received for phase: " + evt.eventPhase);
+ is(evt.target.value, "New value option", "Check that the correct autocomplete entry was used");
+ resolve();
+ }
+
+ SpecialPowers.addSystemEventListener(field, "keypress", handleEnter, true);
+ });
+
+ field.focus();
+
+ await promiseFieldFocus;
+
+ await promisePopupShown;
+
+ synthesizeKey("KEY_ArrowDown");
+ synthesizeKey("KEY_Enter");
+ synthesizeKey("KEY_Enter");
+
+ await handleEnterPromise;
+ });
+ </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=998893">Mozilla Bug 998893</a>
+<p id="display"><input id="field1" value="Default text"></p>
+<div id="content" style="display: none"></div>
+<pre id="test">
+</pre>
+</body>
+</html>