toolkit/components/autocomplete/tests/unit/test_immediate_search.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 function AutoCompleteImmediateSearch(aName, aResult) {
     7   this.name = aName;
     8   this._result = aResult;
     9 }
    10 AutoCompleteImmediateSearch.prototype = Object.create(AutoCompleteSearchBase.prototype);
    11 AutoCompleteImmediateSearch.prototype.searchType =
    12   Ci.nsIAutoCompleteSearchDescriptor.SEARCH_TYPE_IMMEDIATE;
    13 AutoCompleteImmediateSearch.prototype.QueryInterface =
    14   XPCOMUtils.generateQI([Ci.nsIFactory,
    15                          Ci.nsIAutoCompleteSearch,
    16                          Ci.nsIAutoCompleteSearchDescriptor]);
    18 function AutoCompleteDelayedSearch(aName, aResult) {
    19   this.name = aName;
    20   this._result = aResult;
    21 }
    22 AutoCompleteDelayedSearch.prototype = Object.create(AutoCompleteSearchBase.prototype);
    24 function AutoCompleteResult(aValues, aDefaultIndex) {
    25   this._values = aValues;
    26   this.defaultIndex = aDefaultIndex;
    27 }
    28 AutoCompleteResult.prototype = Object.create(AutoCompleteResultBase.prototype);
    30 function run_test() {
    31   run_next_test();
    32 }
    34 /**
    35  * An immediate search should be executed synchronously.
    36  */
    37 add_test(function test_immediate_search() {
    38   let immediateResults = ["mozillaTest"];
    39   let inputStr = "moz";
    41   let immediateSearch = new AutoCompleteImmediateSearch(
    42     "immediate", new AutoCompleteResult(["moz-immediate"], 0));
    43   registerAutoCompleteSearch(immediateSearch);
    44   let delayedSearch = new AutoCompleteDelayedSearch(
    45     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
    46   registerAutoCompleteSearch(delayedSearch);
    48   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
    49                    getService(Ci.nsIAutoCompleteController);  
    51   let input = new AutoCompleteInputBase([delayedSearch.name,
    52                                          immediateSearch.name]);
    53   input.completeDefaultIndex = true;
    54   input.textValue = inputStr;
    56   // Caret must be at the end. Autofill doesn't happen unless you're typing
    57   // characters at the end.
    58   let strLen = inputStr.length;
    59   input.selectTextRange(strLen, strLen);
    61   controller.input = input;
    62   controller.startSearch(inputStr);
    64   // Immediately check the result, the immediate search should have finished.
    65   do_check_eq(input.textValue, "moz-immediate");
    67   // Wait for both queries to finish.
    68   input.onSearchComplete = function() {
    69     // Sanity check.
    70     do_check_eq(input.textValue, "moz-immediate");
    72     unregisterAutoCompleteSearch(immediateSearch);
    73     unregisterAutoCompleteSearch(delayedSearch);
    74     run_next_test();
    75   };
    76 });
    78 /**
    79  * An immediate search should be executed before any delayed search.
    80  */
    81 add_test(function test_immediate_search_notimeout() {
    82   let immediateResults = ["mozillaTest"];
    83   let inputStr = "moz";
    85   let immediateSearch = new AutoCompleteImmediateSearch(
    86     "immediate", new AutoCompleteResult(["moz-immediate"], 0));
    87   registerAutoCompleteSearch(immediateSearch);
    89   let delayedSearch = new AutoCompleteDelayedSearch(
    90     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
    91   registerAutoCompleteSearch(delayedSearch);
    93   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
    94                    getService(Ci.nsIAutoCompleteController);  
    96   let input = new AutoCompleteInputBase([delayedSearch.name,
    97                                          immediateSearch.name]);
    98   input.completeDefaultIndex = true;
    99   input.textValue = inputStr;
   100   input.timeout = 0;
   102   // Caret must be at the end. Autofill doesn't happen unless you're typing
   103   // characters at the end.
   104   let strLen = inputStr.length;
   105   input.selectTextRange(strLen, strLen);
   107   controller.input = input;
   108   let complete = false;
   109   input.onSearchComplete = function() {
   110     complete = true;
   111   };
   112   controller.startSearch(inputStr);
   113   do_check_true(complete);
   115   // Immediately check the result, the immediate search should have finished.
   116   do_check_eq(input.textValue, "moz-immediate");
   118   unregisterAutoCompleteSearch(immediateSearch);
   119   unregisterAutoCompleteSearch(delayedSearch);
   120   run_next_test();
   121 });
   123 /**
   124  * A delayed search should be executed synchronously with a zero timeout.
   125  */
   126 add_test(function test_delayed_search_notimeout() {
   127   let immediateResults = ["mozillaTest"];
   128   let inputStr = "moz";
   130   let delayedSearch = new AutoCompleteDelayedSearch(
   131     "delayed", new AutoCompleteResult(["moz-delayed"], 0));
   132   registerAutoCompleteSearch(delayedSearch);
   134   let controller = Cc["@mozilla.org/autocomplete/controller;1"].
   135                    getService(Ci.nsIAutoCompleteController);  
   137   let input = new AutoCompleteInputBase([delayedSearch.name]);
   138   input.completeDefaultIndex = true;
   139   input.textValue = inputStr;
   140   input.timeout = 0;
   142   // Caret must be at the end. Autofill doesn't happen unless you're typing
   143   // characters at the end.
   144   let strLen = inputStr.length;
   145   input.selectTextRange(strLen, strLen);
   147   controller.input = input;
   148   let complete = false;
   149   input.onSearchComplete = function() {
   150     complete = true;
   151   };
   152   controller.startSearch(inputStr);
   153   do_check_true(complete);
   155   // Immediately check the result, the delayed search should have finished.
   156   do_check_eq(input.textValue, "moz-delayed");
   158   unregisterAutoCompleteSearch(delayedSearch);
   159   run_next_test();
   160 });

mercurial