forked from mirrors/gecko-dev
		
	This also removes any redundant Ci.nsISupports elements in the interface
lists.
This was done using the following script:
acecb401b7/processors/chromeutils-generateQI.jsm
MozReview-Commit-ID: AIx10P8GpZY
--HG--
extra : rebase_source : a29c07530586dc18ba040f19215475ac20fcfb3b
		
	
			
		
			
				
	
	
		
			183 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 * 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.
 | 
						|
 */
 | 
						|
 | 
						|
ChromeUtils.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(aIndex) { return this.searches[aIndex]; },
 | 
						|
  onSearchBegin() {},
 | 
						|
  onSearchComplete() {},
 | 
						|
  onTextReverted() {},
 | 
						|
  onTextEntered() {},
 | 
						|
  popup: {
 | 
						|
    selectBy() {},
 | 
						|
    invalidate() {},
 | 
						|
    set selectedIndex(val) { return val; }, // ignore
 | 
						|
    get selectedIndex() { return -1; },
 | 
						|
    QueryInterface: ChromeUtils.generateQI([Ci.nsIAutoCompletePopup])
 | 
						|
  },
 | 
						|
  QueryInterface: ChromeUtils.generateQI([Ci.nsIAutoCompleteInput])
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * nsIAutoCompleteSearch implementation.
 | 
						|
 */
 | 
						|
function AutoCompleteSearch(aName) {
 | 
						|
  this.name = aName;
 | 
						|
}
 | 
						|
AutoCompleteSearch.prototype = {
 | 
						|
  constructor: AutoCompleteSearch,
 | 
						|
  stopSearchInvoked: true,
 | 
						|
  startSearch(aSearchString, aSearchParam, aPreviousResult, aListener) {
 | 
						|
    print("Check stop search has been called");
 | 
						|
    Assert.ok(this.stopSearchInvoked);
 | 
						|
    this.stopSearchInvoked = false;
 | 
						|
  },
 | 
						|
  stopSearch() {
 | 
						|
    this.stopSearchInvoked = true;
 | 
						|
  },
 | 
						|
  QueryInterface: ChromeUtils.generateQI([
 | 
						|
    Ci.nsIFactory,
 | 
						|
    Ci.nsIAutoCompleteSearch
 | 
						|
  ]),
 | 
						|
  createInstance(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");
 | 
						|
    // Hardcode KeyboardEvent.DOM_VK_RIGHT, because we can't easily
 | 
						|
    // include KeyboardEvent here.
 | 
						|
    controller.handleKeyNavigation(0x26 /* KeyboardEvent.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() {
 | 
						|
    executeSoon(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");
 | 
						|
}
 |