forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			80 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| var kPrefName = "accessibility.typeaheadfind.prefillwithselection";
 | |
| var kEmptyURI = "data:text/html,";
 | |
| 
 | |
| // This pref is false by default in OSX; ensure the test still works there.
 | |
| Services.prefs.setBoolPref(kPrefName, true);
 | |
| 
 | |
| registerCleanupFunction(function() {
 | |
|   Services.prefs.clearUserPref(kPrefName);
 | |
| });
 | |
| 
 | |
| add_task(async function() {
 | |
|   let aTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, kEmptyURI);
 | |
|   ok(!gFindBarInitialized, "findbar isn't initialized yet");
 | |
| 
 | |
|   // Note: the use case here is when the user types directly in the findbar
 | |
|   // _before_ it's prefilled with a text selection in the page.
 | |
| 
 | |
|   // So `yield BrowserTestUtils.sendChar()` can't be used here:
 | |
|   //  - synthesizing a key in the browser won't actually send it to the
 | |
|   //    findbar; the findbar isn't part of the browser content.
 | |
|   //  - we need to _not_ wait for _startFindDeferred to be resolved; yielding
 | |
|   //    a synthesized keypress on the browser implicitely happens after the
 | |
|   //    browser has dispatched its return message with the prefill value for
 | |
|   //    the findbar, which essentially nulls these tests.
 | |
| 
 | |
|   // The parent-side of the sidebar initialization is also async, so we do
 | |
|   // need to wait for that. We verify a bit further down that _startFindDeferred
 | |
|   // hasn't been resolved yet.
 | |
|   await gFindBarPromise;
 | |
| 
 | |
|   let findBar = gFindBar;
 | |
|   is(findBar._findField.value, "", "findbar is empty");
 | |
| 
 | |
|   // Test 1
 | |
|   //  Any input in the findbar should erase a previous search.
 | |
| 
 | |
|   findBar._findField.value = "xy";
 | |
|   findBar.startFind();
 | |
|   is(findBar._findField.value, "xy", "findbar should have xy initial query");
 | |
|   is(findBar._findField.mInputField,
 | |
|     document.activeElement,
 | |
|     "findbar is now focused");
 | |
| 
 | |
|   EventUtils.sendChar("z", window);
 | |
|   is(findBar._findField.value, "z", "z erases xy");
 | |
| 
 | |
|   findBar._findField.value = "";
 | |
|   ok(!findBar._findField.value, "erase findbar after first test");
 | |
| 
 | |
|   // Test 2
 | |
|   //  Prefilling the findbar should be ignored if a search has been run.
 | |
| 
 | |
|   findBar.startFind();
 | |
|   ok(findBar._startFindDeferred, "prefilled value hasn't been fetched yet");
 | |
|   is(findBar._findField.mInputField,
 | |
|     document.activeElement,
 | |
|     "findbar is still focused");
 | |
| 
 | |
|   EventUtils.sendChar("a", window);
 | |
|   EventUtils.sendChar("b", window);
 | |
|   is(findBar._findField.value, "ab", "initial ab typed in the findbar");
 | |
| 
 | |
|   // This resolves _startFindDeferred if it's still pending; let's just skip
 | |
|   // over waiting for the browser's return message that should do this as it
 | |
|   // doesn't really matter.
 | |
|   findBar.onCurrentSelection("foo", true);
 | |
|   ok(!findBar._startFindDeferred, "prefilled value fetched");
 | |
|   is(findBar._findField.value, "ab", "ab kept instead of prefill value");
 | |
| 
 | |
|   EventUtils.sendChar("c", window);
 | |
|   is(findBar._findField.value, "abc", "c is appended after ab");
 | |
| 
 | |
|   // Clear the findField value to make the test  run successfully
 | |
|   // for multiple runs in the same browser session.
 | |
|   findBar._findField.value = "";
 | |
|   BrowserTestUtils.removeTab(aTab);
 | |
| });
 | 
