forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			174 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 | |
|  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| function AutoCompleteImmediateSearch(aName, aResult) {
 | |
|   this.name = aName;
 | |
|   this._result = aResult;
 | |
| }
 | |
| AutoCompleteImmediateSearch.prototype = Object.create(
 | |
|   AutoCompleteSearchBase.prototype
 | |
| );
 | |
| AutoCompleteImmediateSearch.prototype.searchType =
 | |
|   Ci.nsIAutoCompleteSearchDescriptor.SEARCH_TYPE_IMMEDIATE;
 | |
| AutoCompleteImmediateSearch.prototype.QueryInterface = ChromeUtils.generateQI([
 | |
|   "nsIFactory",
 | |
|   "nsIAutoCompleteSearch",
 | |
|   "nsIAutoCompleteSearchDescriptor",
 | |
| ]);
 | |
| 
 | |
| function AutoCompleteDelayedSearch(aName, aResult) {
 | |
|   this.name = aName;
 | |
|   this._result = aResult;
 | |
| }
 | |
| AutoCompleteDelayedSearch.prototype = Object.create(
 | |
|   AutoCompleteSearchBase.prototype
 | |
| );
 | |
| 
 | |
| function AutoCompleteResult(aValues, aDefaultIndex) {
 | |
|   this._values = aValues;
 | |
|   this.defaultIndex = aDefaultIndex;
 | |
| }
 | |
| AutoCompleteResult.prototype = Object.create(AutoCompleteResultBase.prototype);
 | |
| 
 | |
| /**
 | |
|  * An immediate search should be executed synchronously.
 | |
|  */
 | |
| add_test(function test_immediate_search() {
 | |
|   let inputStr = "moz";
 | |
| 
 | |
|   let immediateSearch = new AutoCompleteImmediateSearch(
 | |
|     "immediate",
 | |
|     new AutoCompleteResult(["moz-immediate"], 0)
 | |
|   );
 | |
|   registerAutoCompleteSearch(immediateSearch);
 | |
|   let delayedSearch = new AutoCompleteDelayedSearch(
 | |
|     "delayed",
 | |
|     new AutoCompleteResult(["moz-delayed"], 0)
 | |
|   );
 | |
|   registerAutoCompleteSearch(delayedSearch);
 | |
| 
 | |
|   let controller = Cc["@mozilla.org/autocomplete/controller;1"].getService(
 | |
|     Ci.nsIAutoCompleteController
 | |
|   );
 | |
| 
 | |
|   let input = new AutoCompleteInputBase([
 | |
|     delayedSearch.name,
 | |
|     immediateSearch.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.
 | |
|   let strLen = inputStr.length;
 | |
|   input.selectTextRange(strLen, strLen);
 | |
| 
 | |
|   controller.input = input;
 | |
|   controller.startSearch(inputStr);
 | |
| 
 | |
|   // Immediately check the result, the immediate search should have finished.
 | |
|   Assert.equal(input.textValue, "moz-immediate");
 | |
| 
 | |
|   // Wait for both queries to finish.
 | |
|   input.onSearchComplete = function() {
 | |
|     // Sanity check.
 | |
|     Assert.equal(input.textValue, "moz-immediate");
 | |
| 
 | |
|     unregisterAutoCompleteSearch(immediateSearch);
 | |
|     unregisterAutoCompleteSearch(delayedSearch);
 | |
|     run_next_test();
 | |
|   };
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * An immediate search should be executed before any delayed search.
 | |
|  */
 | |
| add_test(function test_immediate_search_notimeout() {
 | |
|   let inputStr = "moz";
 | |
| 
 | |
|   let immediateSearch = new AutoCompleteImmediateSearch(
 | |
|     "immediate",
 | |
|     new AutoCompleteResult(["moz-immediate"], 0)
 | |
|   );
 | |
|   registerAutoCompleteSearch(immediateSearch);
 | |
| 
 | |
|   let delayedSearch = new AutoCompleteDelayedSearch(
 | |
|     "delayed",
 | |
|     new AutoCompleteResult(["moz-delayed"], 0)
 | |
|   );
 | |
|   registerAutoCompleteSearch(delayedSearch);
 | |
| 
 | |
|   let controller = Cc["@mozilla.org/autocomplete/controller;1"].getService(
 | |
|     Ci.nsIAutoCompleteController
 | |
|   );
 | |
| 
 | |
|   let input = new AutoCompleteInputBase([
 | |
|     delayedSearch.name,
 | |
|     immediateSearch.name,
 | |
|   ]);
 | |
|   input.completeDefaultIndex = true;
 | |
|   input.textValue = inputStr;
 | |
|   input.timeout = 0;
 | |
| 
 | |
|   // Caret must be at the end. Autofill doesn't happen unless you're typing
 | |
|   // characters at the end.
 | |
|   let strLen = inputStr.length;
 | |
|   input.selectTextRange(strLen, strLen);
 | |
| 
 | |
|   controller.input = input;
 | |
|   let complete = false;
 | |
|   input.onSearchComplete = function() {
 | |
|     complete = true;
 | |
|   };
 | |
|   controller.startSearch(inputStr);
 | |
|   Assert.ok(complete);
 | |
| 
 | |
|   // Immediately check the result, the immediate search should have finished.
 | |
|   Assert.equal(input.textValue, "moz-immediate");
 | |
| 
 | |
|   unregisterAutoCompleteSearch(immediateSearch);
 | |
|   unregisterAutoCompleteSearch(delayedSearch);
 | |
|   run_next_test();
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * A delayed search should be executed synchronously with a zero timeout.
 | |
|  */
 | |
| add_test(function test_delayed_search_notimeout() {
 | |
|   let inputStr = "moz";
 | |
| 
 | |
|   let delayedSearch = new AutoCompleteDelayedSearch(
 | |
|     "delayed",
 | |
|     new AutoCompleteResult(["moz-delayed"], 0)
 | |
|   );
 | |
|   registerAutoCompleteSearch(delayedSearch);
 | |
| 
 | |
|   let controller = Cc["@mozilla.org/autocomplete/controller;1"].getService(
 | |
|     Ci.nsIAutoCompleteController
 | |
|   );
 | |
| 
 | |
|   let input = new AutoCompleteInputBase([delayedSearch.name]);
 | |
|   input.completeDefaultIndex = true;
 | |
|   input.textValue = inputStr;
 | |
|   input.timeout = 0;
 | |
| 
 | |
|   // Caret must be at the end. Autofill doesn't happen unless you're typing
 | |
|   // characters at the end.
 | |
|   let strLen = inputStr.length;
 | |
|   input.selectTextRange(strLen, strLen);
 | |
| 
 | |
|   controller.input = input;
 | |
|   let complete = false;
 | |
|   input.onSearchComplete = function() {
 | |
|     complete = true;
 | |
|   };
 | |
|   controller.startSearch(inputStr);
 | |
|   Assert.ok(complete);
 | |
| 
 | |
|   // Immediately check the result, the delayed search should have finished.
 | |
|   Assert.equal(input.textValue, "moz-delayed");
 | |
| 
 | |
|   unregisterAutoCompleteSearch(delayedSearch);
 | |
|   run_next_test();
 | |
| });
 | 
