mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 20:47:44 +00:00
189 lines
6.0 KiB
XML
189 lines
6.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 3"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
|
|
|
|
<textbox id="autocomplete" type="autocomplete"
|
|
autocompletesearch="simple"
|
|
onsearchcomplete="checkResult();"/>
|
|
|
|
<script class="testbody" type="application/javascript">
|
|
<![CDATA[
|
|
|
|
// Set to indicate whether or not we want autoCompleteSimple to return a result
|
|
var returnResult = true;
|
|
|
|
const ACR = Components.interfaces.nsIAutoCompleteResult;
|
|
|
|
// This result can't be constructed in-line, because otherwise we leak memory.
|
|
function nsAutoCompleteSimpleResult(aString)
|
|
{
|
|
this.searchString = aString;
|
|
if (returnResult) {
|
|
this.searchResult = ACR.RESULT_SUCCESS;
|
|
this.matchCount = 1;
|
|
this._param = "Result";
|
|
}
|
|
}
|
|
|
|
nsAutoCompleteSimpleResult.prototype = {
|
|
_param: "",
|
|
searchString: null,
|
|
searchResult: ACR.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 either returns one result or none
|
|
var autoCompleteSimpleID = Components.ID("0a2afbdb-f30e-47d1-9cb1-0cd160240aca");
|
|
var autoCompleteSimpleName = "@mozilla.org/autocomplete/search;1?name=simple"
|
|
var autoCompleteSimple = {
|
|
QueryInterface: function(iid) {
|
|
if (iid.equals(Components.interfaces.nsISupports) ||
|
|
iid.equals(Components.interfaces.nsIFactory) ||
|
|
iid.equals(Components.interfaces.nsIAutoCompleteSearch))
|
|
return this;
|
|
|
|
throw Components.results.NS_ERROR_NO_INTERFACE;
|
|
},
|
|
|
|
createInstance: function(outer, iid) {
|
|
return this.QueryInterface(iid);
|
|
},
|
|
|
|
startSearch: function(aString, aParam, aResult, aListener) {
|
|
var result = new nsAutoCompleteSimpleResult(aString);
|
|
aListener.onSearchResult(this, result);
|
|
},
|
|
|
|
stopSearch: function() {}
|
|
};
|
|
|
|
var componentManager = Components.manager
|
|
.QueryInterface(Components.interfaces.nsIComponentRegistrar);
|
|
componentManager.registerFactory(autoCompleteSimpleID, "Test Simple Autocomplete",
|
|
autoCompleteSimpleName, autoCompleteSimple);
|
|
|
|
|
|
// Test Bug 325842 - completeDefaultIndex
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
setTimeout(startTest, 0);
|
|
|
|
var currentTest = 0;
|
|
|
|
// Note the entries for these tests (key) are incremental.
|
|
const tests = [
|
|
{ completeDefaultIndex: "false", key: "r", result: "r",
|
|
start: 1, end: 1 },
|
|
{ completeDefaultIndex: "true", key: "e", result: "result",
|
|
start: 2, end: 6 },
|
|
{ completeDefaultIndex: "true", key: "t", result: "ret >> Result",
|
|
start: 3, end: 13 }
|
|
];
|
|
|
|
function startTest() {
|
|
var autocomplete = $("autocomplete");
|
|
|
|
// These should not be set by default.
|
|
is(autocomplete.hasAttribute("completedefaultindex"), false,
|
|
"completedefaultindex not set by default");
|
|
|
|
autocomplete.completeDefaultIndex = "true";
|
|
|
|
is(autocomplete.getAttribute("completedefaultindex"), "true",
|
|
"completedefaultindex attribute set correctly");
|
|
is(autocomplete.completeDefaultIndex, true,
|
|
"autoFill getter returned correctly");
|
|
|
|
autocomplete.completeDefaultIndex = "false";
|
|
|
|
is(autocomplete.getAttribute("completedefaultindex"), "false",
|
|
"completedefaultindex attribute set to false correctly");
|
|
is(autocomplete.completeDefaultIndex, false,
|
|
"completeDefaultIndex getter returned false correctly");
|
|
|
|
checkNext();
|
|
}
|
|
|
|
function checkNext() {
|
|
var autocomplete = $("autocomplete");
|
|
|
|
autocomplete.completeDefaultIndex = tests[currentTest].completeDefaultIndex;
|
|
autocomplete.focus();
|
|
|
|
synthesizeKey(tests[currentTest].key, {});
|
|
}
|
|
|
|
function checkResult() {
|
|
var autocomplete = $("autocomplete");
|
|
var style = window.getComputedStyle(autocomplete, "");
|
|
|
|
is(autocomplete.value, tests[currentTest].result,
|
|
"Test " + currentTest + ": autocomplete.value should equal '" +
|
|
tests[currentTest].result + "'");
|
|
|
|
is(autocomplete.selectionStart, tests[currentTest].start,
|
|
"Test " + currentTest + ": autocomplete selection should start at " +
|
|
tests[currentTest].start);
|
|
|
|
is(autocomplete.selectionEnd, tests[currentTest].end,
|
|
"Test " + currentTest + ": autocomplete selection should end at " +
|
|
tests[currentTest].end);
|
|
|
|
++currentTest;
|
|
|
|
if (currentTest < tests.length)
|
|
setTimeout(checkNext, 0);
|
|
else {
|
|
// TODO (bug 494809): Autocomplete-in-the-middle should take in count RTL
|
|
// and complete on VK_RIGHT or VK_LEFT based on that. It should also revert
|
|
// what user has typed to far if he moves in the opposite direction.
|
|
if (autocomplete.value.indexOf(">>") == -1) {
|
|
// Test result if user accepts autocomplete suggestion.
|
|
synthesizeKey("VK_RIGHT", {});
|
|
is(autocomplete.value, "Result",
|
|
"Test complete: autocomplete.value should equal 'Result'");
|
|
is(autocomplete.selectionStart, 6,
|
|
"Test complete: autocomplete selection should start at 6");
|
|
is(autocomplete.selectionEnd, 6,
|
|
"Test complete: autocomplete selection should end at 6");
|
|
}
|
|
|
|
setTimeout(function() {
|
|
// Unregister the factory so that we don't get in the way of other tests
|
|
componentManager.unregisterFactory(autoCompleteSimpleID, autoCompleteSimple);
|
|
SimpleTest.finish();
|
|
}, 0);
|
|
}
|
|
}
|
|
|
|
]]>
|
|
</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>
|