summaryrefslogtreecommitdiffstats
path: root/toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js')
-rw-r--r--toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js b/toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js
new file mode 100644
index 0000000000..9b38b95c9c
--- /dev/null
+++ b/toolkit/components/autocomplete/tests/unit/test_autofillSelectedPopupIndex.js
@@ -0,0 +1,109 @@
+"use strict";
+
+add_task(async function sameCaseAsMatch() {
+ await runTest("moz");
+});
+
+add_task(async function differentCaseFromMatch() {
+ await runTest("MOZ");
+});
+
+async function runTest(searchStr) {
+ let matches = ["mozilla.org", "example.com"];
+ let result = new AutoCompleteResultBase(matches);
+ result.defaultIndex = 0;
+
+ let search = new AutoCompleteSearchBase("search", result);
+ registerAutoCompleteSearch(search);
+
+ let input = new AutoCompleteInputBase([search.name]);
+ input.completeSelectedIndex = true;
+ input.completeDefaultIndex = true;
+
+ // Start off with the search string in the input. The selection must be
+ // collapsed and the caret must be at the end to trigger autofill below.
+ input.textValue = searchStr;
+ input.selectTextRange(searchStr.length, searchStr.length);
+ Assert.equal(
+ input.selectionStart,
+ searchStr.length,
+ "Selection should start at the end of the input"
+ );
+ Assert.equal(
+ input.selectionEnd,
+ searchStr.length,
+ "Selection should end at the end of the input"
+ );
+
+ let controller = Cc["@mozilla.org/autocomplete/controller;1"].createInstance(
+ Ci.nsIAutoCompleteController
+ );
+ controller.input = input;
+ input.controller = controller;
+
+ // Start a search.
+ await new Promise(resolve => {
+ controller.startSearch(searchStr);
+ input.onSearchComplete = () => {
+ // The first match should have autofilled, but the case of the search
+ // string should be preserved.
+ let expectedValue = searchStr + matches[0].substr(searchStr.length);
+ Assert.equal(input.textValue, expectedValue, "Should have autofilled");
+ Assert.equal(
+ input.selectionStart,
+ searchStr.length,
+ "Selection should start after search string"
+ );
+ Assert.equal(
+ input.selectionEnd,
+ expectedValue.length,
+ "Selection should end at the end of the input"
+ );
+ resolve();
+ };
+ });
+
+ // Key down to select the second match in the popup.
+ // Hardcode KeyboardEvent.DOM_VK_DOWN, because we can't easily
+ // include KeyboardEvent here.
+ controller.handleKeyNavigation(0x28 /* KeyboardEvent.DOM_VK_DOWN */);
+ let expectedValue = matches[1];
+ Assert.equal(
+ input.textValue,
+ expectedValue,
+ "Should have filled second match"
+ );
+ Assert.equal(
+ input.selectionStart,
+ expectedValue.length,
+ "Selection should start at the end of the input"
+ );
+ Assert.equal(
+ input.selectionEnd,
+ expectedValue.length,
+ "Selection should end at the end of the input"
+ );
+
+ // Key up to select the first match again. The input should be restored
+ // exactly as it was when the first match was autofilled above: the search
+ // string's case should be preserved, and the selection should be preserved.
+ // Hardcode KeyboardEvent.DOM_VK_UP, because we can't easily
+ // include KeyboardEvent here.
+ controller.handleKeyNavigation(0x26 /* KeyboardEvent.DOM_VK_UP */);
+ expectedValue = searchStr + matches[0].substr(searchStr.length);
+ Assert.equal(
+ input.textValue,
+ expectedValue,
+ "Should have filled first match again"
+ );
+ Assert.equal(
+ input.selectionStart,
+ searchStr.length,
+ "Selection should start after search string again"
+ );
+ Assert.equal(
+ input.selectionEnd,
+ expectedValue.length,
+ "Selection should end at the end of the input again"
+ );
+}