toolkit/content/tests/chrome/test_autocomplete3.xul

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 <?xml version="1.0"?>
     2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
     5 <window title="Autocomplete Widget Test 3"
     6         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
     8   <script type="application/javascript"
     9           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
    10   <script type="application/javascript"
    11           src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
    13 <textbox id="autocomplete" type="autocomplete"
    14          autocompletesearch="simple"
    15          onsearchcomplete="checkResult();"/>
    17 <script class="testbody" type="application/javascript">
    18 <![CDATA[
    20 // Set to indicate whether or not we want autoCompleteSimple to return a result
    21 var returnResult = true;
    23 const ACR = Components.interfaces.nsIAutoCompleteResult;
    25 // This result can't be constructed in-line, because otherwise we leak memory.
    26 function nsAutoCompleteSimpleResult(aString)
    27 {
    28   this.searchString = aString;
    29   if (returnResult) {
    30     this.searchResult = ACR.RESULT_SUCCESS;
    31     this.matchCount = 1;
    32     this._param = "Result";
    33   }
    34 }
    36 nsAutoCompleteSimpleResult.prototype = {
    37  _param: "",
    38  searchString: null,
    39  searchResult: ACR.RESULT_FAILURE,
    40  defaultIndex: 0,
    41  errorDescription: null,
    42  matchCount: 0,
    43  getValueAt: function() { return this._param; },
    44  getCommentAt: function() { return null; },
    45  getStyleAt: function() { return null; },
    46  getImageAt: function() { return null; },
    47  getFinalCompleteValueAt: function() { return this.getValueAt(); },
    48  getLabelAt: function() { return null; },
    49  removeValueAt: function() {}
    50 };
    52 // A basic autocomplete implementation that either returns one result or none
    53 var autoCompleteSimpleID = Components.ID("0a2afbdb-f30e-47d1-9cb1-0cd160240aca");
    54 var autoCompleteSimpleName = "@mozilla.org/autocomplete/search;1?name=simple"
    55 var autoCompleteSimple = {
    56   QueryInterface: function(iid) {
    57     if (iid.equals(Components.interfaces.nsISupports) ||
    58         iid.equals(Components.interfaces.nsIFactory) ||
    59         iid.equals(Components.interfaces.nsIAutoCompleteSearch))
    60       return this;
    62     throw Components.results.NS_ERROR_NO_INTERFACE;
    63   },
    65   createInstance: function(outer, iid) {
    66     return this.QueryInterface(iid);
    67   },
    69   startSearch: function(aString, aParam, aResult, aListener) {
    70     var result = new nsAutoCompleteSimpleResult(aString);
    71     aListener.onSearchResult(this, result);
    72   },
    74   stopSearch: function() {}
    75 };
    77 var componentManager = Components.manager
    78                                  .QueryInterface(Components.interfaces.nsIComponentRegistrar);
    79 componentManager.registerFactory(autoCompleteSimpleID, "Test Simple Autocomplete",
    80                                  autoCompleteSimpleName, autoCompleteSimple);
    83 // Test Bug 325842 - completeDefaultIndex
    85 SimpleTest.waitForExplicitFinish();
    86 setTimeout(startTest, 0);
    88 var currentTest = 0;
    90 // Note the entries for these tests (key) are incremental.
    91 const tests = [
    92   { completeDefaultIndex: "false", key: "r", result: "r",
    93     start: 1, end: 1 },
    94   { completeDefaultIndex: "true", key: "e", result: "result",
    95     start: 2, end: 6 },
    96   { completeDefaultIndex: "true", key: "t", result: "ret >> Result",
    97     start: 3, end: 13 }
    98 ];
   100 function startTest() {
   101   var autocomplete = $("autocomplete");
   103   // These should not be set by default.
   104   is(autocomplete.hasAttribute("completedefaultindex"), false,
   105      "completedefaultindex not set by default");
   107   autocomplete.completeDefaultIndex = "true";
   109   is(autocomplete.getAttribute("completedefaultindex"), "true",
   110      "completedefaultindex attribute set correctly");
   111   is(autocomplete.completeDefaultIndex, true,
   112      "autoFill getter returned correctly");
   114   autocomplete.completeDefaultIndex = "false";
   116   is(autocomplete.getAttribute("completedefaultindex"), "false",
   117      "completedefaultindex attribute set to false correctly");
   118   is(autocomplete.completeDefaultIndex, false,
   119      "completeDefaultIndex getter returned false correctly");
   121   checkNext();
   122 }
   124 function checkNext() {
   125   var autocomplete = $("autocomplete");
   127   autocomplete.completeDefaultIndex = tests[currentTest].completeDefaultIndex;
   128   autocomplete.focus();
   130   synthesizeKey(tests[currentTest].key, {});
   131 }
   133 function checkResult() {
   134   var autocomplete = $("autocomplete");
   135   var style = window.getComputedStyle(autocomplete, "");
   137   is(autocomplete.value, tests[currentTest].result,
   138      "Test " + currentTest + ": autocomplete.value should equal '" +
   139      tests[currentTest].result + "'");
   141   is(autocomplete.selectionStart, tests[currentTest].start,
   142      "Test " + currentTest + ": autocomplete selection should start at " +
   143      tests[currentTest].start);
   145   is(autocomplete.selectionEnd, tests[currentTest].end,
   146      "Test " + currentTest + ": autocomplete selection should end at " +
   147      tests[currentTest].end);
   149   ++currentTest;
   151   if (currentTest < tests.length)
   152     setTimeout(checkNext, 0);
   153   else {
   154     // TODO (bug 494809): Autocomplete-in-the-middle should take in count RTL
   155     // and complete on VK_RIGHT or VK_LEFT based on that.  It should also revert
   156     // what user has typed to far if he moves in the opposite direction.
   157     if (autocomplete.value.indexOf(">>") == -1) {
   158       // Test result if user accepts autocomplete suggestion.
   159       synthesizeKey("VK_RIGHT", {});
   160       is(autocomplete.value, "Result",
   161          "Test complete: autocomplete.value should equal 'Result'");
   162       is(autocomplete.selectionStart, 6,
   163          "Test complete: autocomplete selection should start at 6");
   164       is(autocomplete.selectionEnd, 6,
   165          "Test complete: autocomplete selection should end at 6");
   166     }
   168     setTimeout(function() {
   169       // Unregister the factory so that we don't get in the way of other tests
   170       componentManager.unregisterFactory(autoCompleteSimpleID, autoCompleteSimple);
   171       SimpleTest.finish();
   172     }, 0);
   173   }
   174 }
   176 ]]>
   177 </script>
   179 <body xmlns="http://www.w3.org/1999/xhtml">
   180 <p id="display">
   181 </p>
   182 <div id="content" style="display: none">
   183 </div>
   184 <pre id="test">
   185 </pre>
   186 </body>
   188 </window>

mercurial