Bug 1854255 - Enable `prefer-const` as linting rule for some tests head files. r=vineet

Differential Revision: https://phabricator.services.mozilla.com/D188765

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Alessandro Castellani 2023-09-21 05:40:50 +00:00
Родитель 9f2a3f290a
Коммит 991fae5d76
30 изменённых файлов: 574 добавлений и 555 удалений

Просмотреть файл

@ -142,6 +142,8 @@ module.exports = {
vars: "local",
},
],
// Enforce using `let` only when variables are reassigned.
"prefer-const": ["error", { destructuring: "all" }],
},
},
{

Просмотреть файл

@ -11,13 +11,13 @@ const { CalendarTestUtils } = ChromeUtils.import(
);
async function openTasksTab() {
let tabmail = document.getElementById("tabmail");
let tasksMode = tabmail.tabModes.tasks;
const tabmail = document.getElementById("tabmail");
const tasksMode = tabmail.tabModes.tasks;
if (tasksMode.tabs.length == 1) {
tabmail.selectedTab = tasksMode.tabs[0];
} else {
let tasksTabButton = document.getElementById("tasksButton");
const tasksTabButton = document.getElementById("tasksButton");
EventUtils.synthesizeMouseAtCenter(tasksTabButton, { clickCount: 1 });
}
@ -28,8 +28,8 @@ async function openTasksTab() {
}
async function closeTasksTab() {
let tabmail = document.getElementById("tabmail");
let tasksMode = tabmail.tabModes.tasks;
const tabmail = document.getElementById("tabmail");
const tasksMode = tabmail.tabModes.tasks;
if (tasksMode.tabs.length == 1) {
tabmail.closeTab(tasksMode.tabs[0]);
@ -56,8 +56,8 @@ async function selectFolderTab() {
}
async function openChatTab() {
let tabmail = document.getElementById("tabmail");
let chatMode = tabmail.tabModes.chat;
const tabmail = document.getElementById("tabmail");
const chatMode = tabmail.tabModes.chat;
if (chatMode.tabs.length == 1) {
tabmail.selectedTab = chatMode.tabs[0];
@ -72,8 +72,8 @@ async function openChatTab() {
}
async function closeChatTab() {
let tabmail = document.getElementById("tabmail");
let chatMode = tabmail.tabModes.chat;
const tabmail = document.getElementById("tabmail");
const chatMode = tabmail.tabModes.chat;
if (chatMode.tabs.length == 1) {
tabmail.closeTab(chatMode.tabs[0]);
@ -91,9 +91,9 @@ async function closeChatTab() {
* @returns {string} - The id of the new tab's panel element.
*/
async function _openNewCalendarItemTab(tabMode) {
let tabmail = document.getElementById("tabmail");
let itemTabs = tabmail.tabModes[tabMode].tabs;
let previousTabCount = itemTabs.length;
const tabmail = document.getElementById("tabmail");
const itemTabs = tabmail.tabModes[tabMode].tabs;
const previousTabCount = itemTabs.length;
Services.prefs.setBoolPref("calendar.item.editInTab", true);
let buttonId = "sidePanelNewEvent";
@ -104,10 +104,10 @@ async function _openNewCalendarItemTab(tabMode) {
await CalendarTestUtils.openCalendarTab(window);
}
let newItemButton = document.getElementById(buttonId);
const newItemButton = document.getElementById(buttonId);
EventUtils.synthesizeMouseAtCenter(newItemButton, { clickCount: 1 });
let newTab = itemTabs[itemTabs.length - 1];
const newTab = itemTabs[itemTabs.length - 1];
is(itemTabs.length, previousTabCount + 1, `new ${tabMode} tab is open`);
is(tabmail.selectedTab, newTab, `new ${tabMode} tab is selected`);
@ -117,8 +117,8 @@ async function _openNewCalendarItemTab(tabMode) {
return newTab.panel.id;
}
let openNewCalendarEventTab = _openNewCalendarItemTab.bind(null, "calendarEvent");
let openNewCalendarTaskTab = _openNewCalendarItemTab.bind(null, "calendarTask");
const openNewCalendarEventTab = _openNewCalendarItemTab.bind(null, "calendarEvent");
const openNewCalendarTaskTab = _openNewCalendarItemTab.bind(null, "calendarTask");
/**
* Selects an existing (open) calendar event or task tab.
@ -127,9 +127,9 @@ let openNewCalendarTaskTab = _openNewCalendarItemTab.bind(null, "calendarTask");
* @param {string} panelId - The id of the tab's panel element.
*/
async function _selectCalendarItemTab(tabMode, panelId) {
let tabmail = document.getElementById("tabmail");
let itemTabs = tabmail.tabModes[tabMode].tabs;
let tabToSelect = itemTabs.find(tab => tab.panel.id == panelId);
const tabmail = document.getElementById("tabmail");
const itemTabs = tabmail.tabModes[tabMode].tabs;
const tabToSelect = itemTabs.find(tab => tab.panel.id == panelId);
ok(tabToSelect, `${tabMode} tab is open`);
@ -140,8 +140,8 @@ async function _selectCalendarItemTab(tabMode, panelId) {
await new Promise(resolve => setTimeout(resolve));
}
let selectCalendarEventTab = _selectCalendarItemTab.bind(null, "calendarEvent");
let selectCalendarTaskTab = _selectCalendarItemTab.bind(null, "calendarTask");
const selectCalendarEventTab = _selectCalendarItemTab.bind(null, "calendarEvent");
const selectCalendarTaskTab = _selectCalendarItemTab.bind(null, "calendarTask");
/**
* Closes a calendar event or task tab.
@ -150,14 +150,14 @@ let selectCalendarTaskTab = _selectCalendarItemTab.bind(null, "calendarTask");
* @param {string} panelId - The id of the panel of the tab to close.
*/
async function _closeCalendarItemTab(tabMode, panelId) {
let tabmail = document.getElementById("tabmail");
let itemTabs = tabmail.tabModes[tabMode].tabs;
let previousTabCount = itemTabs.length;
let itemTab = itemTabs.find(tab => tab.panel.id == panelId);
const tabmail = document.getElementById("tabmail");
const itemTabs = tabmail.tabModes[tabMode].tabs;
const previousTabCount = itemTabs.length;
const itemTab = itemTabs.find(tab => tab.panel.id == panelId);
if (itemTab) {
// Tab does not immediately close, so wait for it.
let tabClosedPromise = new Promise(resolve => {
const tabClosedPromise = new Promise(resolve => {
itemTab.tabNode.addEventListener("TabClose", resolve, { once: true });
});
tabmail.closeTab(itemTab);
@ -169,8 +169,8 @@ async function _closeCalendarItemTab(tabMode, panelId) {
await new Promise(resolve => setTimeout(resolve));
}
let closeCalendarEventTab = _closeCalendarItemTab.bind(null, "calendarEvent");
let closeCalendarTaskTab = _closeCalendarItemTab.bind(null, "calendarTask");
const closeCalendarEventTab = _closeCalendarItemTab.bind(null, "calendarEvent");
const closeCalendarTaskTab = _closeCalendarItemTab.bind(null, "calendarTask");
async function openPreferencesTab() {
const tabmail = document.getElementById("tabmail");
@ -189,8 +189,8 @@ async function openPreferencesTab() {
}
async function closeAddressBookTab() {
let tabmail = document.getElementById("tabmail");
let abMode = tabmail.tabModes.addressBookTab;
const tabmail = document.getElementById("tabmail");
const abMode = tabmail.tabModes.addressBookTab;
if (abMode.tabs.length == 1) {
tabmail.closeTab(abMode.tabs[0]);
@ -202,8 +202,8 @@ async function closeAddressBookTab() {
}
async function closePreferencesTab() {
let tabmail = document.getElementById("tabmail");
let prefsMode = tabmail.tabModes.preferencesTab;
const tabmail = document.getElementById("tabmail");
const prefsMode = tabmail.tabModes.preferencesTab;
if (prefsMode.tabs.length == 1) {
tabmail.closeTab(prefsMode.tabs[0]);
@ -231,8 +231,8 @@ async function openAddonsTab() {
}
async function closeAddonsTab() {
let tabmail = document.getElementById("tabmail");
let contentMode = tabmail.tabModes.contentTab;
const tabmail = document.getElementById("tabmail");
const contentMode = tabmail.tabModes.contentTab;
if (contentMode.tabs.length == 1) {
tabmail.closeTab(contentMode.tabs[0]);
@ -261,9 +261,9 @@ async function createCalendarUsingDialog(name, data = {}) {
* @param {nsIDOMWindow} win - The dialog window.
*/
async function useDialog(win) {
let doc = win.document;
let dialogElement = doc.querySelector("dialog");
let acceptButton = dialogElement.getButton("accept");
const doc = win.document;
const dialogElement = doc.querySelector("dialog");
const acceptButton = dialogElement.getButton("accept");
if (data.network) {
// Choose network calendar type.
@ -272,9 +272,9 @@ async function createCalendarUsingDialog(name, data = {}) {
// Enter a location.
if (data.network.location == undefined) {
let calendarFile = Services.dirsvc.get("TmpD", Ci.nsIFile);
const calendarFile = Services.dirsvc.get("TmpD", Ci.nsIFile);
calendarFile.append(name + ".ics");
let fileURI = Services.io.newFileURI(calendarFile);
const fileURI = Services.io.newFileURI(calendarFile);
data.network.location = fileURI.prePath + fileURI.pathQueryRef;
}
EventUtils.synthesizeMouseAtCenter(doc.querySelector("#network-location-input"), {}, win);
@ -284,7 +284,7 @@ async function createCalendarUsingDialog(name, data = {}) {
if (data.network.offline == undefined) {
data.network.offline = true;
}
let offlineCheckbox = doc.querySelector("#network-cache-checkbox");
const offlineCheckbox = doc.querySelector("#network-cache-checkbox");
if (!offlineCheckbox.checked) {
EventUtils.synthesizeMouseAtCenter(offlineCheckbox, {}, win);
}
@ -292,7 +292,7 @@ async function createCalendarUsingDialog(name, data = {}) {
// Set up an observer to wait for calendar(s) to be found, before
// clicking the accept button to subscribe to the calendar(s).
let observer = new MutationObserver(mutationList => {
const observer = new MutationObserver(mutationList => {
mutationList.forEach(async mutation => {
if (mutation.type === "childList") {
acceptButton.click();
@ -308,7 +308,7 @@ async function createCalendarUsingDialog(name, data = {}) {
// Set calendar name.
// Setting the value does not activate the accept button on all platforms,
// so we need to type something in case the field is empty.
let nameInput = doc.querySelector("#local-calendar-name-input");
const nameInput = doc.querySelector("#local-calendar-name-input");
if (nameInput.value == "") {
EventUtils.synthesizeMouseAtCenter(nameInput, {}, win);
EventUtils.sendString(name, win);
@ -318,7 +318,7 @@ async function createCalendarUsingDialog(name, data = {}) {
if (data.showReminders == undefined) {
data.showReminders = true;
}
let localFireAlarmsCheckbox = doc.querySelector("#local-fire-alarms-checkbox");
const localFireAlarmsCheckbox = doc.querySelector("#local-fire-alarms-checkbox");
if (localFireAlarmsCheckbox.checked != data.showReminders) {
EventUtils.synthesizeMouseAtCenter(localFireAlarmsCheckbox, {}, win);
}
@ -327,7 +327,7 @@ async function createCalendarUsingDialog(name, data = {}) {
if (data.email == undefined) {
data.email = "none";
}
let emailIdentityMenulist = doc.querySelector("#email-identity-menulist");
const emailIdentityMenulist = doc.querySelector("#email-identity-menulist");
EventUtils.synthesizeMouseAtCenter(emailIdentityMenulist, {}, win);
emailIdentityMenulist.querySelector("menuitem[value='none']").click();
@ -336,7 +336,7 @@ async function createCalendarUsingDialog(name, data = {}) {
}
}
let dialogWindowPromise = BrowserTestUtils.promiseAlertDialog(
const dialogWindowPromise = BrowserTestUtils.promiseAlertDialog(
null,
"chrome://calendar/content/calendar-creation.xhtml",
{ callback: useDialog }
@ -359,13 +359,13 @@ registerCleanupFunction(async () => {
await closeAddonsTab();
// Close any event or task tabs that are open.
let tabmail = document.getElementById("tabmail");
let eventTabPanelIds = tabmail.tabModes.calendarEvent.tabs.map(tab => tab.panel.id);
let taskTabPanelIds = tabmail.tabModes.calendarTask.tabs.map(tab => tab.panel.id);
for (let id of eventTabPanelIds) {
const tabmail = document.getElementById("tabmail");
const eventTabPanelIds = tabmail.tabModes.calendarEvent.tabs.map(tab => tab.panel.id);
const taskTabPanelIds = tabmail.tabModes.calendarTask.tabs.map(tab => tab.panel.id);
for (const id of eventTabPanelIds) {
await closeCalendarEventTab(id);
}
for (let id of taskTabPanelIds) {
for (const id of taskTabPanelIds) {
await closeCalendarTaskTab(id);
}
Services.prefs.setBoolPref("calendar.item.editInTab", false);

Просмотреть файл

@ -14,7 +14,7 @@ updateAppInfo();
var { cal } = ChromeUtils.importESModule("resource:///modules/calendar/calUtils.sys.mjs");
function createDate(aYear, aMonth, aDay, aHasTime, aHour, aMinute, aSecond, aTimezone) {
let date = Cc["@mozilla.org/calendar/datetime;1"].createInstance(Ci.calIDateTime);
const date = Cc["@mozilla.org/calendar/datetime;1"].createInstance(Ci.calIDateTime);
date.resetTo(
aYear,
aMonth,
@ -30,19 +30,19 @@ function createDate(aYear, aMonth, aDay, aHasTime, aHour, aMinute, aSecond, aTim
function createEventFromIcalString(icalString) {
if (/^BEGIN:VCALENDAR/.test(icalString)) {
let parser = Cc["@mozilla.org/calendar/ics-parser;1"].createInstance(Ci.calIIcsParser);
const parser = Cc["@mozilla.org/calendar/ics-parser;1"].createInstance(Ci.calIIcsParser);
parser.parseString(icalString);
let items = parser.getItems();
const items = parser.getItems();
cal.ASSERT(items.length == 1);
return items[0].QueryInterface(Ci.calIEvent);
}
let event = Cc["@mozilla.org/calendar/event;1"].createInstance(Ci.calIEvent);
const event = Cc["@mozilla.org/calendar/event;1"].createInstance(Ci.calIEvent);
event.icalString = icalString;
return event;
}
function createTodoFromIcalString(icalString) {
let todo = Cc["@mozilla.org/calendar/todo;1"].createInstance(Ci.calITodo);
const todo = Cc["@mozilla.org/calendar/todo;1"].createInstance(Ci.calITodo);
todo.icalString = icalString;
return todo;
}
@ -59,15 +59,15 @@ function getStorageCal() {
do_get_profile();
// create URI
let db = Services.dirsvc.get("TmpD", Ci.nsIFile);
const db = Services.dirsvc.get("TmpD", Ci.nsIFile);
db.append("test_storage.sqlite");
let uri = Services.io.newFileURI(db);
const uri = Services.io.newFileURI(db);
// Make sure timezone service is initialized
Cc["@mozilla.org/calendar/timezone-service;1"].getService(Ci.calIStartupService).startup(null);
// create storage calendar
let stor = Cc["@mozilla.org/calendar/calendar;1?type=storage"].createInstance(
const stor = Cc["@mozilla.org/calendar/calendar;1?type=storage"].createInstance(
Ci.calISyncWriteCalendar
);
stor.uri = uri;
@ -195,19 +195,19 @@ function ics_unfoldline(aLine) {
* @returns The interpolated, dedented string
*/
function dedent(strings, ...values) {
let parts = [];
const parts = [];
// Perform variable interpolation
let minIndent = Infinity;
for (let [i, string] of strings.entries()) {
let innerparts = string.split("\n");
for (const [i, string] of strings.entries()) {
const innerparts = string.split("\n");
if (i == 0) {
innerparts.shift();
}
if (i == strings.length - 1) {
innerparts.pop();
}
for (let [j, ip] of innerparts.entries()) {
let match = ip.match(/^(\s*)\S*/);
for (const [j, ip] of innerparts.entries()) {
const match = ip.match(/^(\s*)\S*/);
if (j != 0) {
minIndent = Math.min(minIndent, match[1].length);
}
@ -232,11 +232,13 @@ function dedent(strings, ...values) {
* Read a JSON file and return the JS object
*/
function readJSONFile(aFile) {
let stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
const stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(
Ci.nsIFileInputStream
);
try {
stream.init(aFile, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, 0);
let bytes = NetUtil.readInputStream(stream, stream.available());
let data = JSON.parse(new TextDecoder().decode(bytes));
const bytes = NetUtil.readInputStream(stream, stream.available());
const data = JSON.parse(new TextDecoder().decode(bytes));
return data;
} catch (ex) {
dump("readJSONFile: Error reading JSON file: " + ex);
@ -267,7 +269,7 @@ function do_load_calmgr(callback) {
}
function do_calendar_startup(callback) {
let obs = {
const obs = {
observe() {
Services.obs.removeObserver(this, "calendar-startup-done");
do_test_finished();
@ -275,7 +277,7 @@ function do_calendar_startup(callback) {
},
};
let startupService = Cc["@mozilla.org/calendar/startup-service;1"].getService(
const startupService = Cc["@mozilla.org/calendar/startup-service;1"].getService(
Ci.nsISupports
).wrappedJSObject;
@ -302,10 +304,10 @@ function do_calendar_startup(callback) {
* @param func The function to monkey patch with.
*/
function monkeyPatch(obj, x, func) {
let old = obj[x];
const old = obj[x];
obj[x] = function () {
let parent = old.bind(obj);
let args = Array.from(arguments);
const parent = old.bind(obj);
const args = Array.from(arguments);
args.unshift(parent);
try {
return func.apply(obj, args);
@ -325,8 +327,8 @@ function monkeyPatch(obj, x, func) {
* @param {string} level - The variable name to refer to report on.
*/
function compareExtractResults(actual, expected, level = "") {
for (let [key, value] of Object.entries(expected)) {
let qualifiedKey = [level, Array.isArray(expected) ? `[${key}]` : `.${key}`].join("");
for (const [key, value] of Object.entries(expected)) {
const qualifiedKey = [level, Array.isArray(expected) ? `[${key}]` : `.${key}`].join("");
if (value && typeof value == "object") {
Assert.ok(actual[key], `${qualifiedKey} is not null`);
compareExtractResults(actual[key], value, qualifiedKey);

Просмотреть файл

@ -17,7 +17,7 @@ async function focusWindow(win) {
async function openExtensionPopup(win, buttonId) {
await focusWindow(win.top);
let actionButton = await TestUtils.waitForCondition(
const actionButton = await TestUtils.waitForCondition(
() =>
win.document.querySelector(
`#${buttonId}, [item-id="${buttonId}"] button`
@ -30,10 +30,10 @@ async function openExtensionPopup(win, buttonId) {
);
EventUtils.synthesizeMouseAtCenter(actionButton, {}, win);
let panel = win.top.document.getElementById(
const panel = win.top.document.getElementById(
"webextension-remote-preload-panel"
);
let browser = panel.querySelector("browser");
const browser = panel.querySelector("browser");
await TestUtils.waitForCondition(
() => browser.clientWidth > 100,
"waiting for browser to resize"
@ -47,10 +47,10 @@ function getSmartServer() {
}
function resetSmartMailboxes() {
let oldServer = getSmartServer();
const oldServer = getSmartServer();
// Clean up any leftover server from an earlier test.
if (oldServer) {
let oldAccount = MailServices.accounts.FindAccountForServer(oldServer);
const oldAccount = MailServices.accounts.FindAccountForServer(oldServer);
MailServices.accounts.removeAccount(oldAccount, false);
}
}
@ -96,7 +96,7 @@ class MenuTestHelper {
* Clicks on the menu and waits for it to open.
*/
async openMenu() {
let shownPromise = BrowserTestUtils.waitForEvent(
const shownPromise = BrowserTestUtils.waitForEvent(
this.menu.menupopup,
"popupshown"
);
@ -137,7 +137,7 @@ class MenuTestHelper {
);
}
if (expected.l10nID) {
let attributes = actual.ownerDocument.l10n.getAttributes(actual);
const attributes = actual.ownerDocument.l10n.getAttributes(actual);
Assert.equal(attributes.id, expected.l10nID, `${actual.id} L10n string`);
Assert.deepEqual(
attributes.args,
@ -161,7 +161,7 @@ class MenuTestHelper {
await BrowserTestUtils.waitForEvent(popup, "popupshown");
}
for (let item of popup.children) {
for (const item of popup.children) {
if (!item.id || item.localName == "menuseparator") {
continue;
}
@ -172,7 +172,7 @@ class MenuTestHelper {
}
continue;
}
let itemData = data[item.id];
const itemData = data[item.id];
this.checkItem(item, itemData);
delete data[item.id];
@ -181,7 +181,7 @@ class MenuTestHelper {
item.openMenu(true);
await this.iterate(item.menupopup, data, itemsMustBeInData);
} else {
for (let hiddenItem of item.querySelectorAll("menu, menuitem")) {
for (const hiddenItem of item.querySelectorAll("menu, menuitem")) {
delete data[hiddenItem.id];
}
}
@ -200,8 +200,8 @@ class MenuTestHelper {
*/
async testAllItems(mode) {
// Get the data for just this mode.
let data = {};
for (let [id, itemData] of Object.entries(this.baseData)) {
const data = {};
for (const [id, itemData] of Object.entries(this.baseData)) {
data[id] = {
...itemData,
hidden: itemData.hidden === true || itemData.hidden?.includes(mode),
@ -216,7 +216,7 @@ class MenuTestHelper {
await this.iterate(this.menu.menupopup, data, true);
// Report any unexpected items.
for (let id of Object.keys(data)) {
for (const id of Object.keys(data)) {
Assert.report(true, undefined, undefined, `extra item ${id} in data`);
}
}
@ -230,12 +230,12 @@ class MenuTestHelper {
await this.openMenu();
await this.iterate(this.menu.menupopup, data);
for (let id of Object.keys(data)) {
for (const id of Object.keys(data)) {
Assert.report(true, undefined, undefined, `extra item ${id} in data`);
}
if (this.menu.menupopup.state != "closed") {
let hiddenPromise = BrowserTestUtils.waitForEvent(
const hiddenPromise = BrowserTestUtils.waitForEvent(
this.menu.menupopup,
"popuphidden"
);
@ -255,11 +255,11 @@ class MenuTestHelper {
*/
async activateItem(menuItemID, data) {
await this.openMenu();
let hiddenPromise = BrowserTestUtils.waitForEvent(
const hiddenPromise = BrowserTestUtils.waitForEvent(
this.menu.menupopup,
"popuphidden"
);
let item = document.getElementById(menuItemID);
const item = document.getElementById(menuItemID);
if (data) {
this.checkItem(item, data);
}
@ -326,7 +326,7 @@ registerCleanupFunction(function () {
"view"
);
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
if (tabmail.tabInfo.length > 1) {
Assert.report(
true,
@ -337,7 +337,7 @@ registerCleanupFunction(function () {
tabmail.closeOtherTabs(0);
}
for (let server of MailServices.accounts.allServers) {
for (const server of MailServices.accounts.allServers) {
Assert.report(
true,
undefined,
@ -346,7 +346,7 @@ registerCleanupFunction(function () {
);
MailServices.accounts.removeIncomingServer(server, false);
}
for (let account of MailServices.accounts.accounts) {
for (const account of MailServices.accounts.accounts) {
Assert.report(
true,
undefined,
@ -363,7 +363,7 @@ registerCleanupFunction(function () {
Services.focus.focusedWindow = window;
// Focus an element in the main window, then blur it again to avoid it
// hijacking keypresses.
let mainWindowElement = document.getElementById("button-appmenu");
const mainWindowElement = document.getElementById("button-appmenu");
mainWindowElement.focus();
mainWindowElement.blur();
});

Просмотреть файл

@ -3,8 +3,8 @@
* file, you can obtain one at http://mozilla.org/MPL/2.0/. */
async function sub_test_toolbar_alignment(drawInTitlebar, hideMenu) {
let menubar = document.getElementById("toolbar-menubar");
let tabsInTitlebar =
const menubar = document.getElementById("toolbar-menubar");
const tabsInTitlebar =
document.documentElement.getAttribute("tabsintitlebar") == "true";
Assert.equal(tabsInTitlebar, drawInTitlebar);
@ -17,7 +17,7 @@ async function sub_test_toolbar_alignment(drawInTitlebar, hideMenu) {
}
await new Promise(resolve => requestAnimationFrame(resolve));
let size = document
const size = document
.getElementById("spacesToolbar")
.getBoundingClientRect().width;

Просмотреть файл

@ -22,7 +22,7 @@ const l10n = new Localization([
var { CustomizableUITestUtils } = ChromeUtils.import(
"resource://testing-common/CustomizableUITestUtils.jsm"
);
let gCUITestUtils = new CustomizableUITestUtils(window);
const gCUITestUtils = new CustomizableUITestUtils(window);
const { PermissionTestUtils } = ChromeUtils.import(
"resource://testing-common/PermissionTestUtils.jsm"
@ -40,7 +40,7 @@ const { PermissionTestUtils } = ChromeUtils.import(
function promisePopupNotificationShown(name) {
return new Promise(resolve => {
function popupshown() {
let notification = PopupNotifications.getNotification(name);
const notification = PopupNotifications.getNotification(name);
if (!notification) {
return;
}
@ -70,7 +70,7 @@ function promisePopupNotificationShown(name) {
*/
function promiseInstallEvent(addon, event) {
return new Promise(resolve => {
let listener = {};
const listener = {};
listener[event] = (install, arg) => {
if (install.addon.id == addon.id) {
AddonManager.removeInstallListener(listener);
@ -94,10 +94,10 @@ function promiseInstallEvent(addon, event) {
* object as the resolution value.
*/
async function promiseInstallAddon(url, telemetryInfo) {
let install = await AddonManager.getInstallForURL(url, { telemetryInfo });
const install = await AddonManager.getInstallForURL(url, { telemetryInfo });
install.install();
let addon = await new Promise(resolve => {
const addon = await new Promise(resolve => {
install.addListener({
onInstallEnded(_install, _addon) {
resolve(_addon);
@ -132,8 +132,8 @@ async function promiseInstallAddon(url, telemetryInfo) {
* Resolves when the extension has ben updated.
*/
async function waitForUpdate(addon) {
let installPromise = promiseInstallEvent(addon, "onInstallEnded");
let readyPromise = new Promise(resolve => {
const installPromise = promiseInstallEvent(addon, "onInstallEnded");
const readyPromise = new Promise(resolve => {
function listener(event, extension) {
if (extension.id == addon.id) {
Management.off("ready", listener);
@ -143,7 +143,7 @@ async function waitForUpdate(addon) {
Management.on("ready", listener);
});
let [newAddon] = await Promise.all([installPromise, readyPromise]);
const [newAddon] = await Promise.all([installPromise, readyPromise]);
return newAddon;
}
@ -196,13 +196,15 @@ async function checkNotification(
sideloaded,
warning = false
) {
let icon = panel.getAttribute("icon");
let ul = document.getElementById("addon-webext-perm-list");
let singleDataEl = document.getElementById("addon-webext-perm-single-entry");
let experimentWarning = document.getElementById(
const icon = panel.getAttribute("icon");
const ul = document.getElementById("addon-webext-perm-list");
const singleDataEl = document.getElementById(
"addon-webext-perm-single-entry"
);
const experimentWarning = document.getElementById(
"addon-webext-experiment-warning"
);
let learnMoreLink = document.getElementById("addon-webext-perm-info");
const learnMoreLink = document.getElementById("addon-webext-perm-info");
if (checkIcon instanceof RegExp) {
ok(
@ -270,18 +272,18 @@ async function testInstallMethod(installFn) {
],
});
let testURI = makeURI("https://example.com/");
const testURI = makeURI("https://example.com/");
PermissionTestUtils.add(testURI, "install", Services.perms.ALLOW_ACTION);
registerCleanupFunction(() => PermissionTestUtils.remove(testURI, "install"));
async function runOnce(filename, cancel) {
let tab = openContentTab("about:blank");
const tab = openContentTab("about:blank");
if (tab.browser.webProgress.isLoadingDocument) {
await BrowserTestUtils.browserLoaded(tab.browser);
}
let installPromise = new Promise(resolve => {
let listener = {
const installPromise = new Promise(resolve => {
const listener = {
onDownloadCancelled() {
AddonManager.removeInstallListener(listener);
resolve(false);
@ -310,7 +312,7 @@ async function testInstallMethod(installFn) {
AddonManager.addInstallListener(listener);
});
let installMethodPromise = installFn(filename);
const installMethodPromise = installFn(filename);
let panel = await promisePopupNotificationShown("addon-webext-permissions");
if (filename == PERMS_XPI) {
@ -337,7 +339,8 @@ async function testInstallMethod(installFn) {
} catch (err) {}
} else {
// Look for post-install notification
let postInstallPromise = promisePopupNotificationShown("addon-installed");
const postInstallPromise =
promisePopupNotificationShown("addon-installed");
panel.button.click();
// Press OK on the post-install notification
@ -347,8 +350,8 @@ async function testInstallMethod(installFn) {
await installMethodPromise;
}
let result = await installPromise;
let addon = await AddonManager.getAddonByID(ID);
const result = await installPromise;
const addon = await AddonManager.getAddonByID(ID);
if (cancel) {
ok(!result, "Installation was cancelled");
is(addon, null, "Extension is not installed");
@ -358,7 +361,7 @@ async function testInstallMethod(installFn) {
await addon.uninstall();
}
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
tabmail.closeOtherTabs(tabmail.tabInfo[0]);
}
@ -409,7 +412,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
let manualUpdatePromise;
if (!autoUpdate) {
manualUpdatePromise = new Promise(resolve => {
let listener = {
const listener = {
onNewInstall() {
AddonManager.removeInstallListener(listener);
resolve();
@ -419,25 +422,29 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
});
}
let promise = checkFn(win, addon);
const promise = checkFn(win, addon);
if (manualUpdatePromise) {
await manualUpdatePromise;
let doc = win.document;
const doc = win.document;
if (win.gViewController.currentViewId !== "addons://updates/available") {
let showUpdatesBtn = doc.querySelector("addon-updates-message").button;
const showUpdatesBtn = doc.querySelector(
"addon-updates-message"
).button;
await TestUtils.waitForCondition(() => {
return !showUpdatesBtn.hidden;
}, "Wait for show updates button");
let viewChanged = waitAboutAddonsViewLoaded(doc);
const viewChanged = waitAboutAddonsViewLoaded(doc);
showUpdatesBtn.click();
await viewChanged;
}
let card = await TestUtils.waitForCondition(() => {
const card = await TestUtils.waitForCondition(() => {
return doc.querySelector(`addon-card[addon-id="${ID}"]`);
}, `Wait addon card for "${ID}"`);
let updateBtn = card.querySelector('panel-item[action="install-update"]');
const updateBtn = card.querySelector(
'panel-item[action="install-update"]'
);
ok(updateBtn, `Found update button for "${ID}"`);
updateBtn.click();
}
@ -455,7 +462,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
ok(addon, "Addon was installed");
is(addon.version, "1.0", "Version 1 of the addon is installed");
let win = await openAddonsMgr("addons://list/extension");
const win = await openAddonsMgr("addons://list/extension");
await waitAboutAddonsViewLoaded(win.document);
@ -465,7 +472,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
let panel = await popupPromise;
// Click the cancel button, wait to see the cancel event
let cancelPromise = promiseInstallEvent(addon, "onInstallCancelled");
const cancelPromise = promiseInstallEvent(addon, "onInstallCancelled");
panel.secondaryButton.click();
await cancelPromise;
@ -480,7 +487,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
checkPromise = (await triggerUpdate(win, addon)).promise;
// This time, accept the upgrade
let updatePromise = waitForUpdate(addon);
const updatePromise = waitForUpdate(addon);
panel = await popupPromise;
panel.button.click();
@ -489,7 +496,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
await checkPromise;
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
tabmail.closeTab(tabmail.currentTabInfo);
await addon.uninstall();
await SpecialPowers.popPrefEnv();
@ -536,7 +543,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
"Every update telemetry event should have the update_from extra var 'user'"
);
let hasPermissionsExtras = collectedUpdateEvents
const hasPermissionsExtras = collectedUpdateEvents
.filter(evt => {
return evt.extra.step === "permissions_prompt";
})
@ -549,7 +556,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
"Every 'permissions_prompt' update telemetry event should have the permissions extra vars"
);
let hasDownloadTimeExtras = collectedUpdateEvents
const hasDownloadTimeExtras = collectedUpdateEvents
.filter(evt => {
return evt.extra.step === "download_completed";
})
@ -575,8 +582,8 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
// to ensure it gets called before the final check is performed.
let testCleanup;
add_task(async function () {
let addons = await AddonManager.getAllAddons();
let existingAddons = new Set(addons.map(a => a.id));
const addons = await AddonManager.getAllAddons();
const existingAddons = new Set(addons.map(a => a.id));
registerCleanupFunction(async function () {
if (testCleanup) {
@ -584,7 +591,7 @@ add_task(async function () {
testCleanup = null;
}
for (let addon of await AddonManager.getAllAddons()) {
for (const addon of await AddonManager.getAllAddons()) {
// Builtin search extensions may have been installed by SearchService
// during the test run, ignore those.
if (
@ -606,14 +613,14 @@ registerCleanupFunction(() => {
ok(PanelUI.panel.state == "closed", "Main menu is closed.");
// Any opened tabs should be closed by the end of the test.
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
is(tabmail.tabInfo.length, 1, "All tabs are closed.");
tabmail.closeOtherTabs(0);
});
let collectedTelemetry = [];
function hookExtensionsTelemetry() {
let originalHistogram = ExtensionsUI.histogram;
const originalHistogram = ExtensionsUI.histogram;
ExtensionsUI.histogram = {
add(value) {
collectedTelemetry.push(value);

Просмотреть файл

@ -29,7 +29,7 @@ registerCleanupFunction(function () {
2,
"Only Personal ab and Collected Addresses should be left."
);
for (let directory of MailServices.ab.directories) {
for (const directory of MailServices.ab.directories) {
if (
directory.dirPrefId == "ldap_2.servers.history" ||
directory.dirPrefId == "ldap_2.servers.pab"
@ -57,7 +57,7 @@ registerCleanupFunction(function () {
Services.focus.focusedWindow = window;
// Focus an element in the main window, then blur it again to avoid it
// hijacking keypresses.
let mainWindowElement = document.getElementById("button-appmenu");
const mainWindowElement = document.getElementById("button-appmenu");
mainWindowElement.focus();
mainWindowElement.blur();
// Reset the window to its default size.
@ -76,27 +76,27 @@ async function openAddressBookWindow() {
}
function closeAddressBookWindow() {
let abTab = getAddressBookTab();
const abTab = getAddressBookTab();
if (abTab) {
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
tabmail.closeTab(abTab);
}
}
function getAddressBookTab() {
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
return tabmail.tabInfo.find(
t => t.browser?.currentURI.spec == "about:addressbook"
);
}
function getAddressBookWindow() {
let tab = getAddressBookTab();
const tab = getAddressBookTab();
return tab?.browser.contentWindow;
}
async function openAllAddressBooks() {
let abWindow = getAddressBookWindow();
const abWindow = getAddressBookWindow();
EventUtils.synthesizeMouseAtCenter(
abWindow.document.querySelector("#books > li"),
{},
@ -106,33 +106,33 @@ async function openAllAddressBooks() {
}
function openDirectory(directory) {
let abWindow = getAddressBookWindow();
let row = abWindow.booksList.getRowForUID(directory.UID);
const abWindow = getAddressBookWindow();
const row = abWindow.booksList.getRowForUID(directory.UID);
EventUtils.synthesizeMouseAtCenter(row.querySelector("span"), {}, abWindow);
}
function createAddressBook(dirName, type = Ci.nsIAbManager.JS_DIRECTORY_TYPE) {
let prefName = MailServices.ab.newAddressBook(dirName, null, type);
const prefName = MailServices.ab.newAddressBook(dirName, null, type);
return MailServices.ab.getDirectoryFromId(prefName);
}
async function createAddressBookWithUI(abName) {
let newAddressBookPromise = promiseLoadSubDialog(
const newAddressBookPromise = promiseLoadSubDialog(
"chrome://messenger/content/addressbook/abAddressBookNameDialog.xhtml"
);
let abWindow = getAddressBookWindow();
const abWindow = getAddressBookWindow();
EventUtils.synthesizeMouseAtCenter(
abWindow.document.getElementById("toolbarCreateBook"),
{},
abWindow
);
let abNameDialog = await newAddressBookPromise;
const abNameDialog = await newAddressBookPromise;
EventUtils.sendString(abName, abNameDialog);
abNameDialog.document.querySelector("dialog").getButton("accept").click();
let addressBook = MailServices.ab.directories.find(
const addressBook = MailServices.ab.directories.find(
directory => directory.dirName == abName
);
@ -145,7 +145,7 @@ async function createAddressBookWithUI(abName) {
}
function createContact(firstName, lastName, displayName, primaryEmail) {
let contact = Cc["@mozilla.org/addressbook/cardproperty;1"].createInstance(
const contact = Cc["@mozilla.org/addressbook/cardproperty;1"].createInstance(
Ci.nsIAbCard
);
contact.displayName = displayName ?? `${firstName} ${lastName}`;
@ -157,9 +157,9 @@ function createContact(firstName, lastName, displayName, primaryEmail) {
}
function createMailingList(name) {
let list = Cc["@mozilla.org/addressbook/directoryproperty;1"].createInstance(
Ci.nsIAbDirectory
);
const list = Cc[
"@mozilla.org/addressbook/directoryproperty;1"
].createInstance(Ci.nsIAbDirectory);
list.isMailList = true;
list.dirName = name;
return list;
@ -168,26 +168,26 @@ function createMailingList(name) {
async function createMailingListWithUI(mlParent, mlName) {
openDirectory(mlParent);
let newAddressBookPromise = promiseLoadSubDialog(
const newAddressBookPromise = promiseLoadSubDialog(
"chrome://messenger/content/addressbook/abMailListDialog.xhtml"
);
let abWindow = getAddressBookWindow();
const abWindow = getAddressBookWindow();
EventUtils.synthesizeMouseAtCenter(
abWindow.document.getElementById("toolbarCreateList"),
{},
abWindow
);
let abListDialog = await newAddressBookPromise;
let abListDocument = abListDialog.document;
const abListDialog = await newAddressBookPromise;
const abListDocument = abListDialog.document;
await new Promise(resolve => abListDialog.setTimeout(resolve));
abListDocument.getElementById("abPopup").value = mlParent.URI;
abListDocument.getElementById("ListName").value = mlName;
abListDocument.querySelector("dialog").getButton("accept").click();
let list = mlParent.childNodes.find(list => list.dirName == mlName);
const list = mlParent.childNodes.find(list => list.dirName == mlName);
Assert.ok(list, "a new list was created");
@ -198,9 +198,9 @@ async function createMailingListWithUI(mlParent, mlName) {
}
function checkDirectoryDisplayed(directory) {
let abWindow = getAddressBookWindow();
let booksList = abWindow.document.getElementById("books");
let cardsList = abWindow.cardsPane.cardsList;
const abWindow = getAddressBookWindow();
const booksList = abWindow.document.getElementById("books");
const cardsList = abWindow.cardsPane.cardsList;
if (directory) {
Assert.equal(
@ -221,10 +221,10 @@ function checkCardsListed(...expectedCards) {
)
);
let abWindow = getAddressBookWindow();
let cardsList = abWindow.document.getElementById("cards");
const abWindow = getAddressBookWindow();
const cardsList = abWindow.document.getElementById("cards");
for (let i = 0; i < expectedCards.length; i++) {
let row = cardsList.getRowAtIndex(i);
const row = cardsList.getRowAtIndex(i);
Assert.equal(
row.classList.contains("MailList"),
expectedCards[i].isMailList,
@ -246,9 +246,9 @@ function checkCardsListed(...expectedCards) {
}
function checkNamesListed(...expectedNames) {
let abWindow = getAddressBookWindow();
let cardsList = abWindow.document.getElementById("cards");
let expectedCount = expectedNames.length;
const abWindow = getAddressBookWindow();
const cardsList = abWindow.document.getElementById("cards");
const expectedCount = expectedNames.length;
Assert.equal(
cardsList.view.rowCount,
@ -272,8 +272,8 @@ function checkNamesListed(...expectedNames) {
}
function checkPlaceholders(expectedVisible = []) {
let abWindow = getAddressBookWindow();
let placeholder = abWindow.cardsPane.cardsList.placeholder;
const abWindow = getAddressBookWindow();
const placeholder = abWindow.cardsPane.cardsList.placeholder;
if (!expectedVisible.length) {
Assert.ok(
@ -283,8 +283,8 @@ function checkPlaceholders(expectedVisible = []) {
return;
}
for (let element of placeholder.children) {
let id = element.id;
for (const element of placeholder.children) {
const id = element.id;
if (expectedVisible.includes(id)) {
Assert.ok(BrowserTestUtils.is_visible(element), `${id} is visible`);
} else {
@ -301,10 +301,10 @@ function checkPlaceholders(expectedVisible = []) {
* menu closes.
*/
async function showBooksContext(index, idToActivate) {
let abWindow = getAddressBookWindow();
let abDocument = abWindow.document;
let booksList = abWindow.booksList;
let menu = abDocument.getElementById("bookContext");
const abWindow = getAddressBookWindow();
const abDocument = abWindow.document;
const booksList = abWindow.booksList;
const menu = abDocument.getElementById("bookContext");
EventUtils.synthesizeMouseAtCenter(
booksList
@ -330,10 +330,10 @@ async function showBooksContext(index, idToActivate) {
* menu closes.
*/
async function showCardsContext(index, idToActivate) {
let abWindow = getAddressBookWindow();
let abDocument = abWindow.document;
let cardsList = abWindow.cardsPane.cardsList;
let menu = abDocument.getElementById("cardContext");
const abWindow = getAddressBookWindow();
const abDocument = abWindow.document;
const cardsList = abWindow.cardsPane.cardsList;
const menu = abDocument.getElementById("cardContext");
EventUtils.synthesizeMouseAtCenter(
cardsList.getRowAtIndex(index),
@ -358,12 +358,12 @@ async function showCardsContext(index, idToActivate) {
* after this search. If no cards are given, checks the placeholder is shown.
*/
async function doSearch(searchString, ...expectedCards) {
let abWindow = getAddressBookWindow();
let abDocument = abWindow.document;
let searchBox = abDocument.getElementById("searchInput");
let cardsList = abWindow.cardsPane.cardsList;
const abWindow = getAddressBookWindow();
const abDocument = abWindow.document;
const searchBox = abDocument.getElementById("searchInput");
const cardsList = abWindow.cardsPane.cardsList;
let viewChangePromise = BrowserTestUtils.waitForEvent(
const viewChangePromise = BrowserTestUtils.waitForEvent(
cardsList,
"viewchange"
);
@ -387,11 +387,11 @@ async function doSearch(searchString, ...expectedCards) {
* @param {string} value - The value attribute of the item to activate.
*/
async function showSortMenu(name, value) {
let abWindow = getAddressBookWindow();
let abDocument = abWindow.document;
const abWindow = getAddressBookWindow();
const abDocument = abWindow.document;
let displayButton = abDocument.getElementById("displayButton");
let sortContext = abDocument.getElementById("sortContext");
const displayButton = abDocument.getElementById("displayButton");
const sortContext = abDocument.getElementById("sortContext");
EventUtils.synthesizeMouseAtCenter(displayButton, {}, abWindow);
await BrowserTestUtils.waitForPopupEvent(sortContext, "shown");
sortContext.activateItem(
@ -410,12 +410,12 @@ async function showSortMenu(name, value) {
* @param {string} value - The value attribute of the item to activate.
*/
async function showPickerMenu(name, value) {
let abWindow = getAddressBookWindow();
let cardsHeader = abWindow.cardsPane.table.header;
let pickerButton = cardsHeader.querySelector(
const abWindow = getAddressBookWindow();
const cardsHeader = abWindow.cardsPane.table.header;
const pickerButton = cardsHeader.querySelector(
`th[is="tree-view-table-column-picker"] button`
);
let menupopup = cardsHeader.querySelector(
const menupopup = cardsHeader.querySelector(
`th[is="tree-view-table-column-picker"] menupopup`
);
EventUtils.synthesizeMouseAtCenter(pickerButton, {}, abWindow);
@ -431,11 +431,11 @@ async function showPickerMenu(name, value) {
}
async function toggleLayout() {
let abWindow = getAddressBookWindow();
let abDocument = abWindow.document;
const abWindow = getAddressBookWindow();
const abDocument = abWindow.document;
let displayButton = abDocument.getElementById("displayButton");
let sortContext = abDocument.getElementById("sortContext");
const displayButton = abDocument.getElementById("displayButton");
const sortContext = abDocument.getElementById("sortContext");
EventUtils.synthesizeMouseAtCenter(displayButton, {}, abWindow);
await BrowserTestUtils.waitForPopupEvent(sortContext, "shown");
sortContext.activateItem(abDocument.getElementById("sortContextTableLayout"));
@ -445,10 +445,10 @@ async function toggleLayout() {
async function checkComposeWindow(composeWindow, ...expectedAddresses) {
await BrowserTestUtils.waitForEvent(composeWindow, "compose-editor-ready");
let composeDocument = composeWindow.document;
let toAddrRow = composeDocument.getElementById("addressRowTo");
const composeDocument = composeWindow.document;
const toAddrRow = composeDocument.getElementById("addressRowTo");
let pills = toAddrRow.querySelectorAll("mail-address-pill");
const pills = toAddrRow.querySelectorAll("mail-address-pill");
Assert.equal(pills.length, expectedAddresses.length);
for (let i = 0; i < expectedAddresses.length; i++) {
Assert.equal(pills[i].label, expectedAddresses[i]);
@ -461,13 +461,13 @@ async function checkComposeWindow(composeWindow, ...expectedAddresses) {
}
function promiseDirectoryRemoved(uri) {
let removePromise = TestUtils.topicObserved("addrbook-directory-deleted");
const removePromise = TestUtils.topicObserved("addrbook-directory-deleted");
MailServices.ab.deleteAddressBook(uri);
return removePromise;
}
function promiseLoadSubDialog(url) {
let abWindow = getAddressBookWindow();
const abWindow = getAddressBookWindow();
return new Promise((resolve, reject) => {
abWindow.SubDialog._dialogStack.addEventListener(
@ -498,11 +498,11 @@ function promiseLoadSubDialog(url) {
);
// Check that stylesheets were injected
let expectedStyleSheetURLs =
const expectedStyleSheetURLs =
aEvent.detail.dialog._injectedStyleSheets.slice(0);
for (let styleSheet of aEvent.detail.dialog._frame.contentDocument
for (const styleSheet of aEvent.detail.dialog._frame.contentDocument
.styleSheets) {
let i = expectedStyleSheetURLs.indexOf(styleSheet.href);
const i = expectedStyleSheetURLs.indexOf(styleSheet.href);
if (i >= 0) {
info("found " + styleSheet.href);
expectedStyleSheetURLs.splice(i, 1);
@ -523,15 +523,15 @@ function promiseLoadSubDialog(url) {
}
function formatVCard(strings, ...values) {
let arr = [];
for (let str of strings) {
const arr = [];
for (const str of strings) {
arr.push(str);
arr.push(values.shift());
}
let lines = arr.join("").split("\n");
let indent = lines[1].length - lines[1].trimLeft().length;
let outLines = [];
for (let line of lines) {
const lines = arr.join("").split("\n");
const indent = lines[1].length - lines[1].trimLeft().length;
const outLines = [];
for (const line of lines) {
if (line.length > 0) {
outLines.push(line.substring(indent) + "\r\n");
}

Просмотреть файл

@ -7,11 +7,11 @@ var { MailServices } = ChromeUtils.import(
);
add_setup(async function () {
let gAccount = createAccount();
const gAccount = createAccount();
addIdentity(gAccount);
let rootFolder = gAccount.incomingServer.rootFolder;
const rootFolder = gAccount.incomingServer.rootFolder;
let about3Pane = document.getElementById("tabmail").currentAbout3Pane;
const about3Pane = document.getElementById("tabmail").currentAbout3Pane;
about3Pane.displayFolder(rootFolder.URI);
await new Promise(resolve => executeSoon(resolve));
});
@ -22,7 +22,7 @@ function createAccount() {
});
MailServices.accounts.createLocalMailAccount();
let account = MailServices.accounts.accounts[0];
const account = MailServices.accounts.accounts[0];
info(`Created account ${account.toString()}`);
return account;
@ -34,7 +34,7 @@ function cleanUpAccount(account) {
}
function addIdentity(account) {
let identity = MailServices.accounts.createIdentity();
const identity = MailServices.accounts.createIdentity();
identity.email = "mochitest@localhost";
account.addIdentity(identity);
account.defaultIdentity = identity;

Просмотреть файл

@ -14,7 +14,7 @@ PoliciesPrefTracker.start();
async function setupPolicyEngineWithJson(json, customSchema) {
PoliciesPrefTracker.restoreDefaultValues();
if (typeof json != "object") {
let filePath = getTestFilePath(json ? json : "non-existing-file.json");
const filePath = getTestFilePath(json ? json : "non-existing-file.json");
return EnterprisePolicyTesting.setupPolicyEngineWithJson(
filePath,
customSchema
@ -32,12 +32,12 @@ function checkUnlockedPref(prefName, prefValue) {
}
async function withNewTab(options, taskFn) {
let tab = window.openContentTab(options.url);
const tab = window.openContentTab(options.url);
await BrowserTestUtils.browserLoaded(tab.browser);
let result = await taskFn(tab.browser);
const result = await taskFn(tab.browser);
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
tabmail.closeTab(tab);
return Promise.resolve(result);
}
@ -69,7 +69,7 @@ registerCleanupFunction(async function policies_headjs_finishWithCleanSlate() {
function waitForAddonInstall(addon_id) {
return new Promise(resolve => {
let listener = {
const listener = {
onInstallEnded(install, addon) {
if (addon.id == addon_id) {
AddonManager.removeInstallListener(listener);
@ -91,7 +91,7 @@ function waitForAddonInstall(addon_id) {
function waitForAddonUninstall(addon_id) {
return new Promise(resolve => {
let listener = {};
const listener = {};
listener.onUninstalled = addon => {
if (addon.id == addon_id) {
AddonManager.removeAddonListener(listener);

Просмотреть файл

@ -33,14 +33,14 @@ updateAppInfo({
});
// This initializes the policy engine for xpcshell tests
let policies = Cc["@mozilla.org/enterprisepolicies;1"].getService(
const policies = Cc["@mozilla.org/enterprisepolicies;1"].getService(
Ci.nsIObserver
);
policies.observe(null, "policies-startup", null);
async function setupPolicyEngineWithJson(json, customSchema) {
if (typeof json != "object") {
let filePath = do_get_file(json ? json : "non-existing-file.json").path;
const filePath = do_get_file(json ? json : "non-existing-file.json").path;
return EnterprisePolicyTesting.setupPolicyEngineWithJson(
filePath,
customSchema
@ -62,7 +62,7 @@ async function setupPolicyEngineWithJson(json, customSchema) {
async function setupPolicyEngineWithJsonWithSearch(json, customSchema) {
Services.search.wrappedJSObject.reset();
if (typeof json != "object") {
let filePath = do_get_file(json ? json : "non-existing-file.json").path;
const filePath = do_get_file(json ? json : "non-existing-file.json").path;
await EnterprisePolicyTesting.setupPolicyEngineWithJson(
filePath,
customSchema
@ -70,7 +70,7 @@ async function setupPolicyEngineWithJsonWithSearch(json, customSchema) {
} else {
await EnterprisePolicyTesting.setupPolicyEngineWithJson(json, customSchema);
}
let settingsWritten = lazy.SearchTestUtils.promiseSearchNotification(
const settingsWritten = lazy.SearchTestUtils.promiseSearchNotification(
"write-settings-to-disk-complete"
);
await Services.search.init();
@ -120,8 +120,8 @@ function checkClearPref(prefName, prefValue) {
}
function checkDefaultPref(prefName, prefValue) {
let defaultPrefBranch = Services.prefs.getDefaultBranch("");
let prefType = defaultPrefBranch.getPrefType(prefName);
const defaultPrefBranch = Services.prefs.getDefaultBranch("");
const prefType = defaultPrefBranch.getPrefType(prefName);
notEqual(
prefType,
Services.prefs.PREF_INVALID,
@ -130,8 +130,8 @@ function checkDefaultPref(prefName, prefValue) {
}
function checkUnsetPref(prefName) {
let defaultPrefBranch = Services.prefs.getDefaultBranch("");
let prefType = defaultPrefBranch.getPrefType(prefName);
const defaultPrefBranch = Services.prefs.getDefaultBranch("");
const prefType = defaultPrefBranch.getPrefType(prefName);
equal(
prefType,
Services.prefs.PREF_INVALID,

Просмотреть файл

@ -45,18 +45,18 @@ PromiseTestUtils.allowMatchingRejectionsGlobally(
// Adjust timeout to take care of code coverage runs and fission runs to be a
// lot slower.
let originalRequestLongerTimeout = requestLongerTimeout;
const originalRequestLongerTimeout = requestLongerTimeout;
// eslint-disable-next-line no-global-assign
requestLongerTimeout = factor => {
let ccovMultiplier = AppConstants.MOZ_CODE_COVERAGE ? 2 : 1;
let fissionMultiplier = SpecialPowers.useRemoteSubframes ? 2 : 1;
const ccovMultiplier = AppConstants.MOZ_CODE_COVERAGE ? 2 : 1;
const fissionMultiplier = SpecialPowers.useRemoteSubframes ? 2 : 1;
originalRequestLongerTimeout(ccovMultiplier * fissionMultiplier * factor);
};
requestLongerTimeout(1);
add_setup(async () => {
await check3PaneState(true, true);
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
if (tabmail.tabInfo.length > 1) {
info(`Will close ${tabmail.tabInfo.length - 1} tabs left over from others`);
for (let i = tabmail.tabInfo.length - 1; i > 0; i--) {
@ -66,7 +66,7 @@ add_setup(async () => {
}
});
registerCleanupFunction(() => {
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
is(tabmail.tabInfo.length, 1, "Only one tab open at end of test");
while (tabmail.tabInfo.length > 1) {
@ -78,7 +78,7 @@ registerCleanupFunction(() => {
Services.focus.focusedWindow = window;
// Focus an element in the main window, then blur it again to avoid it
// hijacking keypresses.
let mainWindowElement = document.getElementById("button-appmenu");
const mainWindowElement = document.getElementById("button-appmenu");
mainWindowElement.focus();
mainWindowElement.blur();
@ -89,7 +89,7 @@ registerCleanupFunction(() => {
// test loaded an extension with a browser_action without setting "useAddonManager"
// to either "temporary" or "permanent", which triggers onUninstalled to be
// called on extension unload.
let cachedAllowedSpaces = getCachedAllowedSpaces();
const cachedAllowedSpaces = getCachedAllowedSpaces();
is(
cachedAllowedSpaces.size,
0,
@ -119,8 +119,8 @@ async function enforceState(state) {
}
async function check3PaneState(folderPaneOpen = null, messagePaneOpen = null) {
let tabmail = document.getElementById("tabmail");
let tab = tabmail.currentTabInfo;
const tabmail = document.getElementById("tabmail");
const tab = tabmail.currentTabInfo;
if (tab.chromeBrowser.contentDocument.readyState != "complete") {
await BrowserTestUtils.waitForEvent(
tab.chromeBrowser.contentWindow,
@ -128,7 +128,7 @@ async function check3PaneState(folderPaneOpen = null, messagePaneOpen = null) {
);
}
let { paneLayout } = tabmail.currentAbout3Pane;
const { paneLayout } = tabmail.currentAbout3Pane;
if (folderPaneOpen !== null) {
Assert.equal(
paneLayout.folderPaneVisible,
@ -173,21 +173,21 @@ function cleanUpAccount(account) {
// If the current displayed message/folder belongs to the account to be removed,
// select the root folder, otherwise the removal of this account will trigger
// a "shouldn't have any listeners left" assertion in nsMsgDatabase.cpp.
let [folder] = window.GetSelectedMsgFolders();
const [folder] = window.GetSelectedMsgFolders();
if (folder && folder.server && folder.server == account.incomingServer) {
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
tabmail.currentAbout3Pane.displayFolder(folder.server.rootFolder.URI);
}
let serverKey = account.incomingServer.key;
let serverType = account.incomingServer.type;
const serverKey = account.incomingServer.key;
const serverType = account.incomingServer.type;
info(
`Cleaning up ${serverType} account ${account.key} and server ${serverKey}`
);
MailServices.accounts.removeAccount(account, true);
try {
let server = MailServices.accounts.getIncomingServer(serverKey);
const server = MailServices.accounts.getIncomingServer(serverKey);
if (server) {
info(`Cleaning up leftover ${serverType} server ${serverKey}`);
MailServices.accounts.removeIncomingServer(server, false);
@ -196,7 +196,7 @@ function cleanUpAccount(account) {
}
function addIdentity(account, email = "mochitest@localhost") {
let identity = MailServices.accounts.createIdentity();
const identity = MailServices.accounts.createIdentity();
identity.email = email;
account.addIdentity(identity);
if (!account.defaultIdentity) {
@ -219,8 +219,9 @@ function createMessages(folder, makeMessagesArg) {
createMessages.messageGenerator = new MessageGenerator();
}
let messages = createMessages.messageGenerator.makeMessages(makeMessagesArg);
let messageStrings = messages.map(message => message.toMboxString());
const messages =
createMessages.messageGenerator.makeMessages(makeMessagesArg);
const messageStrings = messages.map(message => message.toMboxString());
folder.QueryInterface(Ci.nsIMsgLocalMailFolder);
folder.addMessageBatch(messageStrings);
}
@ -230,7 +231,7 @@ async function createMessageFromFile(folder, path) {
// A cheap hack to make this acceptable to addMessageBatch. It works for
// existing uses but may not work for future uses.
let fromAddress = message.match(/From: .* <(.*@.*)>/)[0];
const fromAddress = message.match(/From: .* <(.*@.*)>/)[0];
message = `From ${fromAddress}\r\n${message}`;
folder.QueryInterface(Ci.nsIMsgLocalMailFolder);
@ -249,7 +250,7 @@ async function focusWindow(win) {
return;
}
let promise = new Promise(resolve => {
const promise = new Promise(resolve => {
win.addEventListener(
"focus",
function () {
@ -268,7 +269,7 @@ function promisePopupShown(popup) {
if (popup.state == "open") {
resolve();
} else {
let onPopupShown = event => {
const onPopupShown = event => {
popup.removeEventListener("popupshown", onPopupShown);
resolve();
};
@ -318,7 +319,7 @@ var awaitExtensionPanel = async function (
win = window,
awaitLoad = true
) {
let { originalTarget: browser } = await BrowserTestUtils.waitForEvent(
const { originalTarget: browser } = await BrowserTestUtils.waitForEvent(
win.document,
"WebExtPopupLoaded",
true,
@ -338,8 +339,8 @@ function getBrowserActionPopup(extension, win = window) {
}
function closeBrowserAction(extension, win = window) {
let popup = getBrowserActionPopup(extension, win);
let hidden = BrowserTestUtils.waitForEvent(popup, "popuphidden");
const popup = getBrowserActionPopup(extension, win);
const hidden = BrowserTestUtils.waitForEvent(popup, "popuphidden");
popup.hidePopup();
return hidden;
@ -353,7 +354,7 @@ async function openNewMailWindow(options = {}) {
);
}
let win = window.openDialog(
const win = window.openDialog(
"chrome://messenger/content/messenger.xhtml",
"_blank",
"chrome,all,dialog=no"
@ -367,17 +368,17 @@ async function openNewMailWindow(options = {}) {
}
async function openComposeWindow(account) {
let params = Cc[
const params = Cc[
"@mozilla.org/messengercompose/composeparams;1"
].createInstance(Ci.nsIMsgComposeParams);
let composeFields = Cc[
const composeFields = Cc[
"@mozilla.org/messengercompose/composefields;1"
].createInstance(Ci.nsIMsgCompFields);
params.identity = account.defaultIdentity;
params.composeFields = composeFields;
let composeWindowPromise = BrowserTestUtils.domWindowOpened(
const composeWindowPromise = BrowserTestUtils.domWindowOpened(
undefined,
async win => {
await BrowserTestUtils.waitForEvent(win, "load");
@ -402,7 +403,7 @@ async function openMessageInTab(msgHdr) {
// Ensure the behaviour pref is set to open a new tab. It is the default,
// but you never know.
let oldPrefValue = Services.prefs.getIntPref("mail.openMessageBehavior");
const oldPrefValue = Services.prefs.getIntPref("mail.openMessageBehavior");
Services.prefs.setIntPref(
"mail.openMessageBehavior",
MailConsts.OpenMessageBehavior.NEW_TAB
@ -410,8 +411,8 @@ async function openMessageInTab(msgHdr) {
MailUtils.displayMessages([msgHdr]);
Services.prefs.setIntPref("mail.openMessageBehavior", oldPrefValue);
let win = Services.wm.getMostRecentWindow("mail:3pane");
let tab = win.document.getElementById("tabmail").currentTabInfo;
const win = Services.wm.getMostRecentWindow("mail:3pane");
const tab = win.document.getElementById("tabmail").currentTabInfo;
await BrowserTestUtils.waitForEvent(tab.chromeBrowser, "MsgLoaded");
return tab;
}
@ -421,7 +422,7 @@ async function openMessageInWindow(msgHdr) {
throw new Error("No message passed to openMessageInWindow");
}
let messageWindowPromise = BrowserTestUtils.domWindowOpenedAndLoaded(
const messageWindowPromise = BrowserTestUtils.domWindowOpenedAndLoaded(
undefined,
async win =>
win.document.documentURI ==
@ -429,7 +430,7 @@ async function openMessageInWindow(msgHdr) {
);
MailUtils.openMessageInNewWindow(msgHdr);
let messageWindow = await messageWindowPromise;
const messageWindow = await messageWindowPromise;
await BrowserTestUtils.waitForEvent(messageWindow, "MsgLoaded");
return messageWindow;
}
@ -458,10 +459,10 @@ async function promiseMessageLoaded(browser, msgHdr) {
* @param {string} [fields.subject]
*/
async function checkComposeHeaders(expected) {
let composeWindows = [...Services.wm.getEnumerator("msgcompose")];
const composeWindows = [...Services.wm.getEnumerator("msgcompose")];
is(composeWindows.length, 1);
let composeDocument = composeWindows[0].document;
let composeFields = composeWindows[0].gMsgCompose.compFields;
const composeDocument = composeWindows[0].document;
const composeFields = composeWindows[0].gMsgCompose.compFields;
await new Promise(resolve => composeWindows[0].setTimeout(resolve));
@ -477,8 +478,8 @@ async function checkComposeHeaders(expected) {
);
}
let checkField = (fieldName, elementId) => {
let pills = composeDocument
const checkField = (fieldName, elementId) => {
const pills = composeDocument
.getElementById(elementId)
.getElementsByTagName("mail-address-pill");
@ -503,7 +504,7 @@ async function checkComposeHeaders(expected) {
checkField("followupTo", "addressRowFollowup");
checkField("newsgroups", "addressRowNewsgroups");
let subject = composeDocument.getElementById("msgSubject").value;
const subject = composeDocument.getElementById("msgSubject").value;
if ("subject" in expected) {
is(subject, expected.subject, "subject is correct");
} else {
@ -512,10 +513,10 @@ async function checkComposeHeaders(expected) {
if (expected.overrideDefaultFcc) {
if (expected.overrideDefaultFccFolder) {
let server = MailServices.accounts.getAccount(
const server = MailServices.accounts.getAccount(
expected.overrideDefaultFccFolder.accountId
).incomingServer;
let rootURI = server.rootFolder.URI;
const rootURI = server.rootFolder.URI;
is(
rootURI + expected.overrideDefaultFccFolder.path,
composeFields.fcc,
@ -532,10 +533,10 @@ async function checkComposeHeaders(expected) {
}
if (expected.additionalFccFolder) {
let server = MailServices.accounts.getAccount(
const server = MailServices.accounts.getAccount(
expected.additionalFccFolder.accountId
).incomingServer;
let rootURI = server.rootFolder.URI;
const rootURI = server.rootFolder.URI;
is(
rootURI + expected.additionalFccFolder.path,
composeFields.fcc2,
@ -562,7 +563,7 @@ async function checkComposeHeaders(expected) {
expected.returnReceipt,
"returnReceipt in composeFields should be correct"
);
for (let item of composeDocument.querySelectorAll(`menuitem[command="cmd_toggleReturnReceipt"],
for (const item of composeDocument.querySelectorAll(`menuitem[command="cmd_toggleReturnReceipt"],
toolbarbutton[command="cmd_toggleReturnReceipt"]`)) {
is(
item.getAttribute("checked") == "true",
@ -599,14 +600,14 @@ async function checkComposeHeaders(expected) {
[Ci.nsIMsgCompSendFormat.Both, "format_both"],
[Ci.nsIMsgCompSendFormat.Auto, "format_auto"],
]);
let expectedFormat = deliveryFormats[expected.deliveryFormat || "auto"];
const expectedFormat = deliveryFormats[expected.deliveryFormat || "auto"];
is(
expectedFormat,
composeFields.deliveryFormat,
"deliveryFormat in composeFields should be correct"
);
for (let [format, id] of formatToId.entries()) {
let menuitem = composeDocument.getElementById(id);
for (const [format, id] of formatToId.entries()) {
const menuitem = composeDocument.getElementById(id);
is(
format == expectedFormat,
menuitem.getAttribute("checked") == "true",
@ -618,17 +619,18 @@ async function checkComposeHeaders(expected) {
async function synthesizeMouseAtCenterAndRetry(selector, event, browser) {
let success = false;
let type = event.type || "click";
const type = event.type || "click";
for (let retries = 0; !success && retries < 2; retries++) {
let clickPromise = BrowserTestUtils.waitForContentEvent(browser, type).then(
() => true
);
const clickPromise = BrowserTestUtils.waitForContentEvent(
browser,
type
).then(() => true);
// Linux: Sometimes the actor used to simulate the mouse event in the content process does not
// react, even though the content page signals to be fully loaded. There is no status signal
// we could wait for, the loaded page *should* be ready at this point. To mitigate, we wait
// for the click event and if we do not see it within a certain time, we click again.
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
let failPromise = new Promise(r =>
const failPromise = new Promise(r =>
browser.ownerGlobal.setTimeout(r, 500)
).then(() => false);
@ -639,12 +641,12 @@ async function synthesizeMouseAtCenterAndRetry(selector, event, browser) {
}
async function openContextMenu(selector = "#img1", win = window) {
let contentAreaContextMenu = win.document.getElementById("browserContext");
let popupShownPromise = BrowserTestUtils.waitForEvent(
const contentAreaContextMenu = win.document.getElementById("browserContext");
const popupShownPromise = BrowserTestUtils.waitForEvent(
contentAreaContextMenu,
"popupshown"
);
let tabmail = document.getElementById("tabmail");
const tabmail = document.getElementById("tabmail");
await synthesizeMouseAtCenterAndRetry(
selector,
{ type: "mousedown", button: 2 },
@ -660,11 +662,11 @@ async function openContextMenu(selector = "#img1", win = window) {
}
async function openContextMenuInPopup(extension, selector, win = window) {
let contentAreaContextMenu =
const contentAreaContextMenu =
win.top.document.getElementById("browserContext");
let stack = getBrowserActionPopup(extension, win);
let browser = stack.querySelector("browser");
let popupShownPromise = BrowserTestUtils.waitForEvent(
const stack = getBrowserActionPopup(extension, win);
const browser = stack.querySelector("browser");
const popupShownPromise = BrowserTestUtils.waitForEvent(
contentAreaContextMenu,
"popupshown"
);
@ -687,9 +689,9 @@ async function closeExtensionContextMenu(
modifiers = {},
win = window
) {
let contentAreaContextMenu =
const contentAreaContextMenu =
win.top.document.getElementById("browserContext");
let popupHiddenPromise = BrowserTestUtils.waitForEvent(
const popupHiddenPromise = BrowserTestUtils.waitForEvent(
contentAreaContextMenu,
"popuphidden"
);
@ -713,9 +715,9 @@ async function openSubmenu(submenuItem, win = window) {
}
async function closeContextMenu(contextMenu) {
let contentAreaContextMenu =
const contentAreaContextMenu =
contextMenu || document.getElementById("browserContext");
let popupHiddenPromise = BrowserTestUtils.waitForEvent(
const popupHiddenPromise = BrowserTestUtils.waitForEvent(
contentAreaContextMenu,
"popuphidden"
);
@ -724,7 +726,7 @@ async function closeContextMenu(contextMenu) {
}
async function getUtilsJS() {
let response = await fetch(getRootDirectory(gTestPath) + "utils.js");
const response = await fetch(getRootDirectory(gTestPath) + "utils.js");
return response.text();
}
@ -732,7 +734,7 @@ async function checkContent(browser, expected) {
await SpecialPowers.spawn(browser, [expected], expected => {
let body = content.document.body;
Assert.ok(body, "body");
let computedStyle = content.getComputedStyle(body);
const computedStyle = content.getComputedStyle(body);
if ("backgroundColor" in expected) {
Assert.equal(
@ -760,19 +762,19 @@ async function checkContent(browser, expected) {
function contentTabOpenPromise(tabmail, url) {
return new Promise(resolve => {
let tabMonitor = {
const tabMonitor = {
onTabTitleChanged(aTab) {},
onTabClosing(aTab) {},
onTabPersist(aTab) {},
onTabRestored(aTab) {},
onTabSwitched(aNewTab, aOldTab) {},
async onTabOpened(aTab) {
let result = awaitBrowserLoaded(
const result = awaitBrowserLoaded(
aTab.linkedBrowser,
urlToMatch => urlToMatch == url
).then(() => aTab);
let reporterListener = {
const reporterListener = {
QueryInterface: ChromeUtils.generateQI([
"nsIWebProgressListener",
"nsISupportsWeakReference",
@ -843,7 +845,7 @@ async function run_popup_test(configData) {
let backend_script = configData.backend_script;
let extensionDetails = {
const extensionDetails = {
files: {
"popup.html": `<!DOCTYPE html>
<html>
@ -899,14 +901,14 @@ async function run_popup_test(configData) {
switch (configData.testType) {
case "open-with-mouse-click":
backend_script = async function (extension, configData) {
let win = configData.window;
const win = configData.window;
await extension.startup();
await promiseAnimationFrame(win);
await new Promise(resolve => win.setTimeout(resolve));
await extension.awaitMessage("ready");
let buttonId = `${configData.actionType}_mochi_test-${configData.moduleName}-toolbarbutton`;
const buttonId = `${configData.actionType}_mochi_test-${configData.moduleName}-toolbarbutton`;
let toolbarId;
switch (configData.actionType) {
case "compose_action":
@ -963,7 +965,7 @@ async function run_popup_test(configData) {
"Button should be available in unified toolbar mail space"
);
let icon = button.querySelector(".button-icon");
const icon = button.querySelector(".button-icon");
is(
getComputedStyle(icon).content,
`url("chrome://messenger/content/extension.svg")`,
@ -990,7 +992,7 @@ async function run_popup_test(configData) {
`Button should have been added to currentset xulStore of toolbar ${toolbarId}`
);
let icon = button.querySelector(".toolbarbutton-icon");
const icon = button.querySelector(".toolbarbutton-icon");
is(
getComputedStyle(icon).listStyleImage,
`url("chrome://messenger/content/extension.svg")`,
@ -1058,7 +1060,7 @@ async function run_popup_test(configData) {
);
}
} else {
let hasFiredBefore = await clickedPromise;
const hasFiredBefore = await clickedPromise;
await promiseAnimationFrame(win);
await new Promise(resolve => win.setTimeout(resolve));
if (toolbarId === "unified-toolbar") {
@ -1140,7 +1142,7 @@ async function run_popup_test(configData) {
// With popup.
extensionDetails.files["background.js"] = async function () {
browser.test.log("popup background script ran");
let popupPromise = window.getPopupOpenedPromise();
const popupPromise = window.getPopupOpenedPromise();
browser.test.sendMessage("ready");
await popupPromise;
await browser[window.apiName].setTitle({ title: "New title" });
@ -1169,7 +1171,7 @@ async function run_popup_test(configData) {
browser.test.assertEq(0, info.button);
browser.test.assertTrue(Array.isArray(info.modifiers));
browser.test.assertEq(0, info.modifiers.length);
let [currentTab] = await browser.tabs.query({
const [currentTab] = await browser.tabs.query({
active: true,
currentWindow: true,
});
@ -1191,8 +1193,8 @@ async function run_popup_test(configData) {
case "open-with-menu-command":
extensionDetails.manifest.permissions = ["menus"];
backend_script = async function (extension, configData) {
let win = configData.window;
let buttonId = `${configData.actionType}_mochi_test-${configData.moduleName}-toolbarbutton`;
const win = configData.window;
const buttonId = `${configData.actionType}_mochi_test-${configData.moduleName}-toolbarbutton`;
let menuId = "toolbar-context-menu";
let isUnifiedToolbar = false;
if (
@ -1222,10 +1224,13 @@ async function run_popup_test(configData) {
};
extension.onMessage("triggerClick", async () => {
let button = getButton(win);
let menu = win.document.getElementById(menuId);
let onShownPromise = extension.awaitMessage("onShown");
let shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
const button = getButton(win);
const menu = win.document.getElementById(menuId);
const onShownPromise = extension.awaitMessage("onShown");
const shownPromise = BrowserTestUtils.waitForEvent(
menu,
"popupshown"
);
EventUtils.synthesizeMouseAtCenter(
button,
{ type: "contextmenu" },
@ -1235,7 +1240,7 @@ async function run_popup_test(configData) {
await onShownPromise;
await new Promise(resolve => win.setTimeout(resolve));
let menuitem = win.document.getElementById(
const menuitem = win.document.getElementById(
`${configData.actionType}_mochi_test-menuitem-_testmenu`
);
Assert.ok(menuitem);
@ -1253,7 +1258,7 @@ async function run_popup_test(configData) {
await extension.awaitFinish();
// Check the open state of the action button.
let button = getButton(win);
const button = getButton(win);
await TestUtils.waitForCondition(
() => button.getAttribute("open") != "true",
"Button should not have open state after the popup closed."
@ -1281,7 +1286,7 @@ async function run_popup_test(configData) {
browser.test.sendMessage("onShown", args);
});
let popupPromise = window.getPopupOpenedPromise();
const popupPromise = window.getPopupOpenedPromise();
await window.sendMessage("triggerClick");
await popupPromise;
@ -1337,8 +1342,8 @@ async function run_popup_test(configData) {
browser.test.sendMessage("onShown", args);
});
let clickPromise = new Promise(resolve => {
let listener = async (tab, info) => {
const clickPromise = new Promise(resolve => {
const listener = async (tab, info) => {
browser[window.apiName].onClicked.removeListener(listener);
browser.test.assertEq("object", typeof tab);
browser.test.assertEq("object", typeof info);
@ -1381,13 +1386,13 @@ async function run_popup_test(configData) {
configData.default_windows;
}
let extension = ExtensionTestUtils.loadExtension(extensionDetails);
const extension = ExtensionTestUtils.loadExtension(extensionDetails);
await backend_script(extension, configData);
}
async function run_action_button_order_test(configs, window, actionType) {
// Get camelCase API names from action type.
let apiName = actionType.replace(/_([a-z])/g, function (g) {
const apiName = actionType.replace(/_([a-z])/g, function (g) {
return g[1].toUpperCase();
});
@ -1396,13 +1401,13 @@ async function run_action_button_order_test(configs, window, actionType) {
}
function test_buttons(configs, window, toolbars) {
for (let toolbarId of toolbars) {
let expected = configs.filter(e => e.toolbar == toolbarId);
let selector =
for (const toolbarId of toolbars) {
const expected = configs.filter(e => e.toolbar == toolbarId);
const selector =
toolbarId === "unified-toolbar"
? `#unifiedToolbarContent [extension$="@mochi.test"]`
: `#${toolbarId} toolbarbutton[id$="${get_id("")}"]`;
let buttons = window.document.querySelectorAll(selector);
const buttons = window.document.querySelectorAll(selector);
Assert.equal(
expected.length,
buttons.length,
@ -1427,8 +1432,8 @@ async function run_action_button_order_test(configs, window, actionType) {
}
// Create extension data.
let toolbars = new Set();
for (let config of configs) {
const toolbars = new Set();
for (const config of configs) {
toolbars.add(config.toolbar);
config.extensionData = {
useAddonManager: "permanent",
@ -1453,35 +1458,35 @@ async function run_action_button_order_test(configs, window, actionType) {
}
// Test order of buttons after first install.
for (let config of configs) {
for (const config of configs) {
config.extension = ExtensionTestUtils.loadExtension(config.extensionData);
await config.extension.startup();
}
test_buttons(configs, window, toolbars);
// Disable all buttons.
for (let config of configs) {
let addon = await AddonManager.getAddonByID(config.extension.id);
for (const config of configs) {
const addon = await AddonManager.getAddonByID(config.extension.id);
await addon.disable();
}
test_buttons([], window, toolbars);
// Re-enable all buttons in reversed order, displayed order should not change.
for (let config of [...configs].reverse()) {
let addon = await AddonManager.getAddonByID(config.extension.id);
for (const config of [...configs].reverse()) {
const addon = await AddonManager.getAddonByID(config.extension.id);
await addon.enable();
}
test_buttons(configs, window, toolbars);
// Re-install all extensions in reversed order, displayed order should not change.
for (let config of [...configs].reverse()) {
for (const config of [...configs].reverse()) {
config.extension2 = ExtensionTestUtils.loadExtension(config.extensionData);
await config.extension2.startup();
}
test_buttons(configs, window, toolbars);
// Remove all extensions.
for (let config of [...configs].reverse()) {
for (const config of [...configs].reverse()) {
await config.extension.unload();
await config.extension2.unload();
}

Просмотреть файл

@ -28,7 +28,7 @@ var URL_BASE =
* @returns {Promise} A promise that resolves when the menu appears.
*/
function leftClick(menu, element) {
let shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
const shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
EventUtils.synthesizeMouseAtCenter(element, {}, element.ownerGlobal);
return shownPromise;
}
@ -41,7 +41,7 @@ function leftClick(menu, element) {
* @returns {Promise} A promise that resolves when the menu appears.
*/
function rightClick(menu, element) {
let shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
const shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
EventUtils.synthesizeMouseAtCenter(
element,
{ type: "contextmenu" },
@ -60,7 +60,7 @@ function rightClick(menu, element) {
* @returns {Promise} A promise that resolves when the menu appears.
*/
async function rightClickOnContent(menu, selector, browser) {
let shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
const shownPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
await synthesizeMouseAtCenterAndRetry(
selector,
{ type: "contextmenu" },
@ -90,7 +90,7 @@ async function rightClickOnContent(menu, selector, browser) {
* @param {boolean} expectedTab.mailTab
*/
async function checkShownEvent(extension, expectedInfo, expectedTab) {
let [info, tab] = await extension.awaitMessage("onShown");
const [info, tab] = await extension.awaitMessage("onShown");
Assert.deepEqual(info.menuIds, expectedInfo.menuIds);
Assert.deepEqual(info.contexts, expectedInfo.contexts);
@ -107,7 +107,7 @@ async function checkShownEvent(extension, expectedInfo, expectedTab) {
}
}
for (let infoKey of ["displayedFolder", "selectedFolder"]) {
for (const infoKey of ["displayedFolder", "selectedFolder"]) {
Assert.equal(
!!info[infoKey],
!!expectedInfo[infoKey],
@ -180,7 +180,7 @@ async function checkShownEvent(extension, expectedInfo, expectedTab) {
* @param {boolean} expectedTab.mailTab
*/
async function checkClickedEvent(extension, expectedInfo, expectedTab) {
let [info, tab] = await extension.awaitMessage("onClicked");
const [info, tab] = await extension.awaitMessage("onClicked");
Assert.equal(info.selectionText, expectedInfo.selectionText, "selectionText");
Assert.equal(info.linkText, expectedInfo.linkText, "linkText");
@ -188,7 +188,7 @@ async function checkClickedEvent(extension, expectedInfo, expectedTab) {
Assert.equal(info.menuItemId, expectedInfo.menuItemId, "menuItemId");
}
for (let infoKey of ["pageUrl", "linkUrl", "srcUrl"]) {
for (const infoKey of ["pageUrl", "linkUrl", "srcUrl"]) {
Assert.equal(
!!info[infoKey],
!!expectedInfo[infoKey],
@ -209,10 +209,10 @@ async function checkClickedEvent(extension, expectedInfo, expectedTab) {
}
async function getMenuExtension(manifest) {
let details = {
const details = {
files: {
"background.js": async () => {
let contexts = [
const contexts = [
"audio",
"compose_action",
"compose_action_menu",
@ -239,7 +239,7 @@ async function getMenuExtension(manifest) {
contexts.push("browser_action", "browser_action_menu");
}
for (let context of contexts) {
for (const context of contexts) {
browser.menus.create({
id: context,
title: context,
@ -274,7 +274,7 @@ async function getMenuExtension(manifest) {
}
details.manifest.permissions.push("menus");
console.log(JSON.stringify(details, 2));
let extension = ExtensionTestUtils.loadExtension(details);
const extension = ExtensionTestUtils.loadExtension(details);
if (details.manifest.host_permissions) {
// MV3 has to manually grant the requested permission.
await ExtensionPermissions.add("menus@mochi.test", {
@ -294,7 +294,7 @@ async function subtest_content(
) {
await awaitBrowserLoaded(browser, url => url != "about:blank");
let menuId = browser.getAttribute("context");
const menuId = browser.getAttribute("context");
let ownerDocument;
if (browser.ownerGlobal.parent.location.href == "about:3pane") {
ownerDocument = browser.ownerGlobal.parent.document;
@ -303,7 +303,7 @@ async function subtest_content(
} else {
ownerDocument = browser.ownerDocument;
}
let menu = ownerDocument.getElementById(menuId);
const menu = ownerDocument.getElementById(menuId);
await synthesizeMouseAtCenterAndRetry("body", {}, browser);
@ -333,7 +333,7 @@ async function subtest_content(
info("Test selection.");
await SpecialPowers.spawn(browser, [], () => {
let text = content.document.querySelector("p");
const text = content.document.querySelector("p");
content.getSelection().selectAllChildren(text);
});
await rightClickOnContent(menu, "p", browser);
@ -442,7 +442,9 @@ async function openExtensionSubMenu(menu) {
// The extension submenu ends with a number, which increases over time, but it
// does not have a underscore.
let submenu;
for (let item of menu.querySelectorAll("[id^=menus_mochi_test-menuitem-]")) {
for (const item of menu.querySelectorAll(
"[id^=menus_mochi_test-menuitem-]"
)) {
if (!item.id.includes("-_")) {
submenu = item;
break;
@ -451,7 +453,7 @@ async function openExtensionSubMenu(menu) {
Assert.ok(submenu, `Found submenu: ${submenu.id}`);
// Open submenu.
let submenuPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
const submenuPromise = BrowserTestUtils.waitForEvent(menu, "popupshown");
submenu.openMenu(true);
await submenuPromise;
@ -467,8 +469,8 @@ async function subtest_compose_body(
) {
await awaitBrowserLoaded(browser, url => url != "about:blank");
let ownerDocument = browser.ownerDocument;
let menu = ownerDocument.getElementById(browser.getAttribute("context"));
const ownerDocument = browser.ownerDocument;
const menu = ownerDocument.getElementById(browser.getAttribute("context"));
await synthesizeMouseAtCenterAndRetry("body", {}, browser);
@ -477,7 +479,7 @@ async function subtest_compose_body(
await rightClickOnContent(menu, "body", browser);
Assert.ok(menu.querySelector(`#menus_mochi_test-menuitem-_compose_body`));
Assert.ok(menu.querySelector(`#menus_mochi_test-menuitem-_editable`));
let hiddenPromise = BrowserTestUtils.waitForEvent(menu, "popuphidden");
const hiddenPromise = BrowserTestUtils.waitForEvent(menu, "popuphidden");
menu.hidePopup();
await hiddenPromise;
// Sometimes, the popup will open then instantly disappear. It seems to
@ -500,12 +502,12 @@ async function subtest_compose_body(
info("Test selection.");
{
await SpecialPowers.spawn(browser, [], () => {
let text = content.document.querySelector("p");
const text = content.document.querySelector("p");
content.getSelection().selectAllChildren(text);
});
await rightClickOnContent(menu, "p", browser);
let submenu = await openExtensionSubMenu(menu);
const submenu = await openExtensionSubMenu(menu);
await checkShownEvent(
extension,
@ -523,8 +525,8 @@ async function subtest_compose_body(
);
Assert.ok(submenu.querySelector("#menus_mochi_test-menuitem-_editable"));
let hiddenPromise = BrowserTestUtils.waitForEvent(submenu, "popuphidden");
let clickedPromise = checkClickedEvent(
const hiddenPromise = BrowserTestUtils.waitForEvent(submenu, "popuphidden");
const clickedPromise = checkClickedEvent(
extension,
{
pageUrl,
@ -549,7 +551,7 @@ async function subtest_compose_body(
info("Test link.");
{
await rightClickOnContent(menu, "a", browser);
let submenu = await openExtensionSubMenu(menu);
const submenu = await openExtensionSubMenu(menu);
await checkShownEvent(
extension,
@ -566,8 +568,8 @@ async function subtest_compose_body(
submenu.querySelector("#menus_mochi_test-menuitem-_compose_body")
);
let hiddenPromise = BrowserTestUtils.waitForEvent(submenu, "popuphidden");
let clickedPromise = checkClickedEvent(
const hiddenPromise = BrowserTestUtils.waitForEvent(submenu, "popuphidden");
const clickedPromise = checkClickedEvent(
extension,
{
pageUrl,
@ -593,7 +595,7 @@ async function subtest_compose_body(
info("Test image.");
{
await rightClickOnContent(menu, "img", browser);
let submenu = await openExtensionSubMenu(menu);
const submenu = await openExtensionSubMenu(menu);
await checkShownEvent(
extension,
@ -610,8 +612,8 @@ async function subtest_compose_body(
submenu.querySelector("#menus_mochi_test-menuitem-_compose_body")
);
let hiddenPromise = BrowserTestUtils.waitForEvent(menu, "popuphidden");
let clickedPromise = checkClickedEvent(
const hiddenPromise = BrowserTestUtils.waitForEvent(menu, "popuphidden");
const clickedPromise = checkClickedEvent(
extension,
{
pageUrl,
@ -644,7 +646,7 @@ async function subtest_element(
pageUrl,
tab
) {
for (let selectedTest of [false, true]) {
for (const selectedTest of [false, true]) {
element.focus();
if (selectedTest) {
element.value = "This is selected text.";
@ -653,10 +655,10 @@ async function subtest_element(
element.value = "";
}
let event = await rightClick(element.ownerGlobal, element);
let menu = event.target;
let trigger = menu.triggerNode;
let menuitem = menu.querySelector("#menus_mochi_test-menuitem-_editable");
const event = await rightClick(element.ownerGlobal, element);
const menu = event.target;
const trigger = menu.triggerNode;
const menuitem = menu.querySelector("#menus_mochi_test-menuitem-_editable");
Assert.equal(
element.id,
trigger.id,
@ -688,7 +690,7 @@ async function subtest_element(
// extension submenu. Open the submenu.
let submenu = null;
if (selectedTest) {
for (let foundMenu of menu.querySelectorAll(
for (const foundMenu of menu.querySelectorAll(
"[id^='menus_mochi_test-menuitem-']"
)) {
if (!foundMenu.id.startsWith("menus_mochi_test-menuitem-_")) {
@ -696,7 +698,7 @@ async function subtest_element(
}
}
Assert.ok(submenu, "Submenu found.");
let submenuPromise = BrowserTestUtils.waitForEvent(
const submenuPromise = BrowserTestUtils.waitForEvent(
element.ownerGlobal,
"popupshown"
);
@ -704,11 +706,11 @@ async function subtest_element(
await submenuPromise;
}
let hiddenPromise = BrowserTestUtils.waitForEvent(
const hiddenPromise = BrowserTestUtils.waitForEvent(
element.ownerGlobal,
"popuphidden"
);
let clickedPromise = checkClickedEvent(
const clickedPromise = checkClickedEvent(
extension,
{
pageUrl,

Просмотреть файл

@ -6,7 +6,7 @@
var IS_IMAP = true;
let wrappedCreateAccount = createAccount;
const wrappedCreateAccount = createAccount;
createAccount = function (type = "imap") {
return wrappedCreateAccount(type);
};

Просмотреть файл

@ -6,7 +6,7 @@
var IS_NNTP = true;
let wrappedCreateAccount = createAccount;
const wrappedCreateAccount = createAccount;
createAccount = function (type = "nntp") {
return wrappedCreateAccount(type);
};

Просмотреть файл

@ -30,15 +30,15 @@ var IS_IMAP = false;
var IS_NNTP = false;
function formatVCard(strings, ...values) {
let arr = [];
for (let str of strings) {
const arr = [];
for (const str of strings) {
arr.push(str);
arr.push(values.shift());
}
let lines = arr.join("").split("\n");
let indent = lines[1].length - lines[1].trimLeft().length;
let outLines = [];
for (let line of lines) {
const lines = arr.join("").split("\n");
const indent = lines[1].length - lines[1].trimLeft().length;
const outLines = [];
for (const line of lines) {
if (line.length > 0) {
outLines.push(line.substring(indent) + "\r\n");
}
@ -79,15 +79,15 @@ function createAccount(type = "none") {
}
function cleanUpAccount(account) {
let serverKey = account.incomingServer.key;
let serverType = account.incomingServer.type;
const serverKey = account.incomingServer.key;
const serverType = account.incomingServer.type;
info(
`Cleaning up ${serverType} account ${account.key} and server ${serverKey}`
);
MailServices.accounts.removeAccount(account, true);
try {
let server = MailServices.accounts.getIncomingServer(serverKey);
const server = MailServices.accounts.getIncomingServer(serverKey);
if (server) {
info(`Cleaning up leftover ${serverType} server ${serverKey}`);
MailServices.accounts.removeIncomingServer(server, false);
@ -100,7 +100,7 @@ registerCleanupFunction(() => {
});
function addIdentity(account, email = "xpcshell@localhost") {
let identity = MailServices.accounts.createIdentity();
const identity = MailServices.accounts.createIdentity();
identity.email = email;
account.addIdentity(identity);
if (!account.defaultIdentity) {
@ -113,12 +113,12 @@ function addIdentity(account, email = "xpcshell@localhost") {
async function createSubfolder(parent, name) {
if (parent.server.type == "nntp") {
createNewsgroup(name);
let account = MailServices.accounts.FindAccountForServer(parent.server);
const account = MailServices.accounts.FindAccountForServer(parent.server);
subscribeNewsgroup(account, name);
return parent.getChildNamed(name);
}
let promiseAdded = PromiseTestUtils.promiseFolderAdded(name);
const promiseAdded = PromiseTestUtils.promiseFolderAdded(name);
parent.createSubfolder(name, null);
await promiseAdded;
return parent.getChildNamed(name);
@ -132,7 +132,8 @@ function createMessages(folder, makeMessagesArg) {
createMessages.messageGenerator = new MessageGenerator();
}
let messages = createMessages.messageGenerator.makeMessages(makeMessagesArg);
const messages =
createMessages.messageGenerator.makeMessages(makeMessagesArg);
return addGeneratedMessages(folder, messages);
}
@ -145,7 +146,7 @@ class FakeGeneratedMessage {
}
toMboxString() {
// A cheap hack. It works for existing uses but may not work for future uses.
let fromAddress = this.msg.match(/From: .* <(.*@.*)>/)[0];
const fromAddress = this.msg.match(/From: .* <(.*@.*)>/)[0];
let mBoxString = `From ${fromAddress}\r\n${this.msg}`;
// Ensure a trailing empty line.
if (!mBoxString.endsWith("\r\n")) {
@ -156,7 +157,7 @@ class FakeGeneratedMessage {
}
async function createMessageFromFile(folder, path) {
let message = await IOUtils.readUTF8(path);
const message = await IOUtils.readUTF8(path);
return addGeneratedMessages(folder, [new FakeGeneratedMessage(message)]);
}
@ -172,7 +173,7 @@ async function addGeneratedMessages(folder, messages) {
return NNTPServer.addMessages(folder, messages);
}
let messageStrings = messages.map(message => message.toMboxString());
const messageStrings = messages.map(message => message.toMboxString());
folder.QueryInterface(Ci.nsIMsgLocalMailFolder);
folder.addMessageBatch(messageStrings);
folder.callFilterPlugins(null);
@ -185,9 +186,8 @@ async function getUtilsJS() {
var IMAPServer = {
open() {
let { ImapDaemon, ImapMessage, IMAP_RFC3501_handler } = ChromeUtils.import(
"resource://testing-common/mailnews/Imapd.jsm"
);
const { ImapDaemon, ImapMessage, IMAP_RFC3501_handler } =
ChromeUtils.import("resource://testing-common/mailnews/Imapd.jsm");
IMAPServer.ImapMessage = ImapMessage;
this.daemon = new ImapDaemon();
@ -207,15 +207,15 @@ var IMAPServer = {
},
addMessages(folder, messages) {
let fakeFolder = IMAPServer.daemon.getMailbox(folder.name);
const fakeFolder = IMAPServer.daemon.getMailbox(folder.name);
messages.forEach(message => {
if (typeof message != "string") {
message = message.toMessageString();
}
let msgURI = Services.io.newURI(
const msgURI = Services.io.newURI(
"data:text/plain;base64," + btoa(message)
);
let imapMsg = new IMAPServer.ImapMessage(
const imapMsg = new IMAPServer.ImapMessage(
msgURI.spec,
fakeFolder.uidnext++,
[]
@ -243,7 +243,7 @@ function createNewsgroup(group) {
var NNTPServer = {
open() {
let { NNTP_RFC977_handler, NntpDaemon } = ChromeUtils.import(
const { NNTP_RFC977_handler, NntpDaemon } = ChromeUtils.import(
"resource://testing-common/mailnews/Nntpd.jsm"
);
@ -273,11 +273,11 @@ var NNTPServer = {
},
addMessages(folder, messages) {
let { NewsArticle } = ChromeUtils.import(
const { NewsArticle } = ChromeUtils.import(
"resource://testing-common/mailnews/Nntpd.jsm"
);
let group = folder.name;
const group = folder.name;
messages.forEach(message => {
if (typeof message != "string") {
message = message.toMessageString();
@ -286,7 +286,7 @@ var NNTPServer = {
if (!message.endsWith("\r\n")) {
message = message + "\r\n";
}
let article = new NewsArticle(message);
const article = new NewsArticle(message);
article.groups = [group];
this.daemon.addArticle(article);
});

Просмотреть файл

@ -9,8 +9,8 @@ var { IMServices } = ChromeUtils.importESModule(
);
async function openChatTab() {
let tabmail = document.getElementById("tabmail");
let chatMode = tabmail.tabModes.chat;
const tabmail = document.getElementById("tabmail");
const chatMode = tabmail.tabModes.chat;
if (chatMode.tabs.length == 1) {
tabmail.selectedTab = chatMode.tabs[0];
@ -25,8 +25,8 @@ async function openChatTab() {
}
async function closeChatTab() {
let tabmail = document.getElementById("tabmail");
let chatMode = tabmail.tabModes.chat;
const tabmail = document.getElementById("tabmail");
const chatMode = tabmail.tabModes.chat;
if (chatMode.tabs.length == 1) {
tabmail.closeTab(chatMode.tabs[0]);
@ -85,7 +85,7 @@ function waitForConversationLoad(browser) {
function waitForNotification(target, expectedTopic) {
let observer;
let promise = new Promise(resolve => {
const promise = new Promise(resolve => {
observer = {
observe(subject, topic, data) {
if (topic === expectedTopic) {

Просмотреть файл

@ -5,8 +5,8 @@
/* import-globals-from ../../../../base/content/utilityOverlay.js */
async function openNewPrefsTab(paneID, scrollPaneTo, otherArgs) {
let tabmail = document.getElementById("tabmail");
let prefsTabMode = tabmail.tabModes.preferencesTab;
const tabmail = document.getElementById("tabmail");
const prefsTabMode = tabmail.tabModes.preferencesTab;
is(prefsTabMode.tabs.length, 0, "Prefs tab is not open");
@ -22,7 +22,7 @@ async function openNewPrefsTab(paneID, scrollPaneTo, otherArgs) {
ok(prefsDocument.URL.startsWith("about:preferences"), "Prefs tab is open");
prefsDocument = prefsTabMode.tabs[0].browser.contentDocument;
let prefsWindow = prefsDocument.ownerGlobal;
const prefsWindow = prefsDocument.ownerGlobal;
prefsWindow.resizeTo(screen.availWidth, screen.availHeight);
if (paneID) {
@ -41,7 +41,7 @@ async function openNewPrefsTab(paneID, scrollPaneTo, otherArgs) {
registerCleanupOnce();
await new Promise(resolve => prefsWindow.setTimeout(resolve));
let container = prefsDocument.getElementById("preferencesContainer");
const container = prefsDocument.getElementById("preferencesContainer");
if (scrollPaneTo && container.scrollHeight > container.clientHeight) {
Assert.greater(
container.scrollTop,
@ -53,13 +53,13 @@ async function openNewPrefsTab(paneID, scrollPaneTo, otherArgs) {
}
async function openExistingPrefsTab(paneID, scrollPaneTo, otherArgs) {
let tabmail = document.getElementById("tabmail");
let prefsTabMode = tabmail.tabModes.preferencesTab;
const tabmail = document.getElementById("tabmail");
const prefsTabMode = tabmail.tabModes.preferencesTab;
is(prefsTabMode.tabs.length, 1, "Prefs tab is open");
let prefsDocument = prefsTabMode.tabs[0].browser.contentDocument;
let prefsWindow = prefsDocument.ownerGlobal;
const prefsDocument = prefsTabMode.tabs[0].browser.contentDocument;
const prefsWindow = prefsDocument.ownerGlobal;
prefsWindow.resizeTo(screen.availWidth, screen.availHeight);
if (paneID && prefsWindow.gLastCategory.category != paneID) {
@ -91,8 +91,8 @@ function registerCleanupOnce() {
async function closePrefsTab() {
info("Closing prefs tab");
let tabmail = document.getElementById("tabmail");
let prefsTab = tabmail.tabModes.preferencesTab.tabs[0];
const tabmail = document.getElementById("tabmail");
const prefsTab = tabmail.tabModes.preferencesTab.tabs[0];
if (prefsTab) {
tabmail.closeTab(prefsTab);
}
@ -114,10 +114,10 @@ async function closePrefsTab() {
* the toggling of the checkbox.
*/
async function testCheckboxes(paneID, scrollPaneTo, ...tests) {
for (let initiallyChecked of [true, false]) {
for (const initiallyChecked of [true, false]) {
info(`Opening ${paneID} with prefs set to ${initiallyChecked}`);
for (let test of tests) {
for (const test of tests) {
let wantedValue = initiallyChecked;
if (test.prefValues) {
wantedValue = wantedValue ? test.prefValues[1] : test.prefValues[0];
@ -129,17 +129,17 @@ async function testCheckboxes(paneID, scrollPaneTo, ...tests) {
}
}
let { prefsDocument, prefsWindow } = await openNewPrefsTab(
const { prefsDocument, prefsWindow } = await openNewPrefsTab(
paneID,
scrollPaneTo
);
let testUIState = function (test, checked) {
const testUIState = function (test, checked) {
let wantedValue = checked;
if (test.prefValues) {
wantedValue = wantedValue ? test.prefValues[1] : test.prefValues[0];
}
let checkbox = prefsDocument.getElementById(test.checkboxID);
const checkbox = prefsDocument.getElementById(test.checkboxID);
is(
checkbox.checked,
checked,
@ -165,13 +165,13 @@ async function testCheckboxes(paneID, scrollPaneTo, ...tests) {
if (test.enabledInverted) {
disabled = !disabled;
}
for (let selector of test.enabledElements) {
let elements = prefsDocument.querySelectorAll(selector);
for (const selector of test.enabledElements) {
const elements = prefsDocument.querySelectorAll(selector);
ok(
elements.length >= 1,
`At least one element matched '${selector}'`
);
for (let element of elements) {
for (const element of elements) {
is(
element.disabled,
!disabled,
@ -182,22 +182,23 @@ async function testCheckboxes(paneID, scrollPaneTo, ...tests) {
}
};
let testUnaffected = function (ids, states) {
const testUnaffected = function (ids, states) {
ids.forEach((sel, index) => {
let isOk = prefsDocument.querySelector(sel).disabled === states[index];
const isOk =
prefsDocument.querySelector(sel).disabled === states[index];
is(isOk, true, `Element "${sel}" is unaffected`);
});
};
for (let test of tests) {
for (const test of tests) {
info(`Checking ${test.checkboxID}`);
let unaffectedSelectors = test.unaffectedElements || [];
let unaffectedStates = unaffectedSelectors.map(
const unaffectedSelectors = test.unaffectedElements || [];
const unaffectedStates = unaffectedSelectors.map(
sel => prefsDocument.querySelector(sel).disabled
);
let checkbox = prefsDocument.getElementById(test.checkboxID);
const checkbox = prefsDocument.getElementById(test.checkboxID);
checkbox.scrollIntoView(false);
testUIState(test, initiallyChecked);
@ -228,8 +229,8 @@ async function testCheckboxes(paneID, scrollPaneTo, ...tests) {
* radio button is selected (optional)
*/
async function testRadioButtons(paneID, scrollPaneTo, ...tests) {
for (let { pref, states } of tests) {
for (let initialState of states) {
for (const { pref, states } of tests) {
for (const initialState of states) {
info(`Opening ${paneID} with ${pref} set to ${initialState.prefValue}`);
if (typeof initialState.prefValue == "number") {
@ -240,26 +241,26 @@ async function testRadioButtons(paneID, scrollPaneTo, ...tests) {
Services.prefs.setCharPref(pref, initialState.prefValue);
}
let { prefsDocument, prefsWindow } = await openNewPrefsTab(
const { prefsDocument, prefsWindow } = await openNewPrefsTab(
paneID,
scrollPaneTo
);
let testUIState = function (currentState) {
const testUIState = function (currentState) {
info(`Testing with ${pref} set to ${currentState.prefValue}`);
for (let state of states) {
let isCurrentState = state == currentState;
let radio = prefsDocument.getElementById(state.id);
for (const state of states) {
const isCurrentState = state == currentState;
const radio = prefsDocument.getElementById(state.id);
is(radio.selected, isCurrentState, `${state.id}.selected`);
if (state.enabledElements) {
for (let selector of state.enabledElements) {
let elements = prefsDocument.querySelectorAll(selector);
for (const selector of state.enabledElements) {
const elements = prefsDocument.querySelectorAll(selector);
ok(
elements.length >= 1,
`At least one element matched '${selector}'`
);
for (let element of elements) {
for (const element of elements) {
is(
element.disabled,
!isCurrentState,
@ -293,17 +294,17 @@ async function testRadioButtons(paneID, scrollPaneTo, ...tests) {
// Check the initial setup is correct.
testUIState(initialState);
// Cycle through possible values, checking each one.
for (let state of states) {
for (const state of states) {
if (state == initialState) {
continue;
}
let radio = prefsDocument.getElementById(state.id);
const radio = prefsDocument.getElementById(state.id);
radio.scrollIntoView(false);
EventUtils.synthesizeMouseAtCenter(radio, {}, prefsWindow);
testUIState(state);
}
// Go back to the initial value.
let initialRadio = prefsDocument.getElementById(initialState.id);
const initialRadio = prefsDocument.getElementById(initialState.id);
initialRadio.scrollIntoView(false);
EventUtils.synthesizeMouseAtCenter(initialRadio, {}, prefsWindow);
testUIState(initialState);

Просмотреть файл

@ -27,12 +27,12 @@ function generateURIsFromDirTree(dir, extensions) {
if (!Array.isArray(extensions)) {
extensions = [extensions];
}
let dirQueue = [dir.path];
const dirQueue = [dir.path];
return (async function () {
let rv = [];
const rv = [];
while (dirQueue.length) {
let nextDir = dirQueue.shift();
let { subdirs, files } = await iterateOverPath(nextDir, extensions);
const nextDir = dirQueue.shift();
const { subdirs, files } = await iterateOverPath(nextDir, extensions);
dirQueue.push(...subdirs);
rv.push(...files);
}
@ -51,22 +51,22 @@ function generateURIsFromDirTree(dir, extensions) {
* @param extensions the file extensions we're interested in.
*/
async function iterateOverPath(path, extensions) {
let parentDir = new LocalFile(path);
let subdirs = [];
let files = [];
const parentDir = new LocalFile(path);
const subdirs = [];
const files = [];
// Iterate through the directory
for (let childPath of await IOUtils.getChildren(path)) {
let stat = await IOUtils.stat(childPath);
for (const childPath of await IOUtils.getChildren(path)) {
const stat = await IOUtils.stat(childPath);
if (stat.type === "directory") {
subdirs.push(childPath);
} else if (extensions.some(extension => childPath.endsWith(extension))) {
let file = parentDir.clone();
const file = parentDir.clone();
file.append(PathUtils.filename(childPath));
// the build system might leave dead symlinks hanging around, which are
// returned as part of the directory iterator, but don't actually exist:
if (file.exists()) {
let uriSpec = getURLForFile(file);
const uriSpec = getURLForFile(file);
files.push(Services.io.newURI(uriSpec));
}
} else if (
@ -75,10 +75,10 @@ async function iterateOverPath(path, extensions) {
childPath.endsWith(".zip") ||
childPath.endsWith(".xpi")
) {
let file = parentDir.clone();
const file = parentDir.clone();
file.append(PathUtils.filename(childPath));
for (let extension of extensions) {
let jarEntryIterator = generateEntriesFromJarFile(file, extension);
for (const extension of extensions) {
const jarEntryIterator = generateEntriesFromJarFile(file, extension);
files.push(...jarEntryIterator);
}
}
@ -102,15 +102,15 @@ function getURLForFile(file) {
* @param extension the extension we're interested in.
*/
function* generateEntriesFromJarFile(jarFile, extension) {
let zr = new ZipReader(jarFile);
const zr = new ZipReader(jarFile);
const kURIStart = getURLForFile(jarFile);
for (let entry of zr.findEntries("*" + extension + "$")) {
for (const entry of zr.findEntries("*" + extension + "$")) {
// Ignore the JS cache which is stored in omni.ja
if (entry.startsWith("jsloader") || entry.startsWith("jssubloader")) {
continue;
}
let entryURISpec = "jar:" + kURIStart + "!/" + entry;
const entryURISpec = "jar:" + kURIStart + "!/" + entry;
yield Services.io.newURI(entryURISpec);
}
zr.close();
@ -118,7 +118,7 @@ function* generateEntriesFromJarFile(jarFile, extension) {
function fetchFile(uri) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
const xhr = new XMLHttpRequest();
xhr.responseType = "text";
xhr.open("GET", uri, true);
xhr.onreadystatechange = function () {
@ -141,13 +141,13 @@ function fetchFile(uri) {
}
async function throttledMapPromises(iterable, task, limit = 64) {
let promises = new Set();
for (let data of iterable) {
const promises = new Set();
for (const data of iterable) {
while (promises.size >= limit) {
await Promise.race(promises);
}
let promise = task(data);
const promise = task(data);
if (promise) {
promise.finally(() => promises.delete(promise));
promises.add(promise);

Просмотреть файл

@ -24,7 +24,7 @@ registerCleanupFunction(function () {
});
function promiseDirectoryRemoved(uri) {
let removePromise = TestUtils.topicObserved("addrbook-directory-deleted");
const removePromise = TestUtils.topicObserved("addrbook-directory-deleted");
MailServices.ab.deleteAddressBook(uri);
return removePromise;
}
@ -49,15 +49,15 @@ acObserver.prototype = {
};
function formatVCard(strings, ...values) {
let arr = [];
for (let str of strings) {
const arr = [];
for (const str of strings) {
arr.push(str);
arr.push(values.shift());
}
let lines = arr.join("").split("\n");
let indent = lines[1].length - lines[1].trimLeft().length;
let outLines = [];
for (let line of lines) {
const lines = arr.join("").split("\n");
const indent = lines[1].length - lines[1].trimLeft().length;
const outLines = [];
for (const line of lines) {
if (line.length > 0) {
outLines.push(line.substring(indent) + "\r\n");
}

Просмотреть файл

@ -48,14 +48,14 @@ async function initDirectory() {
if (!Services.logins.findLogins(CardDAVServer.origin, null, "test").length) {
// Save a username and password to the login manager.
let loginInfo = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(
Ci.nsILoginInfo
);
const loginInfo = Cc[
"@mozilla.org/login-manager/loginInfo;1"
].createInstance(Ci.nsILoginInfo);
loginInfo.init(CardDAVServer.origin, null, "test", "bob", "bob", "", "");
await Services.logins.addLoginAsync(loginInfo);
}
let directory = new CardDAVDirectory();
const directory = new CardDAVDirectory();
directory.init("jscarddav://carddav.sqlite");
return directory;
}
@ -63,7 +63,7 @@ async function initDirectory() {
async function clearDirectory(directory) {
await directory.cleanUp();
let database = do_get_profile();
const database = do_get_profile();
database.append("carddav.sqlite");
database.remove(false);
}
@ -74,11 +74,11 @@ async function checkCardsOnServer(expectedCards) {
await fetch(`${CardDAVServer.origin}/ping`);
info("Checking cards on server are correct.");
let actualCards = [...CardDAVServer.cards];
const actualCards = [...CardDAVServer.cards];
Assert.equal(actualCards.length, Object.keys(expectedCards).length);
for (let [href, { etag, vCard }] of actualCards) {
let baseName = href
const baseName = href
.substring(CardDAVServer.path.length)
.replace(/\.vcf$/, "");
info(baseName);
@ -92,7 +92,7 @@ async function checkCardsOnServer(expectedCards) {
}
}
let observer = {
const observer = {
notifications: {
"addrbook-contact-created": [],
"addrbook-contact-updated": [],
@ -105,21 +105,21 @@ let observer = {
}
this.isInited = true;
for (let key of Object.keys(this.notifications)) {
for (const key of Object.keys(this.notifications)) {
Services.obs.addObserver(observer, key);
}
},
checkAndClearNotifications(expected) {
Assert.deepEqual(this.notifications, expected);
for (let array of Object.values(this.notifications)) {
for (const array of Object.values(this.notifications)) {
array.length = 0;
}
},
observe(subject, topic) {
let uid = subject.QueryInterface(Ci.nsIAbCard).UID;
const uid = subject.QueryInterface(Ci.nsIAbCard).UID;
info(`${topic}: ${uid}`);
if (this.pendingPromise && this.pendingPromise.topic == topic) {
let promise = this.pendingPromise;
const promise = this.pendingPromise;
this.pendingPromise = null;
promise.resolve(uid);
return;
@ -143,7 +143,7 @@ add_task(async () => {
// Checks two vCard strings have the same lines, in any order.
// Not very smart but smart enough.
function vCardEqual(lhs, rhs, message) {
let lhsLines = lhs.split("\r\n").sort();
let rhsLines = rhs.split("\r\n").sort();
const lhsLines = lhs.split("\r\n").sort();
const rhsLines = rhs.split("\r\n").sort();
Assert.deepEqual(lhsLines, rhsLines, message);
}

Просмотреть файл

@ -59,7 +59,7 @@ function setupServerDaemon(handler) {
}
function getBasicSmtpServer(port = 1, hostname = "localhost") {
let server = localAccountUtils.create_outgoing_server(
const server = localAccountUtils.create_outgoing_server(
port,
"user",
"password",
@ -75,7 +75,7 @@ function getBasicSmtpServer(port = 1, hostname = "localhost") {
function getSmtpIdentity(senderName, smtpServer) {
// Set up the identity
let identity = MailServices.accounts.createIdentity();
const identity = MailServices.accounts.createIdentity();
identity.email = senderName;
identity.smtpServerKey = smtpServer.key;
@ -157,14 +157,14 @@ var progressListener = {
};
function createMessage(aAttachment) {
let fields = Cc[
const fields = Cc[
"@mozilla.org/messengercompose/composefields;1"
].createInstance(Ci.nsIMsgCompFields);
fields.from = "Nobody <nobody@tinderbox.test>";
let attachments = [];
if (aAttachment) {
let attachment = Cc[
const attachment = Cc[
"@mozilla.org/messengercompose/attachment;1"
].createInstance(Ci.nsIMsgAttachment);
if (aAttachment instanceof Ci.nsIFile) {
@ -186,17 +186,17 @@ function richCreateMessage(
identity = null,
account = null
) {
let params = Cc[
const params = Cc[
"@mozilla.org/messengercompose/composeparams;1"
].createInstance(Ci.nsIMsgComposeParams);
params.composeFields = fields;
let msgCompose = MailServices.compose.initCompose(params);
const msgCompose = MailServices.compose.initCompose(params);
if (identity === null) {
identity = getSmtpIdentity(null, getBasicSmtpServer());
}
let rootFolder = localAccountUtils.rootFolder;
const rootFolder = localAccountUtils.rootFolder;
gDraftFolder = null;
// Make sure the drafts folder is empty
try {
@ -206,21 +206,21 @@ function richCreateMessage(
gDraftFolder = rootFolder.createLocalSubfolder("Drafts");
}
// Clear all messages
let msgs = [...gDraftFolder.msgDatabase.enumerateMessages()];
const msgs = [...gDraftFolder.msgDatabase.enumerateMessages()];
if (msgs.length > 0) {
gDraftFolder.deleteMessages(msgs, null, true, false, null, false);
}
// Set attachment
fields.removeAttachments();
for (let attachment of attachments) {
for (const attachment of attachments) {
fields.addAttachment(attachment);
}
let progress = Cc["@mozilla.org/messenger/progress;1"].createInstance(
const progress = Cc["@mozilla.org/messenger/progress;1"].createInstance(
Ci.nsIMsgProgress
);
let promise = new Promise((resolve, reject) => {
const promise = new Promise((resolve, reject) => {
progressListener.resolve = resolve;
progressListener.reject = reject;
});
@ -237,7 +237,7 @@ function richCreateMessage(
function getAttachmentFromContent(aContent) {
function getBoundaryStringFromContent() {
let found = aContent.match(
const found = aContent.match(
/Content-Type: multipart\/mixed;\s+boundary="(.*?)"/
);
Assert.notEqual(found, null);
@ -246,8 +246,8 @@ function getAttachmentFromContent(aContent) {
return found[1];
}
let boundary = getBoundaryStringFromContent(aContent);
let regex = new RegExp(
const boundary = getBoundaryStringFromContent(aContent);
const regex = new RegExp(
"\\r\\n\\r\\n--" +
boundary +
"\\r\\n" +
@ -257,7 +257,7 @@ function getAttachmentFromContent(aContent) {
"--",
"m"
);
let attachments = aContent.match(regex);
const attachments = aContent.match(regex);
Assert.notEqual(attachments, null);
Assert.equal(attachments.length, 2);
return attachments[1];
@ -270,7 +270,7 @@ function getAttachmentFromContent(aContent) {
* @returns {string}
*/
function getMessageBody(content) {
let separatorIndex = content.indexOf("\r\n\r\n");
const separatorIndex = content.indexOf("\r\n\r\n");
Assert.equal(content.slice(-2), "\r\n", "Should end with a line break.");
return content.slice(separatorIndex + 4, -2);
}

Просмотреть файл

@ -11,15 +11,15 @@ var { localAccountUtils } = ChromeUtils.import(
"resource://testing-common/mailnews/LocalAccountUtils.jsm"
);
let { FeedParser } = ChromeUtils.import("resource:///modules/FeedParser.jsm");
let { Feed } = ChromeUtils.import("resource:///modules/Feed.jsm");
let { FeedUtils } = ChromeUtils.import("resource:///modules/FeedUtils.jsm");
let { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js");
const { FeedParser } = ChromeUtils.import("resource:///modules/FeedParser.jsm");
const { Feed } = ChromeUtils.import("resource:///modules/Feed.jsm");
const { FeedUtils } = ChromeUtils.import("resource:///modules/FeedUtils.jsm");
const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js");
// Set up local web server to serve up test files.
// We run it on a random port so that other tests can run concurrently
// even if they also run a web server.
let httpServer = new HttpServer();
const httpServer = new HttpServer();
httpServer.registerDirectory("/", do_get_file("resources"));
httpServer.start(-1);
const SERVER_PORT = httpServer.identity.primaryPort;

Просмотреть файл

@ -117,7 +117,7 @@ function makeServer(daemon, infoString, otherProps) {
}
function createLocalIMAPServer(port, hostname = "localhost") {
let server = localAccountUtils.create_incoming_server(
const server = localAccountUtils.create_incoming_server(
"imap",
port,
"user",
@ -145,7 +145,7 @@ function do_check_transaction(fromServer, expected, withParams) {
fromServer = fromServer[fromServer.length - 1];
}
let realTransaction = [];
const realTransaction = [];
for (let i = 0; i < fromServer.them.length; i++) {
var line = fromServer.them[i]; // e.g. '1 login "user" "password"'
var components = line.split(" ");
@ -172,12 +172,12 @@ function do_check_transaction(fromServer, expected, withParams) {
*/
function addImapMessage() {
let messages = [];
let messageGenerator = new MessageGenerator(); // eslint-disable-line no-undef
const messageGenerator = new MessageGenerator(); // eslint-disable-line no-undef
messages = messages.concat(messageGenerator.makeMessage());
let dataUri = Services.io.newURI(
const dataUri = Services.io.newURI(
"data:text/plain;base64," + btoa(messages[0].toMessageString())
);
let imapMsg = new ImapMessage(dataUri.spec, IMAPPump.mailbox.uidnext++, []);
const imapMsg = new ImapMessage(dataUri.spec, IMAPPump.mailbox.uidnext++, []);
IMAPPump.mailbox.addMessage(imapMsg);
}

Просмотреть файл

@ -10,7 +10,7 @@ function CreateScriptableConverter() {
}
function checkDecode(converter, charset, inText, expectedText) {
let manager = Cc["@mozilla.org/charset-converter-manager;1"].getService(
const manager = Cc["@mozilla.org/charset-converter-manager;1"].getService(
Ci.nsICharsetConverterManager
);
@ -30,7 +30,7 @@ function checkDecode(converter, charset, inText, expectedText) {
}
function checkEncode(converter, charset, inText, expectedText) {
let manager = Cc["@mozilla.org/charset-converter-manager;1"].getService(
const manager = Cc["@mozilla.org/charset-converter-manager;1"].getService(
Ci.nsICharsetConverterManager
);

Просмотреть файл

@ -19,7 +19,7 @@ var { localAccountUtils } = ChromeUtils.import(
);
// Load the test components.
let contracts = [
const contracts = [
{
contractID: "@mozilla.org/jsaccount/testjafoourl;1",
classID: "{73F98539-A59F-4F6F-9A72-D83A08646C23}",
@ -37,9 +37,9 @@ let contracts = [
},
];
let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
for (let { contractID, classID, source } of contracts) {
let scope = {};
const registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
for (const { contractID, classID, source } of contracts) {
const scope = {};
Services.scriptloader.loadSubScript(
Services.io.newFileURI(do_get_file(source)).spec,
scope

Просмотреть файл

@ -67,7 +67,7 @@ function setupServerDaemon(debugOption) {
function createPop3ServerAndLocalFolders(port, hostname = "localhost") {
localAccountUtils.loadLocalMailAccount();
let server = localAccountUtils.create_incoming_server(
const server = localAccountUtils.create_incoming_server(
"pop3",
port,
"fred",
@ -162,7 +162,7 @@ function do_check_transaction(real, expected) {
}
function create_temporary_directory() {
let directory = Services.dirsvc.get("TmpD", Ci.nsIFile);
const directory = Services.dirsvc.get("TmpD", Ci.nsIFile);
directory.append("mailFolder");
directory.createUnique(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0700", 8));
return directory;
@ -172,8 +172,8 @@ function create_sub_folders(parent, subFolders) {
parent.leafName = parent.leafName + ".sbd";
parent.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0700", 8));
for (let folder in subFolders) {
let subFolder = parent.clone();
for (const folder in subFolders) {
const subFolder = parent.clone();
subFolder.append(subFolders[folder].name);
subFolder.create(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt("0600", 8));
if (subFolders[folder].subFolders) {
@ -183,13 +183,13 @@ function create_sub_folders(parent, subFolders) {
}
function create_mail_directory(subFolders) {
let root = create_temporary_directory();
const root = create_temporary_directory();
for (let folder in subFolders) {
for (const folder in subFolders) {
if (!subFolders[folder].subFolders) {
continue;
}
let directory = root.clone();
const directory = root.clone();
directory.append(subFolders[folder].name);
create_sub_folders(directory, subFolders[folder].subFolders);
}
@ -198,8 +198,8 @@ function create_mail_directory(subFolders) {
}
function setup_mailbox(type, mailboxPath) {
let user = Services.uuid.generateUUID().toString();
let incomingServer = MailServices.accounts.createIncomingServer(
const user = Services.uuid.generateUUID().toString();
const incomingServer = MailServices.accounts.createIncomingServer(
user,
"Local Folder",
type

Просмотреть файл

@ -33,29 +33,29 @@ function setupServerDaemon(handler) {
return new SMTP_RFC2821_handler(d);
};
}
let daemon = new SmtpDaemon();
let server = new nsMailServer(handler, daemon);
const daemon = new SmtpDaemon();
const server = new nsMailServer(handler, daemon);
return [daemon, server];
}
function getBasicSmtpServer() {
// We need to have a default account for MAPI.
localAccountUtils.loadLocalMailAccount();
let incoming = localAccountUtils.create_incoming_server(
const incoming = localAccountUtils.create_incoming_server(
"pop3",
POP3_PORT,
"user",
"password"
);
let server = localAccountUtils.create_outgoing_server(
const server = localAccountUtils.create_outgoing_server(
SMTP_PORT,
"user",
"password"
);
// We also need to have a working identity, including an email address.
let account = MailServices.accounts.FindAccountForServer(incoming);
const account = MailServices.accounts.FindAccountForServer(incoming);
localAccountUtils.associate_servers(account, server, true);
let identity = account.defaultIdentity;
const identity = account.defaultIdentity;
identity.email = "tinderbox@tinderbox.invalid";
MailServices.accounts.defaultAccount = account;
@ -80,15 +80,15 @@ function loadMAPILibrary() {
Services.prefs.setBoolPref("mapi.blind-send.warn", false);
// The macros that are used in the definitions
let WINAPI = ctypes.winapi_abi;
let ULONG = ctypes.unsigned_long;
let LHANDLE = ULONG.ptr;
let LPSTR = ctypes.char.ptr;
let LPVOID = ctypes.voidptr_t;
let FLAGS = ctypes.unsigned_long;
const WINAPI = ctypes.winapi_abi;
const ULONG = ctypes.unsigned_long;
const LHANDLE = ULONG.ptr;
const LPSTR = ctypes.char.ptr;
const LPVOID = ctypes.voidptr_t;
const FLAGS = ctypes.unsigned_long;
// Define all of the MAPI structs we need to use.
let functionData = {};
const functionData = {};
functionData.MapiRecipDesc = new ctypes.StructType("gMapi.MapiRecipDesc", [
{ ulReserved: ULONG },
{ ulRecipClass: ULONG },
@ -97,7 +97,7 @@ function loadMAPILibrary() {
{ ulEIDSize: ULONG },
{ lpEntryID: LPVOID },
]);
let lpMapiRecipDesc = functionData.MapiRecipDesc.ptr;
const lpMapiRecipDesc = functionData.MapiRecipDesc.ptr;
functionData.MapiFileDesc = new ctypes.StructType("gMapi.MapiFileDesc", [
{ ulReserved: ULONG },
@ -107,7 +107,7 @@ function loadMAPILibrary() {
{ lpszFileName: LPSTR },
{ lpFileType: LPVOID },
]);
let lpMapiFileDesc = functionData.MapiFileDesc.ptr;
const lpMapiFileDesc = functionData.MapiFileDesc.ptr;
functionData.MapiMessage = new ctypes.StructType("gMapi.MapiMessage", [
{ ulReserved: ULONG },
@ -123,11 +123,11 @@ function loadMAPILibrary() {
{ nFileCount: ULONG },
{ lpFiles: lpMapiFileDesc },
]);
let lpMapiMessage = functionData.MapiMessage.ptr;
const lpMapiMessage = functionData.MapiMessage.ptr;
// Load the MAPI library. We're using our definition instead of the global
// MAPI definition.
let mapi = ctypes.open("mozMapi32.dll");
const mapi = ctypes.open("mozMapi32.dll");
// Load the MAPI functions,
// see https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_types

Просмотреть файл

@ -53,7 +53,7 @@ function require(path) {
let file;
if (path.startsWith("test/")) {
let name = path.substring("test/".length);
const name = path.substring("test/".length);
file = "resource://testing-common/jsmime/" + name + ".js";
} else {
file = "resource:///modules/jsmime/" + path + ".js";
@ -99,17 +99,17 @@ function MochaSuite(name) {
// The real code for running a suite of tests, written as async function.
MochaSuite.prototype._runSuite = async function () {
info("Running suite " + this.name);
for (let setup_ of this.setup) {
for (const setup_ of this.setup) {
await runFunction(setup_);
}
for (let test_ of this.tests) {
for (const test_ of this.tests) {
info("Running test " + test_.name);
await runFunction(test_.test);
}
for (let suite_ of this.suites) {
for (const suite_ of this.suites) {
await suite_.runSuite();
}
for (let fn of this.teardown) {
for (const fn of this.teardown) {
await runFunction(fn);
}
info("Finished suite " + this.name);
@ -122,7 +122,7 @@ MochaSuite.prototype.runSuite = function () {
// Run the given function, returning a promise of when the test will complete.
function runFunction(fn) {
let completed = new Promise(function (resolve, reject) {
const completed = new Promise(function (resolve, reject) {
function onEnd(error) {
if (error !== undefined) {
reject(error);
@ -149,7 +149,7 @@ function suite(name, tests) {
if (/[\x80-]/.exec(name)) {
name = "<unprintable name>";
}
let suiteParent = currentSuite;
const suiteParent = currentSuite;
currentSuite = new MochaSuite(name);
suiteParent.suites.push(currentSuite);
tests();

Просмотреть файл

@ -32,15 +32,15 @@ registerCleanupFunction(function () {
});
function apply_mime_conversion(msgUri, smimeHeaderSink) {
let service = MailServices.messageServiceFromURI(msgUri);
const service = MailServices.messageServiceFromURI(msgUri);
// This is what we listen on in the end.
let listener = new PromiseTestUtils.PromiseStreamListener();
const listener = new PromiseTestUtils.PromiseStreamListener();
// Make the underlying channel--we need this for the converter parameter.
let url = service.getUrlForUri(msgUri);
const url = service.getUrlForUri(msgUri);
let channel = Services.io.newChannelFromURI(
const channel = Services.io.newChannelFromURI(
url,
null,
Services.scriptSecurityManager.getSystemPrincipal(),
@ -51,7 +51,7 @@ function apply_mime_conversion(msgUri, smimeHeaderSink) {
channel.QueryInterface(Ci.nsIMailChannel).smimeHeaderSink = smimeHeaderSink;
// Make the MIME converter, using the listener we first set up.
let converter = Cc["@mozilla.org/streamConverters;1"]
const converter = Cc["@mozilla.org/streamConverters;1"]
.getService(Ci.nsIStreamConverterService)
.asyncConvertData("message/rfc822", "text/html", listener, channel);

Просмотреть файл

@ -132,14 +132,14 @@ function setupLocalServer(port, host = "localhost") {
if (_server != null) {
return _server;
}
let serverAndAccount = localAccountUtils.create_incoming_server_and_account(
const serverAndAccount = localAccountUtils.create_incoming_server_and_account(
"nntp",
port,
null,
null,
host
);
let server = serverAndAccount.server;
const server = serverAndAccount.server;
subscribeServer(server);
_server = server;