summaryrefslogtreecommitdiffstats
path: root/toolkit/content/tests/chrome/test_autocomplete_placehold_last_complete.xul
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/content/tests/chrome/test_autocomplete_placehold_last_complete.xul')
-rw-r--r--toolkit/content/tests/chrome/test_autocomplete_placehold_last_complete.xul309
1 files changed, 0 insertions, 309 deletions
diff --git a/toolkit/content/tests/chrome/test_autocomplete_placehold_last_complete.xul b/toolkit/content/tests/chrome/test_autocomplete_placehold_last_complete.xul
deleted file mode 100644
index 01004327d..000000000
--- a/toolkit/content/tests/chrome/test_autocomplete_placehold_last_complete.xul
+++ /dev/null
@@ -1,309 +0,0 @@
-<?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"
- 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"
- timeout="0"
- autocompletesearch="simple"/>
-
-<script class="testbody" type="application/javascript">
-<![CDATA[
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-function autoCompleteSimpleResult(aString, searchId) {
- this.searchString = aString;
- this.searchResult = Components.interfaces.nsIAutoCompleteResult.RESULT_SUCCESS;
- this.matchCount = 1;
- if (aString.startsWith('ret')) {
- this._param = autoCompleteSimpleResult.retireCompletion;
- } else {
- this._param = "Result";
- }
- this._searchId = searchId;
-}
-autoCompleteSimpleResult.retireCompletion = "Retire";
-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() {}
-};
-
-var searchCounter = 0;
-
-// 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",
- searchAsync: false,
- pendingSearch: null,
-
- 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);
-
- if (this.searchAsync) {
- // Simulate an async search by using a timeout before invoking the
- // |onSearchResult| callback.
- // Store the searchTimeout such that it can be canceled if stopSearch is called.
- this.pendingSearch = setTimeout(() => {
- this.pendingSearch = null;
-
- aListener.onSearchResult(this, result);
-
- // Move to the next step in the async test.
- asyncTest.next();
- }, 0);
- } else {
- aListener.onSearchResult(this, result);
- }
- },
- stopSearch: function () {
- clearTimeout(this.pendingSearch);
- }
-};
-
-SimpleTest.waitForExplicitFinish();
-
-// XPFE AutoComplete needs to register early.
-autoCompleteSimple.registerFactory();
-
-let gACTimer;
-let gAutoComplete;
-let asyncTest;
-
-let searchCompleteTimeoutId = null;
-
-function finishTest() {
- // Unregister the factory so that we don't get in the way of other tests
- autoCompleteSimple.unregisterFactory();
- SimpleTest.finish();
-}
-
-function runTest() {
- gAutoComplete = $("autocomplete");
- gAutoComplete.focus();
-
- // Return the search results synchronous, which also makes the completion
- // happen synchronous.
- autoCompleteSimple.searchAsync = false;
-
- synthesizeKey("r", {});
- is(gAutoComplete.value, "result", "Value should be autocompleted immediately");
-
- synthesizeKey("e", {});
- is(gAutoComplete.value, "result", "Value should be autocompleted immediately");
-
- synthesizeKey("VK_DELETE", {});
- is(gAutoComplete.value, "re", "Deletion should not complete value");
-
- synthesizeKey("VK_BACK_SPACE", {});
- is(gAutoComplete.value, "r", "Backspace should not complete value");
-
- synthesizeKey("VK_LEFT", {});
- is(gAutoComplete.value, "r", "Value should stay same when navigating with cursor");
-
- runAsyncTest();
-}
-
-function* asyncTestGenerator() {
- synthesizeKey("r", {});
- synthesizeKey("e", {});
- is(gAutoComplete.value, "re", "Value should not be autocompleted immediately");
-
- // Calling |yield undefined| makes this generator function wait until
- // |asyncTest.next();| is called. This happens from within the
- // |autoCompleteSimple.startSearch()| function once the simulated async
- // search has finished.
- // Therefore, the effect of the |yield undefined;| here (and the ones) below
- // is to wait until the async search result comes back.
- yield undefined;
-
- is(gAutoComplete.value, "result", "Value should be autocompleted");
-
- // Test if typing the `s` character completes directly based on the last
- // completion
- synthesizeKey("s", {});
- is(gAutoComplete.value, "result", "Value should be completed immediately");
-
- yield undefined;
-
- is(gAutoComplete.value, "result", "Value should be autocompleted to same value");
- synthesizeKey("VK_DELETE", {});
- is(gAutoComplete.value, "res", "Deletion should not complete value");
-
- // No |yield undefined| needed here as no completion is triggered by the deletion.
-
- is(gAutoComplete.value, "res", "Still no complete value after deletion");
-
- synthesizeKey("VK_BACK_SPACE", {});
- is(gAutoComplete.value, "re", "Backspace should not complete value");
-
- yield undefined;
-
- is(gAutoComplete.value, "re", "Value after search due to backspace should stay the same"); (3)
-
- // Typing a character that is not like the previous match. In this case, the
- // completion cannot happen directly and therefore the value will be completed
- // only after the search has finished.
- synthesizeKey("t", {});
- is(gAutoComplete.value, "ret", "Value should not be autocompleted immediately");
-
- yield undefined;
-
- is(gAutoComplete.value, "retire", "Value should be autocompleted");
-
- synthesizeKey("i", {});
- is(gAutoComplete.value, "retire", "Value should be autocompleted immediately");
-
- yield undefined;
-
- is(gAutoComplete.value, "retire", "Value should be autocompleted to the same value");
-
- // Setup the scene to test how the completion behaves once the placeholder
- // completion and the result from the search do not agree with each other.
- gAutoComplete.value = 'r';
- // Need to type two characters as the input was reset and the autocomplete
- // controller things, ther user hit the backspace button, in which case
- // no completion is performed. But as a completion is desired, another
- // character `t` is typed afterwards.
- synthesizeKey("e", {});
- yield undefined;
- synthesizeKey("t", {});
- is(gAutoComplete.value, "ret", "Value should not be autocompleted");
-
- yield undefined;
-
- is(gAutoComplete.value, "retire", "Value should be autocompleted");
-
- // The placeholder string is now set to "retire". Changing the completion
- // string to "retirement" and see what the completion will turn out like.
- autoCompleteSimpleResult.retireCompletion = "Retirement";
- synthesizeKey("i", {});
- is(gAutoComplete.value, "retire", "Value should be autocompleted based on placeholder");
-
- yield undefined;
-
- is(gAutoComplete.value, "retirement", "Value should be autocompleted based on search result");
-
- // Change the search result to `Retire` again and see if the new result is
- // complited.
- autoCompleteSimpleResult.retireCompletion = "Retire";
- synthesizeKey("r", {});
- is(gAutoComplete.value, "retirement", "Value should be autocompleted based on placeholder");
-
- yield undefined;
-
- is(gAutoComplete.value, "retire", "Value should be autocompleted based on search result");
-
- // Complete the value
- gAutoComplete.value = 're';
- synthesizeKey("t", {});
- yield undefined;
- synthesizeKey("i", {});
- is(gAutoComplete.value, "reti", "Value should not be autocompleted");
-
- yield undefined;
-
- is(gAutoComplete.value, "retire", "Value should be autocompleted");
-
- // Remove the selected text "re" (1) and the "et" (2). Afterwards, add it again (3).
- // This should not cause the completion to kick in.
- synthesizeKey("VK_DELETE", {}); // (1)
-
- is(gAutoComplete.value, "reti", "Value should not complete after deletion");
-
- gAutoComplete.selectionStart = 1;
- gAutoComplete.selectionEnd = 3;
- synthesizeKey("VK_DELETE", {}); // (2)
-
- is(gAutoComplete.value, "ri", "Value should stay unchanged after removing character in the middle");
-
- yield undefined;
-
- synthesizeKey("e", {}); // (3.1)
- is(gAutoComplete.value, "rei", "Inserting a character in the middle should not complete the value");
-
- yield undefined;
-
- synthesizeKey("t", {}); // (3.2)
- is(gAutoComplete.value, "reti", "Inserting a character in the middle should not complete the value");
-
- yield undefined;
-
- // Adding a new character at the end should not cause the completion to happen again
- // as the completion failed before.
- gAutoComplete.selectionStart = 4;
- gAutoComplete.selectionEnd = 4;
- synthesizeKey("r", {});
- is(gAutoComplete.value, "retir", "Value should not be autocompleted immediately");
-
- yield undefined;
-
- is(gAutoComplete.value, "retire", "Value should be autocompleted");
-
- finishTest();
- yield undefined;
-}
-
-function runAsyncTest() {
- gAutoComplete.value = '';
- autoCompleteSimple.searchAsync = true;
-
- asyncTest = asyncTestGenerator();
- asyncTest.next();
-}
-]]>
-</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>