summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js185
1 files changed, 185 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js b/browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js
new file mode 100644
index 0000000000..a65da338a8
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_autoFill_clear_properly_on_accent_char.js
@@ -0,0 +1,185 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_setup(async function () {
+ await cleanUp();
+});
+
+add_task(async function test_autoFill_clear_properly_on_accent_char() {
+ await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "",
+ url: "https://example.com",
+ });
+
+ await search({
+ searchString: "e",
+ valueBefore: "e",
+ valueAfter: "example.com/",
+ placeholderAfter: "example.com/",
+ });
+
+ // Simulate macos accent character insertion. First the character is selected and
+ // then replaced by the accentuated character.
+ gURLBar.selectionStart = 0;
+ gURLBar.selectionEnd = 1;
+ EventUtils.sendChar("è", window);
+
+ await UrlbarTestUtils.promiseSearchComplete(window);
+
+ is(gURLBar.value, "è", "No auto complete for accent char.");
+
+ await cleanUp();
+});
+
+add_task(async function dont_clear_placeholder_if_autofill_accepted() {
+ await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "",
+ url: "https://abc.yz",
+ });
+
+ let selectionChangedPromise = waitForSelectionChange({ times: 2 });
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "abc",
+ });
+ await UrlbarTestUtils.promiseSearchComplete(window);
+
+ // PromiseAutoCompleteResultPopup fires one input event and two
+ // selectionchange events. If we don't wait for them to be fired before
+ // entering navigation keys, the selection gets messed up.
+ await selectionChangedPromise;
+
+ Assert.equal(gURLBar.value, "abc.yz/", "autofilled value is as expected");
+ info("Synthesizing keys");
+ await sendNavigationKey("KEY_ArrowRight");
+ await sendNavigationKey("KEY_ArrowLeft");
+ await sendNavigationKey("KEY_ArrowLeft");
+ await sendNavigationKey("KEY_ArrowLeft");
+
+ EventUtils.sendChar("x");
+ is(gURLBar.value, "abc.xyz/", "No auto complete for accent char.");
+
+ await cleanUp();
+});
+
+add_task(async function dont_clear_placeholder_after_selection_change() {
+ await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "",
+ url: "https://mozilla.org/",
+ });
+
+ let userTypedValue = "mo";
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: userTypedValue,
+ });
+
+ Assert.equal(
+ gURLBar.value,
+ "mozilla.org/",
+ "autofilled value is as expected"
+ );
+
+ info("Simulate mouse click to change caret position.");
+ let selectionChangedPromise = waitForSelectionChange();
+ is(
+ gURLBar.selectionStart,
+ userTypedValue.length,
+ " SelectionStart at the beginning of the placeholder"
+ );
+ is(
+ gURLBar.selectionEnd,
+ gURLBar.value.length,
+ " Selection at the end of the placeholder"
+ );
+ gURLBar.selectionStart = 1;
+ gURLBar.selectionEnd = 1;
+
+ await selectionChangedPromise;
+ await UrlbarTestUtils.promiseSearchComplete(window);
+
+ EventUtils.sendChar("o", window);
+
+ await UrlbarTestUtils.promiseSearchComplete(window);
+
+ is(
+ gURLBar.value,
+ "moozilla.org/",
+ "Autofill was not cleared and new character was inserted."
+ );
+
+ await cleanUp();
+});
+
+add_task(async function modify_autofilled_selection() {
+ await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ title: "",
+ url: "https://developer.mozilla.org/en-US/",
+ });
+
+ let userTypedValue = "d";
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: userTypedValue,
+ });
+
+ Assert.equal(
+ gURLBar.value,
+ "developer.mozilla.org/",
+ "autofilled value is as expected"
+ );
+ await sendNavigationKey("KEY_ArrowDown");
+
+ let selectionChangedPromise = waitForSelectionChange();
+ gURLBar.selectionStart = gURLBar.value.length - 6;
+ gURLBar.selectionEnd = gURLBar.value.length - 1;
+
+ await selectionChangedPromise;
+ await UrlbarTestUtils.promiseSearchComplete(window);
+
+ EventUtils.sendChar("j", window);
+
+ await UrlbarTestUtils.promiseSearchComplete(window);
+ is(
+ gURLBar.value,
+ UrlbarTestUtils.trimURL("https://developer.mozilla.org/j/"),
+ "gURLBar contains correct modified autofilled value"
+ );
+});
+
+async function cleanUp() {
+ await UrlbarTestUtils.promisePopupClose(window, () => gURLBar.blur());
+ await PlacesUtils.bookmarks.eraseEverything();
+ await PlacesUtils.history.clear();
+}
+
+async function sendNavigationKey(key) {
+ let selectionChangePromise = waitForSelectionChange();
+ EventUtils.synthesizeKey(key);
+ await selectionChangePromise;
+}
+
+async function waitForSelectionChange(options = { times: 1 }) {
+ let observedSelectionChanges = 0;
+
+ function handler(event, resolve) {
+ observedSelectionChanges += 1;
+ if (observedSelectionChanges == options.times) {
+ resolve();
+ }
+ }
+
+ await new Promise(resolve => {
+ gURLBar.addEventListener("selectionchange", event =>
+ handler(event, resolve)
+ );
+ });
+
+ gURLBar.removeEventListener("selectionchange", handler);
+}