forked from mirrors/gecko-dev
83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* These tests test the UrlbarController in association with the model.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
const {PromiseUtils} = ChromeUtils.import("resource://gre/modules/PromiseUtils.jsm");
|
|
|
|
const TEST_URL = "http://example.com";
|
|
const match = new UrlbarResult(UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
|
|
UrlbarUtils.RESULT_SOURCE.TABS,
|
|
{ url: TEST_URL });
|
|
let controller;
|
|
|
|
/**
|
|
* Asserts that the query context has the expected values.
|
|
*
|
|
* @param {UrlbarQueryContext} context
|
|
* @param {object} expectedValues The expected values for the UrlbarQueryContext.
|
|
*/
|
|
function assertContextMatches(context, expectedValues) {
|
|
Assert.ok(context instanceof UrlbarQueryContext,
|
|
"Should be a UrlbarQueryContext");
|
|
|
|
for (let [key, value] of Object.entries(expectedValues)) {
|
|
Assert.equal(context[key], value,
|
|
`Should have the expected value for ${key} in the UrlbarQueryContext`);
|
|
}
|
|
}
|
|
|
|
add_task(async function setup() {
|
|
controller = new UrlbarController({
|
|
browserWindow: {
|
|
location: {
|
|
href: AppConstants.BROWSER_CHROME_URL,
|
|
},
|
|
},
|
|
});
|
|
});
|
|
|
|
add_task(async function test_basic_search() {
|
|
let providerName = registerBasicTestProvider([match]);
|
|
const context = createContext(TEST_URL, {providers: [providerName]});
|
|
|
|
let startedPromise = promiseControllerNotification(controller, "onQueryStarted");
|
|
let resultsPromise = promiseControllerNotification(controller, "onQueryResults");
|
|
|
|
controller.startQuery(context);
|
|
|
|
let params = await startedPromise;
|
|
|
|
Assert.equal(params[0], context);
|
|
|
|
params = await resultsPromise;
|
|
|
|
Assert.deepEqual(params[0].results, [match],
|
|
"Should have the expected match");
|
|
});
|
|
|
|
add_task(async function test_cancel_search() {
|
|
let providerCanceledDeferred = PromiseUtils.defer();
|
|
let providerName = registerBasicTestProvider([match], providerCanceledDeferred.resolve);
|
|
const context = createContext(TEST_URL, {providers: [providerName]});
|
|
|
|
let startedPromise = promiseControllerNotification(controller, "onQueryStarted");
|
|
let cancelPromise = promiseControllerNotification(controller, "onQueryCancelled");
|
|
|
|
await controller.startQuery(context);
|
|
|
|
let params = await startedPromise;
|
|
|
|
controller.cancelQuery(context);
|
|
|
|
Assert.equal(params[0], context);
|
|
|
|
info("Should tell the provider the query is canceled");
|
|
await providerCanceledDeferred.promise;
|
|
|
|
params = await cancelPromise;
|
|
});
|