Mypal/toolkit/components/autocomplete/tests/unit/test_hiddenResult.js
2019-03-11 13:26:37 +03:00

77 lines
2.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
function AutoCompleteResult(aValues) {
this._values = aValues;
this.defaultIndex = -1;
this._typeAheadResult = false;
}
AutoCompleteResult.prototype = Object.create(AutoCompleteResultBase.prototype);
function AutoCompleteTypeAheadResult(aValues) {
this._values = aValues;
this.defaultIndex = 0;
this._typeAheadResult = true;
}
AutoCompleteTypeAheadResult.prototype = Object.create(AutoCompleteResultBase.prototype);
/**
* Test AutoComplete with multiple AutoCompleteSearch sources, with one of them
* being hidden from the popup, but can still do typeahead completion.
*/
function run_test() {
do_test_pending();
var inputStr = "moz";
// Type ahead result
var searchTypeAhead = new AutoCompleteSearchBase("search1",
new AutoCompleteTypeAheadResult(["mozillaTest1"]));
// Regular result
var searchNormal = new AutoCompleteSearchBase("search2",
new AutoCompleteResult(["mozillaTest2"]));
// Register searches so AutoCompleteController can find them
registerAutoCompleteSearch(searchNormal);
registerAutoCompleteSearch(searchTypeAhead);
// Make an AutoCompleteInput that uses our searches
// and confirms results on search complete.
var input = new AutoCompleteInputBase([searchTypeAhead.name, searchNormal.name]);
input.completeDefaultIndex = true;
input.textValue = inputStr;
// Caret must be at the end. Autofill doesn't happen unless you're typing
// characters at the end.
var strLen = inputStr.length;
input.selectTextRange(strLen, strLen);
do_check_eq(input.selectionStart, strLen);
do_check_eq(input.selectionEnd, strLen);
var controller = Cc["@mozilla.org/autocomplete/controller;1"].
getService(Ci.nsIAutoCompleteController);
controller.input = input;
controller.startSearch(inputStr);
input.onSearchComplete = function() {
// Hidden results should still be able to do inline autocomplete
do_check_eq(input.textValue, "mozillaTest1");
// Now, let's fill the textbox with the first result of the popup.
// The first search is marked as hidden, so we must always get the
// second search.
controller.handleEnter(true);
do_check_eq(input.textValue, "mozillaTest2");
// Only one item in the popup.
do_check_eq(controller.matchCount, 1);
// Unregister searches
unregisterAutoCompleteSearch(searchNormal);
unregisterAutoCompleteSearch(searchTypeAhead);
do_test_finished();
};
}