mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-07-15 03:29:01 +00:00
102 lines
3.3 KiB
JavaScript
102 lines
3.3 KiB
JavaScript
|
/**
|
||
|
* Search object that returns results at different times.
|
||
|
* First, the search that returns results asynchronously.
|
||
|
*/
|
||
|
function AutoCompleteAsyncSearch(aName, aResult) {
|
||
|
this.name = aName;
|
||
|
this._result = aResult;
|
||
|
}
|
||
|
AutoCompleteAsyncSearch.prototype = Object.create(AutoCompleteSearchBase.prototype);
|
||
|
AutoCompleteAsyncSearch.prototype.startSearch = function(aSearchString,
|
||
|
aSearchParam,
|
||
|
aPreviousResult,
|
||
|
aListener) {
|
||
|
this._result.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH_ONGOING;
|
||
|
aListener.onSearchResult(this, this._result);
|
||
|
|
||
|
do_timeout(500, () => {
|
||
|
this._returnResults(aListener);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
AutoCompleteAsyncSearch.prototype._returnResults = function(aListener) {
|
||
|
var result = this._result;
|
||
|
|
||
|
result.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
|
||
|
aListener.onSearchResult(this, result);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* The synchronous version
|
||
|
*/
|
||
|
function AutoCompleteSyncSearch(aName, aResult) {
|
||
|
this.name = aName;
|
||
|
this._result = aResult;
|
||
|
}
|
||
|
AutoCompleteSyncSearch.prototype = Object.create(AutoCompleteAsyncSearch.prototype);
|
||
|
AutoCompleteSyncSearch.prototype.startSearch = function(aSearchString,
|
||
|
aSearchParam,
|
||
|
aPreviousResult,
|
||
|
aListener) {
|
||
|
this._returnResults(aListener);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Results object
|
||
|
*/
|
||
|
function AutoCompleteResult(aValues, aDefaultIndex) {
|
||
|
this._values = aValues;
|
||
|
this.defaultIndex = aDefaultIndex;
|
||
|
}
|
||
|
AutoCompleteResult.prototype = Object.create(AutoCompleteResultBase.prototype);
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Test AutoComplete with multiple AutoCompleteSearch sources, with one of them
|
||
|
* (index != 0) returning before the rest.
|
||
|
*/
|
||
|
function run_test() {
|
||
|
do_test_pending();
|
||
|
|
||
|
var results = ["mozillaTest"];
|
||
|
var inputStr = "moz";
|
||
|
|
||
|
// Async search
|
||
|
var asyncSearch = new AutoCompleteAsyncSearch("Async",
|
||
|
new AutoCompleteResult(results, -1));
|
||
|
// Sync search
|
||
|
var syncSearch = new AutoCompleteSyncSearch("Sync",
|
||
|
new AutoCompleteResult(results, 0));
|
||
|
|
||
|
// Register searches so AutoCompleteController can find them
|
||
|
registerAutoCompleteSearch(asyncSearch);
|
||
|
registerAutoCompleteSearch(syncSearch);
|
||
|
|
||
|
var controller = Cc["@mozilla.org/autocomplete/controller;1"].
|
||
|
getService(Ci.nsIAutoCompleteController);
|
||
|
|
||
|
// Make an AutoCompleteInput that uses our searches
|
||
|
// and confirms results on search complete.
|
||
|
// Async search MUST be FIRST to trigger the bug this tests.
|
||
|
var input = new AutoCompleteInputBase([asyncSearch.name, syncSearch.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);
|
||
|
|
||
|
controller.input = input;
|
||
|
controller.startSearch(inputStr);
|
||
|
|
||
|
input.onSearchComplete = function() {
|
||
|
do_check_eq(input.textValue, results[0]);
|
||
|
|
||
|
// Unregister searches
|
||
|
unregisterAutoCompleteSearch(asyncSearch);
|
||
|
unregisterAutoCompleteSearch(syncSearch);
|
||
|
do_test_finished();
|
||
|
};
|
||
|
}
|