diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /toolkit/components/autocomplete/tests/unit/test_stopSearch.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/components/autocomplete/tests/unit/test_stopSearch.js')
-rw-r--r-- | toolkit/components/autocomplete/tests/unit/test_stopSearch.js | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/toolkit/components/autocomplete/tests/unit/test_stopSearch.js b/toolkit/components/autocomplete/tests/unit/test_stopSearch.js new file mode 100644 index 000000000..5ef3454b4 --- /dev/null +++ b/toolkit/components/autocomplete/tests/unit/test_stopSearch.js @@ -0,0 +1,187 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/** + * Purpose of the test is to check that a stopSearch call comes always before a + * startSearch call. + */ + +Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); + + +/** + * Dummy nsIAutoCompleteInput source that returns + * the given list of AutoCompleteSearch names. + * + * Implements only the methods needed for this test. + */ +function AutoCompleteInput(aSearches) +{ + this.searches = aSearches; +} +AutoCompleteInput.prototype = { + constructor: AutoCompleteInput, + minResultsForPopup: 0, + timeout: 10, + searchParam: "", + textValue: "hello", + disableAutoComplete: false, + completeDefaultIndex: false, + set popupOpen(val) { return val; }, // ignore + get popupOpen() { return false; }, + get searchCount() { return this.searches.length; }, + getSearchAt: function(aIndex) { return this.searches[aIndex]; }, + onSearchBegin: function() {}, + onSearchComplete: function() {}, + onTextReverted: function () {}, + onTextEntered: function () {}, + popup: { + selectBy: function() {}, + invalidate: function() {}, + set selectedIndex(val) { return val; }, // ignore + get selectedIndex() { return -1 }, + QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompletePopup]) + }, + QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteInput]) +} + + +/** + * nsIAutoCompleteSearch implementation. + */ +function AutoCompleteSearch(aName) +{ + this.name = aName; +} +AutoCompleteSearch.prototype = { + constructor: AutoCompleteSearch, + stopSearchInvoked: true, + startSearch: function(aSearchString, aSearchParam, aPreviousResult, aListener) + { + print("Check stop search has been called"); + do_check_true(this.stopSearchInvoked); + this.stopSearchInvoked = false; + }, + stopSearch: function() + { + this.stopSearchInvoked = true; + }, + QueryInterface: XPCOMUtils.generateQI([ + Ci.nsIFactory + , Ci.nsIAutoCompleteSearch + ]), + createInstance: function(outer, iid) + { + return this.QueryInterface(iid); + } +} + + +/** + * Helper to register an AutoCompleteSearch with the given name. + * Allows the AutoCompleteController to find the search. + */ +function registerAutoCompleteSearch(aSearch) +{ + let name = "@mozilla.org/autocomplete/search;1?name=" + aSearch.name; + let uuidGenerator = Cc["@mozilla.org/uuid-generator;1"]. + getService(Ci.nsIUUIDGenerator); + let cid = uuidGenerator.generateUUID(); + let desc = "Test AutoCompleteSearch"; + let componentManager = Components.manager + .QueryInterface(Ci.nsIComponentRegistrar); + componentManager.registerFactory(cid, desc, name, aSearch); + // Keep the id on the object so we can unregister later + aSearch.cid = cid; +} + + +/** + * Helper to unregister an AutoCompleteSearch. + */ +function unregisterAutoCompleteSearch(aSearch) { + let componentManager = Components.manager + .QueryInterface(Ci.nsIComponentRegistrar); + componentManager.unregisterFactory(aSearch.cid, aSearch); +} + + +var gTests = [ + function(controller) { + print("handleText"); + controller.input.textValue = "hel"; + controller.handleText(); + }, + function(controller) { + print("handleStartComposition"); + controller.handleStartComposition(); + }, + function(controller) { + print("handleEndComposition"); + controller.handleEndComposition(); + // an input event always follows compositionend event. + controller.handleText(); + }, + function(controller) { + print("handleEscape"); + controller.handleEscape(); + }, + function(controller) { + print("handleEnter"); + controller.handleEnter(false); + }, + function(controller) { + print("handleTab"); + controller.handleTab(); + }, + + function(controller) { + print("handleKeyNavigation"); + controller.handleKeyNavigation(Ci.nsIDOMKeyEvent.DOM_VK_UP); + }, +]; + + +var gSearch; +var gCurrentTest; +function run_test() { + // Make an AutoCompleteSearch that always returns nothing + gSearch = new AutoCompleteSearch("test"); + registerAutoCompleteSearch(gSearch); + + let controller = Cc["@mozilla.org/autocomplete/controller;1"]. + getService(Ci.nsIAutoCompleteController); + + // Make an AutoCompleteInput that uses our search. + let input = new AutoCompleteInput([gSearch.name]); + controller.input = input; + + input.onSearchBegin = function() { + do_execute_soon(function() { + gCurrentTest(controller); + }); + }; + input.onSearchComplete = function() { + run_next_test(controller); + } + + // Search is asynchronous, so don't let the test finish immediately + do_test_pending(); + + run_next_test(controller); +} + +function run_next_test(controller) { + if (gTests.length == 0) { + unregisterAutoCompleteSearch(gSearch); + controller.stopSearch(); + controller.input = null; + do_test_finished(); + return; + } + + gCurrentTest = gTests.shift(); + controller.startSearch("hello"); +} |