114 строки
2.5 KiB
JavaScript
114 строки
2.5 KiB
JavaScript
if (!process.listenerCount("unhandledRejection")) {
|
|
// eslint-disable-next-line no-console
|
|
process.on("unhandledRejection", r => console.log(r));
|
|
}
|
|
|
|
const path = require("path");
|
|
const chai = require("chai");
|
|
const sinonChai = require("sinon-chai");
|
|
const crypto = require("crypto");
|
|
const sinon = require("sinon");
|
|
const expect = chai.expect;
|
|
chai.should();
|
|
chai.use(sinonChai);
|
|
const nextTick = () => {
|
|
return new Promise(resolve => {
|
|
setTimeout(() => {
|
|
process.nextTick(resolve);
|
|
});
|
|
});
|
|
};
|
|
|
|
const webExtensionsJSDOM = require("webextensions-jsdom");
|
|
const manifestPath = path.resolve(path.join(__dirname, "../src/manifest.json"));
|
|
|
|
const buildDom = async ({background = {}, popup = {}}) => {
|
|
background = {
|
|
...background,
|
|
jsdom: {
|
|
...background.jsom,
|
|
beforeParse(window) {
|
|
window.browser.permissions.getAll.resolves({permissions: ["bookmarks"]});
|
|
window.crypto = {
|
|
getRandomValues: arr => crypto.randomBytes(arr.length),
|
|
};
|
|
}
|
|
}
|
|
};
|
|
|
|
popup = {
|
|
...popup,
|
|
jsdom: {
|
|
...popup.jsdom,
|
|
pretendToBeVisual: true
|
|
}
|
|
};
|
|
|
|
const webExtension = await webExtensionsJSDOM.fromManifest(manifestPath, {
|
|
apiFake: true,
|
|
wiring: true,
|
|
sinon: global.sinon,
|
|
background,
|
|
popup
|
|
});
|
|
|
|
webExtension.browser = webExtension.background.browser;
|
|
return webExtension;
|
|
};
|
|
|
|
const buildBackgroundDom = background => {
|
|
return buildDom({
|
|
background,
|
|
popup: false
|
|
});
|
|
};
|
|
|
|
const buildPopupDom = popup => {
|
|
return buildDom({
|
|
popup,
|
|
background: false
|
|
});
|
|
};
|
|
|
|
const initializeWithTab = async (details = {
|
|
cookieStoreId: "firefox-default"
|
|
}) => {
|
|
let tab;
|
|
const webExtension = await buildDom({
|
|
background: {
|
|
async afterBuild(background) {
|
|
tab = await background.browser.tabs._create(details);
|
|
}
|
|
},
|
|
popup: {
|
|
jsdom: {
|
|
beforeParse(window) {
|
|
window.browser.storage.local.set({
|
|
"browserActionBadgesClicked": [],
|
|
"onboarding-stage": 7,
|
|
"achievements": [],
|
|
"syncEnabled": true,
|
|
"replaceTabEnabled": false,
|
|
"mozillaVpnInstalled": false,
|
|
});
|
|
window.browser.storage.local.set.resetHistory();
|
|
window.browser.storage.sync.clear();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
webExtension.tab = tab;
|
|
|
|
return webExtension;
|
|
};
|
|
|
|
module.exports = {
|
|
buildDom,
|
|
buildBackgroundDom,
|
|
buildPopupDom,
|
|
initializeWithTab,
|
|
sinon,
|
|
expect,
|
|
nextTick,
|
|
};
|