<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> <window title="Autocomplete Widget Test 4" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="runTest();"> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/> <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/> <textbox id="autocomplete" type="autocomplete" completedefaultindex="true" onsearchcomplete="searchComplete();" timeout="0" autocompletesearch="simple"/> <script class="testbody" type="application/javascript"> <![CDATA[ Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); function autoCompleteSimpleResult(aString) { this.searchString = aString; this.searchResult = Components.interfaces.nsIAutoCompleteResult.RESULT_SUCCESS; this.matchCount = 1; this._param = "Result"; } autoCompleteSimpleResult.prototype = { _param: "", searchString: null, searchResult: Components.interfaces.nsIAutoCompleteResult.RESULT_FAILURE, defaultIndex: 0, errorDescription: null, matchCount: 0, getValueAt: function() { return this._param; }, getCommentAt: function() { return null; }, getStyleAt: function() { return null; }, getImageAt: function() { return null; }, getFinalCompleteValueAt: function() { return this.getValueAt(); }, getLabelAt: function() { return null; }, removeValueAt: function() {} }; // A basic autocomplete implementation that returns one result. let autoCompleteSimple = { classID: Components.ID("0a2afbdb-f30e-47d1-9cb1-0cd160240aca"), contractID: "@mozilla.org/autocomplete/search;1?name=simple", QueryInterface: XPCOMUtils.generateQI([ Components.interfaces.nsIFactory, Components.interfaces.nsIAutoCompleteSearch ]), createInstance: function (outer, iid) { return this.QueryInterface(iid); }, registerFactory: function () { let registrar = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar); registrar.registerFactory(this.classID, "Test Simple Autocomplete", this.contractID, this); }, unregisterFactory: function () { let registrar = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar); registrar.unregisterFactory(this.classID, this); }, startSearch: function (aString, aParam, aResult, aListener) { let result = new autoCompleteSimpleResult(aString); aListener.onSearchResult(this, result); }, stopSearch: function () {} }; SimpleTest.waitForExplicitFinish(); // XPFE AutoComplete needs to register early. autoCompleteSimple.registerFactory(); let gACTimer; let gAutoComplete; function searchComplete() { is(gAutoComplete.value, "result", "Value should be autocompleted now"); ok(Date.now() - gACTimer > 500, "There should be a delay before autocomplete"); // Unregister the factory so that we don't get in the way of other tests autoCompleteSimple.unregisterFactory(); SimpleTest.finish(); } function runTest() { gAutoComplete = $("autocomplete"); const SEARCH_STRING = "res"; function cbCallback() { gAutoComplete.focus(); synthesizeKey("v", { accelKey: true }); is(gAutoComplete.value, SEARCH_STRING, "Value should not be autocompleted immediately"); } SimpleTest.waitForClipboard(SEARCH_STRING, function () { gACTimer = Date.now(); Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper) .copyStringToClipboard(SEARCH_STRING, Components.interfaces.nsIClipboard.kGlobalClipboard); }, cbCallback, cbCallback); } ]]> </script> <body xmlns="http://www.w3.org/1999/xhtml"> <p id="display"> </p> <div id="content" style="display: none"> </div> <pre id="test"> </pre> </body> </window>