Source code

Revision control

Copy as Markdown

Other Tools

/* Any copyright is dedicated to the Public Domain.
"use strict";
/* import-globals-from head.js */
async function doExposureTest({
prefs,
queries,
expectedEvents,
trigger = doBlur,
}) {
const cleanupQuickSuggest = await ensureQuickSuggestInit({ prefs });
await doTest(async () => {
for (let {
query,
expectedVisible = [],
expectedNotVisible = [],
} of queries) {
info("doExposureTest performing query: " + JSON.stringify(query));
await openPopup(query);
for (let type of expectedVisible) {
let row = await getRowByType(suggestResultType(type));
Assert.ok(!!row, "The result should be in the view: " + type);
Assert.ok(
BrowserTestUtils.isVisible(row),
"The result's row should be visible: " + type
);
}
for (let type of expectedNotVisible) {
Assert.ok(
!(await getRowByType(suggestResultType(type))),
"The result should not be in the view: " + type
);
}
}
await trigger();
assertExposureTelemetry(
expectedEvents.map(e => ({
...e,
results: e.results
.split(",")
.map(r => suggestResultType(r))
.join(","),
}))
);
});
await cleanupQuickSuggest();
}
async function getRowByType(type) {
for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) {
const detail = await UrlbarTestUtils.getDetailsOfResultAt(window, i);
const telemetryType = UrlbarUtils.searchEngagementTelemetryType(
detail.result
);
if (telemetryType === type) {
return detail.element.row;
}
}
return null;
}
function suggestResultType(typeWithoutSource) {
return `rust_${typeWithoutSource}`;
}