Files
sousa-gecko/toolkit/components/ml/tests/browser_eval/head.js
T
Greg Tatum db919f9e45 Bug 2025562 - Create an MLTestUtils file to centralize shared testing utils; r=tetchart,ai-models-reviewers,ai-ondevice-reviewers,thasan
I set this up as a module so that it's easy to import within tests and
clear how to use it across both toolkit and browser code.

Differential Revision: https://phabricator.services.mozilla.com/D289539
2026-03-27 22:37:10 +00:00

74 lines
1.8 KiB
JavaScript

/* import-globals-from ../browser/head.js */
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/browser/components/translations/tests/browser/head.js",
this
);
const { MLTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/MLTestUtils.sys.mjs"
);
async function setupEvaluation({ url }) {
{
const { RemoteSettingsClient } = ChromeUtils.importESModule(
"resource://services-settings/RemoteSettingsClient.sys.mjs"
);
RemoteSettingsClient.prototype.validateCollectionSignature = async () => {};
}
const tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
url,
true // waitForLoad
);
return {
tab,
async cleanup() {
info("Cleaning up");
BrowserTestUtils.removeTab(tab);
clearDirtyPrefs();
},
};
}
function clearDirtyPrefs() {
Services.prefs.clearUserPref(
"browser.translations.mostRecentTargetLanguages"
);
Services.prefs.clearUserPref("intl.locale.requested");
}
/**
* Wait for every element in the selector to have been mutated once.
*
* @param {MozBrowser} browser
* @param {string} selector
* @returns {Promise<void>}
*/
function waitForMutations(browser, selector) {
return SpecialPowers.spawn(browser, [selector], async selector => {
const elements = new Set(content.document.querySelectorAll(selector));
await new Promise(resolve => {
for (const element of elements) {
const observer = new content.MutationObserver(() => {
elements.delete(element);
observer.disconnect();
if (elements.size === 0) {
resolve();
}
});
observer.observe(content.document.querySelector("article"), {
subtree: true,
characterData: true,
childList: true,
});
}
});
});
}