forked from mirrors/gecko-dev
		
	 4a06c925ac
			
		
	
	
		4a06c925ac
		
	
	
	
	
		
			
			# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D36052 --HG-- extra : source : b5be5b4f4b47c256e28a29f665dc754f6407ee7f
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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"
 | |
|   );
 | |
| }
 |