mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 12:37:37 +00:00
128 lines
4.0 KiB
XML
128 lines
4.0 KiB
XML
<?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; },
|
|
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, document);
|
|
}, 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>
|