/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim:set ts=2 sw=2 sts=2 et: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /** * Test for bug 406358 to make sure frecency works for empty input/search, but * this also tests for non-empty inputs as well. Because the interactions among * *DIFFERENT* visit counts and visit dates is not well defined, this test * holds one of the two values constant when modifying the other. * * Also test bug 419068 to make sure tagged pages don't necessarily have to be * first in the results. * * Also test bug 426166 to make sure that the results of autocomplete searches * are stable. Note that failures of this test will be intermittent by nature * since we are testing to make sure that the unstable sort algorithm used * by SQLite is not changing the order of the results on us. */ function AutoCompleteInput(aSearches) { this.searches = aSearches; } AutoCompleteInput.prototype = { constructor: AutoCompleteInput, searches: null, minResultsForPopup: 0, timeout: 10, searchParam: "", textValue: "", disableAutoComplete: false, completeDefaultIndex: false, get searchCount() { return this.searches.length; }, getSearchAt: function(aIndex) { return this.searches[aIndex]; }, onSearchBegin: function() {}, onSearchComplete: function() {}, popupOpen: false, popup: { setSelectedIndex: function(aIndex) {}, invalidate: function() {}, // nsISupports implementation QueryInterface: function(iid) { if (iid.equals(Ci.nsISupports) || iid.equals(Ci.nsIAutoCompletePopup)) return this; throw Components.results.NS_ERROR_NO_INTERFACE; } }, // nsISupports implementation QueryInterface: function(iid) { if (iid.equals(Ci.nsISupports) || iid.equals(Ci.nsIAutoCompleteInput)) return this; throw Components.results.NS_ERROR_NO_INTERFACE; } } function ensure_results(uris, searchTerm) { PlacesTestUtils.promiseAsyncUpdates() .then(() => ensure_results_internal(uris, searchTerm)); } function ensure_results_internal(uris, searchTerm) { var controller = Components.classes["@mozilla.org/autocomplete/controller;1"]. getService(Components.interfaces.nsIAutoCompleteController); // Make an AutoCompleteInput that uses our searches // and confirms results on search complete var input = new AutoCompleteInput(["unifiedcomplete"]); controller.input = input; var numSearchesStarted = 0; input.onSearchBegin = function() { numSearchesStarted++; do_check_eq(numSearchesStarted, 1); }; input.onSearchComplete = function() { do_check_eq(numSearchesStarted, 1); do_check_eq(controller.searchStatus, Ci.nsIAutoCompleteController.STATUS_COMPLETE_MATCH); do_check_eq(controller.matchCount, uris.length); for (var i=0; i Services.prefs.clearUserPref("browser.urlbar.autoFill")); // always search in history + bookmarks, no matter what the default is var prefs = Cc["@mozilla.org/preferences-service;1"]. getService(Ci.nsIPrefBranch); prefs.setBoolPref("browser.urlbar.suggest.history", true); prefs.setBoolPref("browser.urlbar.suggest.bookmark", true); prefs.setBoolPref("browser.urlbar.suggest.openpage", false); for (let test of tests) { yield PlacesUtils.bookmarks.eraseEverything(); yield PlacesTestUtils.clearHistory(); deferEnsureResults = Promise.defer(); yield test(); yield deferEnsureResults.promise; } for (let type of ["history", "bookmark", "openpage"]) { prefs.clearUserPref("browser.urlbar.suggest." + type); } });