Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
// When the heuristic result is not the first result added, it should still be
// selected.
"use strict";
// When the heuristic result is not the first result added, it should still be
// selected.
add_task(async function slowHeuristicSelected() {
// First, add a provider that adds a heuristic result on a delay. Both this
// provider and the one below have a high priority so that only they are used
// during the test.
let engine = await Services.search.getDefault();
let heuristicResult = new UrlbarResult(
UrlbarUtils.RESULT_TYPE.SEARCH,
UrlbarUtils.RESULT_SOURCE.SEARCH,
{
suggestion: "test",
engine: engine.name,
}
);
heuristicResult.heuristic = true;
let heuristicProvider = new UrlbarTestUtils.TestProvider({
results: [heuristicResult],
name: "heuristicProvider",
priority: Infinity,
addTimeout: 500,
});
UrlbarProvidersManager.registerProvider(heuristicProvider);
// Second, add another provider that adds a non-heuristic result immediately
// with suggestedIndex = 1.
let nonHeuristicResult = makeTipResult();
nonHeuristicResult.suggestedIndex = 1;
let nonHeuristicProvider = new UrlbarTestUtils.TestProvider({
results: [nonHeuristicResult],
name: "nonHeuristicProvider",
priority: Infinity,
});
UrlbarProvidersManager.registerProvider(nonHeuristicProvider);
// Do a search.
const win = await BrowserTestUtils.openNewBrowserWindow();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
value: "test",
window: win,
});
// The first result should be the heuristic and it should be selected.
let actualHeuristic = await UrlbarTestUtils.getDetailsOfResultAt(win, 0);
Assert.equal(actualHeuristic.type, UrlbarUtils.RESULT_TYPE.SEARCH);
Assert.equal(UrlbarTestUtils.getSelectedElementIndex(win), 0);
// Check the second result for good measure.
let actualNonHeuristic = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(actualNonHeuristic.type, UrlbarUtils.RESULT_TYPE.TIP);
await UrlbarTestUtils.promisePopupClose(win);
UrlbarProvidersManager.unregisterProvider(heuristicProvider);
UrlbarProvidersManager.unregisterProvider(nonHeuristicProvider);
await BrowserTestUtils.closeWindow(win);
});
// When the heuristic result is not the first result added but a one-off search
// button is already selected, the heuristic result should not steal the
// selection from the one-off button.
add_task(async function oneOffRemainsSelected() {
// First, add a provider that adds a heuristic result on a delay. Both this
// provider and the one below have a high priority so that only they are used
// during the test.
let engine = await Services.search.getDefault();
let heuristicResult = new UrlbarResult(
UrlbarUtils.RESULT_TYPE.SEARCH,
UrlbarUtils.RESULT_SOURCE.SEARCH,
{
suggestion: "test",
engine: engine.name,
}
);
heuristicResult.heuristic = true;
let heuristicProvider = new UrlbarTestUtils.TestProvider({
results: [heuristicResult],
name: "heuristicProvider",
priority: Infinity,
addTimeout: 500,
});
UrlbarProvidersManager.registerProvider(heuristicProvider);
// Second, add another provider that adds a non-heuristic result immediately
// with suggestedIndex = 1.
let nonHeuristicResult = makeTipResult();
nonHeuristicResult.suggestedIndex = 1;
let nonHeuristicProvider = new UrlbarTestUtils.TestProvider({
results: [nonHeuristicResult],
name: "nonHeuristicProvider",
priority: Infinity,
});
UrlbarProvidersManager.registerProvider(nonHeuristicProvider);
// Do a search but don't wait for it to finish.
const win = await BrowserTestUtils.openNewBrowserWindow();
let searchPromise = UrlbarTestUtils.promiseAutocompleteResultPopup({
value: "test",
window: win,
});
// When the view opens, press the up arrow key to select the one-off search
// settings button. There's no point in selecting instead the non-heuristic
// result because once we do that, the search is canceled, and the heuristic
// result will never be added.
await UrlbarTestUtils.promisePopupOpen(win, () => {});
EventUtils.synthesizeKey("KEY_ArrowUp", {}, win);
// Wait for the search to finish.
await searchPromise;
// The first result should be the heuristic.
let actualHeuristic = await UrlbarTestUtils.getDetailsOfResultAt(win, 0);
Assert.equal(actualHeuristic.type, UrlbarUtils.RESULT_TYPE.SEARCH);
// Check the second result for good measure.
let actualNonHeuristic = await UrlbarTestUtils.getDetailsOfResultAt(win, 1);
Assert.equal(actualNonHeuristic.type, UrlbarUtils.RESULT_TYPE.TIP);
// No result should be selected.
Assert.equal(UrlbarTestUtils.getSelectedElement(win), null);
Assert.equal(UrlbarTestUtils.getSelectedElementIndex(win), -1);
// The one-off settings button should be selected.
Assert.equal(
win.gURLBar.view.oneOffSearchButtons.selectedButton,
win.gURLBar.view.oneOffSearchButtons.settingsButton
);
await UrlbarTestUtils.promisePopupClose(win);
UrlbarProvidersManager.unregisterProvider(heuristicProvider);
UrlbarProvidersManager.unregisterProvider(nonHeuristicProvider);
await BrowserTestUtils.closeWindow(win);
});
function makeTipResult() {
return new UrlbarResult(
UrlbarUtils.RESULT_TYPE.TIP,
UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
{
helpUrl: "http://example.com/",
type: "test",
titleL10n: { id: "urlbar-search-tips-confirm" },
buttons: [
{
l10n: { id: "urlbar-search-tips-confirm" },
},
],
}
);
}