summaryrefslogtreecommitdiffstats
path: root/comm/calendar/test/browser/preferences
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/test/browser/preferences')
-rw-r--r--comm/calendar/test/browser/preferences/browser.ini16
-rw-r--r--comm/calendar/test/browser/preferences/browser_alarmDefaultValue.js176
-rw-r--r--comm/calendar/test/browser/preferences/browser_categoryColors.js90
-rw-r--r--comm/calendar/test/browser/preferences/head.js64
4 files changed, 346 insertions, 0 deletions
diff --git a/comm/calendar/test/browser/preferences/browser.ini b/comm/calendar/test/browser/preferences/browser.ini
new file mode 100644
index 0000000000..a06213b220
--- /dev/null
+++ b/comm/calendar/test/browser/preferences/browser.ini
@@ -0,0 +1,16 @@
+[default]
+head = head.js
+prefs =
+ calendar.item.promptDelete=false
+ calendar.timezone.local=UTC
+ calendar.timezone.useSystemTimezone=false
+ calendar.week.start=0
+ mail.provider.suppress_dialog_on_startup=true
+ mail.spotlight.firstRunDone=true
+ mail.winsearch.firstRunDone=true
+ mailnews.start_page.override_url=about:blank
+ mailnews.start_page.url=about:blank
+subsuite = thunderbird
+
+[browser_alarmDefaultValue.js]
+[browser_categoryColors.js]
diff --git a/comm/calendar/test/browser/preferences/browser_alarmDefaultValue.js b/comm/calendar/test/browser/preferences/browser_alarmDefaultValue.js
new file mode 100644
index 0000000000..b1cde7cf11
--- /dev/null
+++ b/comm/calendar/test/browser/preferences/browser_alarmDefaultValue.js
@@ -0,0 +1,176 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Test default alarm settings for events and tasks
+ */
+
+var { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+
+var { CalendarTestUtils } = ChromeUtils.import(
+ "resource://testing-common/calendar/CalendarTestUtils.jsm"
+);
+var { cancelItemDialog } = ChromeUtils.import(
+ "resource://testing-common/calendar/ItemEditingHelpers.jsm"
+);
+
+const DEFVALUE = 43;
+
+add_task(async function testDefaultAlarms() {
+ let calendar = CalendarTestUtils.createCalendar("Mochitest", "memory");
+ calendar.setProperty("calendar-main-default", true);
+ registerCleanupFunction(async () => {
+ CalendarTestUtils.removeCalendar(calendar);
+ });
+
+ let localeUnitString = cal.l10n.getCalString("unitDays");
+ let unitString = PluralForm.get(DEFVALUE, localeUnitString).replace("#1", DEFVALUE);
+ let alarmString = (...args) => cal.l10n.getString("calendar-alarms", ...args);
+ let originStringEvent = alarmString("reminderCustomOriginBeginBeforeEvent");
+ let originStringTask = alarmString("reminderCustomOriginBeginBeforeTask");
+ let expectedEventReminder = alarmString("reminderCustomTitle", [unitString, originStringEvent]);
+ let expectedTaskReminder = alarmString("reminderCustomTitle", [unitString, originStringTask]);
+
+ // Configure the preferences.
+ let { prefsWindow, prefsDocument } = await openNewPrefsTab("paneCalendar", "defaultsnoozelength");
+ await handlePrefTab(prefsWindow, prefsDocument);
+
+ // Create New Event.
+ await CalendarTestUtils.openCalendarTab(window);
+
+ let { dialogWindow, iframeWindow, iframeDocument } = await CalendarTestUtils.editNewEvent(window);
+
+ Assert.equal(iframeDocument.querySelector(".item-alarm").value, "custom");
+ let reminderDetails = iframeDocument.querySelector(".reminder-single-alarms-label");
+ Assert.equal(reminderDetails.value, expectedEventReminder);
+
+ let reminderDialogPromise = BrowserTestUtils.promiseAlertDialog(
+ null,
+ "chrome://calendar/content/calendar-event-dialog-reminder.xhtml",
+ { callback: handleReminderDialog }
+ );
+ EventUtils.synthesizeMouseAtCenter(reminderDetails, {}, iframeWindow);
+ await reminderDialogPromise;
+
+ let promptPromise = BrowserTestUtils.promiseAlertDialog("extra1");
+ cancelItemDialog(dialogWindow);
+ await promptPromise;
+
+ // Create New Task.
+ await openTasksTab();
+ ({ dialogWindow, iframeWindow, iframeDocument } = await CalendarTestUtils.editNewTask(window));
+
+ Assert.equal(iframeDocument.querySelector(".item-alarm").value, "custom");
+ reminderDetails = iframeDocument.querySelector(".reminder-single-alarms-label");
+ Assert.equal(reminderDetails.value, expectedTaskReminder);
+
+ reminderDialogPromise = BrowserTestUtils.promiseAlertDialog(
+ null,
+ "chrome://calendar/content/calendar-event-dialog-reminder.xhtml",
+ { callback: handleReminderDialog }
+ );
+ EventUtils.synthesizeMouseAtCenter(reminderDetails, {}, iframeWindow);
+ await reminderDialogPromise;
+
+ promptPromise = BrowserTestUtils.promiseAlertDialog("extra1");
+ cancelItemDialog(dialogWindow);
+ await promptPromise;
+});
+
+async function handlePrefTab(prefsWindow, prefsDocument) {
+ function menuList(id, value) {
+ let list = prefsDocument.getElementById(id);
+ list.scrollIntoView();
+ list.click();
+ list.querySelector(`menuitem[value="${value}"]`).click();
+ }
+ // Turn on alarms for events and tasks.
+ menuList("eventdefalarm", "1");
+ menuList("tododefalarm", "1");
+
+ // Selects "days" as a unit.
+ menuList("tododefalarmunit", "days");
+ menuList("eventdefalarmunit", "days");
+
+ function text(id, value) {
+ let input = prefsDocument.getElementById(id);
+ input.scrollIntoView();
+ EventUtils.synthesizeMouse(input, 5, 5, {}, prefsWindow);
+ Assert.equal(prefsDocument.activeElement, input);
+ EventUtils.synthesizeKey("a", { accelKey: true }, prefsWindow);
+ EventUtils.sendString(value, prefsWindow);
+ }
+ // Sets default alarm length for events to DEFVALUE.
+ text("eventdefalarmlen", DEFVALUE.toString());
+ text("tododefalarmlen", DEFVALUE.toString());
+
+ Assert.equal(Services.prefs.getIntPref("calendar.alarms.onforevents"), 1);
+ Assert.equal(Services.prefs.getIntPref("calendar.alarms.eventalarmlen"), DEFVALUE);
+ Assert.equal(Services.prefs.getStringPref("calendar.alarms.eventalarmunit"), "days");
+ Assert.equal(Services.prefs.getIntPref("calendar.alarms.onfortodos"), 1);
+ Assert.equal(Services.prefs.getIntPref("calendar.alarms.todoalarmlen"), DEFVALUE);
+ Assert.equal(Services.prefs.getStringPref("calendar.alarms.todoalarmunit"), "days");
+}
+
+async function handleReminderDialog(remindersWindow) {
+ await new Promise(remindersWindow.setTimeout);
+ let remindersDocument = remindersWindow.document;
+
+ let listbox = remindersDocument.getElementById("reminder-listbox");
+ Assert.equal(listbox.selectedCount, 1);
+ Assert.equal(listbox.selectedItem.reminder.offset.days, DEFVALUE);
+
+ EventUtils.synthesizeMouseAtCenter(
+ remindersDocument.getElementById("reminder-new-button"),
+ {},
+ remindersWindow
+ );
+ Assert.equal(listbox.itemCount, 2);
+ Assert.equal(listbox.selectedCount, 1);
+ Assert.equal(listbox.selectedItem.reminder.offset.days, DEFVALUE);
+
+ function text(id, value) {
+ let input = remindersDocument.getElementById(id);
+ EventUtils.synthesizeMouse(input, 5, 5, {}, remindersWindow);
+ Assert.equal(remindersDocument.activeElement, input);
+ EventUtils.synthesizeKey("a", { accelKey: true }, remindersWindow);
+ EventUtils.sendString(value, remindersWindow);
+ }
+ text("reminder-length", "20");
+ Assert.equal(listbox.selectedItem.reminder.offset.days, 20);
+
+ EventUtils.synthesizeMouseAtCenter(listbox, {}, remindersWindow);
+ EventUtils.synthesizeKey("VK_UP", {}, remindersWindow);
+ Assert.equal(listbox.selectedIndex, 0);
+
+ Assert.equal(listbox.selectedItem.reminder.offset.days, DEFVALUE);
+
+ remindersDocument.querySelector("dialog").getButton("accept").click();
+}
+
+async function openTasksTab() {
+ let tabmail = document.getElementById("tabmail");
+ let tasksMode = tabmail.tabModes.tasks;
+
+ if (tasksMode.tabs.length == 1) {
+ tabmail.selectedTab = tasksMode.tabs[0];
+ } else {
+ let tasksTabButton = document.getElementById("tasksButton");
+ EventUtils.synthesizeMouseAtCenter(tasksTabButton, { clickCount: 1 });
+ }
+
+ is(tasksMode.tabs.length, 1, "tasks tab is open");
+ is(tabmail.selectedTab, tasksMode.tabs[0], "tasks tab is selected");
+
+ await new Promise(resolve => setTimeout(resolve));
+}
+
+registerCleanupFunction(function () {
+ Services.prefs.clearUserPref("calendar.alarms.onforevents");
+ Services.prefs.clearUserPref("calendar.alarms.eventalarmlen");
+ Services.prefs.clearUserPref("calendar.alarms.eventalarmunit");
+ Services.prefs.clearUserPref("calendar.alarms.onfortodos");
+ Services.prefs.clearUserPref("calendar.alarms.todoalarmlen");
+ Services.prefs.clearUserPref("calendar.alarms.todoalarmunit");
+});
diff --git a/comm/calendar/test/browser/preferences/browser_categoryColors.js b/comm/calendar/test/browser/preferences/browser_categoryColors.js
new file mode 100644
index 0000000000..29ad21ce13
--- /dev/null
+++ b/comm/calendar/test/browser/preferences/browser_categoryColors.js
@@ -0,0 +1,90 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+
+var { CalendarTestUtils } = ChromeUtils.import(
+ "resource://testing-common/calendar/CalendarTestUtils.jsm"
+);
+
+add_task(async function testCategoryColors() {
+ let calendar = CalendarTestUtils.createCalendar("Mochitest", "memory");
+
+ registerCleanupFunction(async () => {
+ CalendarTestUtils.removeCalendar(calendar);
+ });
+
+ let { prefsWindow, prefsDocument } = await openNewPrefsTab("paneCalendar", "categorieslist");
+
+ let listBox = prefsDocument.getElementById("categorieslist");
+ Assert.equal(listBox.itemChildren.length, 22);
+
+ for (let item of listBox.itemChildren) {
+ info(`${item.firstElementChild.value}: ${item.lastElementChild.style.backgroundColor}`);
+ Assert.ok(item.lastElementChild.style.backgroundColor);
+ }
+
+ // Edit the name and colour of a built-in category.
+
+ let subDialogPromise = BrowserTestUtils.waitForEvent(
+ prefsWindow.gSubDialog._dialogStack,
+ "dialogopen"
+ );
+
+ EventUtils.synthesizeMouse(listBox, 5, 5, {}, prefsWindow);
+ Assert.equal(listBox.selectedIndex, 0);
+ EventUtils.synthesizeMouseAtCenter(prefsDocument.getElementById("editCButton"), {}, prefsWindow);
+
+ await subDialogPromise;
+
+ let subDialogBrowser = prefsWindow.gSubDialog._topDialog._frame;
+ let subDialogDocument = subDialogBrowser.contentDocument;
+ subDialogDocument.getElementById("categoryName").value = "ZZZ Mochitest";
+ subDialogDocument.getElementById("categoryColor").value = "#00CC00";
+ subDialogDocument.body.firstElementChild.getButton("accept").click();
+
+ let listItem = listBox.itemChildren[listBox.itemCount - 1];
+ Assert.equal(listBox.selectedItem, listItem);
+ Assert.equal(listItem.firstElementChild.value, "ZZZ Mochitest");
+ Assert.equal(listItem.lastElementChild.style.backgroundColor, "rgb(0, 204, 0)");
+ Assert.equal(Services.prefs.getCharPref("calendar.category.color.zzz_mochitest"), "#00cc00");
+
+ // Remove the colour of a built-in category.
+
+ subDialogPromise = BrowserTestUtils.waitForEvent(
+ prefsWindow.gSubDialog._dialogStack,
+ "dialogopen"
+ );
+
+ EventUtils.synthesizeMouse(listBox, 5, 5, {}, prefsWindow);
+ EventUtils.synthesizeKey("VK_HOME", {}, prefsWindow);
+ Assert.equal(listBox.selectedIndex, 0);
+ let itemName = listBox.itemChildren[0].firstElementChild.value;
+ EventUtils.synthesizeMouseAtCenter(prefsDocument.getElementById("editCButton"), {}, prefsWindow);
+
+ await subDialogPromise;
+
+ subDialogBrowser = prefsWindow.gSubDialog._topDialog._frame;
+ await new Promise(subDialogBrowser.contentWindow.setTimeout);
+ subDialogDocument = subDialogBrowser.contentDocument;
+ subDialogDocument.getElementById("useColor").checked = false;
+ subDialogDocument.body.firstElementChild.getButton("accept").click();
+
+ listItem = listBox.itemChildren[0];
+ Assert.equal(listBox.selectedItem, listItem);
+ Assert.equal(listItem.firstElementChild.value, itemName);
+ Assert.equal(listItem.lastElementChild.style.backgroundColor, "");
+ Assert.equal(Services.prefs.getCharPref(`calendar.category.color.${itemName.toLowerCase()}`), "");
+
+ // Remove the added category.
+
+ EventUtils.synthesizeMouse(listBox, 5, 5, {}, prefsWindow);
+ EventUtils.synthesizeKey("VK_END", {}, prefsWindow);
+ Assert.equal(listBox.selectedIndex, listBox.itemCount - 1);
+ EventUtils.synthesizeMouseAtCenter(
+ prefsDocument.getElementById("deleteCButton"),
+ {},
+ prefsWindow
+ );
+});
diff --git a/comm/calendar/test/browser/preferences/head.js b/comm/calendar/test/browser/preferences/head.js
new file mode 100644
index 0000000000..8d6d5d3ab5
--- /dev/null
+++ b/comm/calendar/test/browser/preferences/head.js
@@ -0,0 +1,64 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* globals openPreferencesTab */
+
+async function openNewPrefsTab(paneID, scrollPaneTo, otherArgs) {
+ let tabmail = document.getElementById("tabmail");
+ let prefsTabMode = tabmail.tabModes.preferencesTab;
+
+ Assert.equal(prefsTabMode.tabs.length, 0, "Prefs tab is not open");
+
+ let prefsDocument = await new Promise(resolve => {
+ Services.obs.addObserver(function documentLoaded(subject) {
+ if (subject.URL.startsWith("about:preferences")) {
+ Services.obs.removeObserver(documentLoaded, "chrome-document-loaded");
+ resolve(subject);
+ }
+ }, "chrome-document-loaded");
+ openPreferencesTab(paneID, scrollPaneTo, otherArgs);
+ });
+ Assert.ok(prefsDocument.URL.startsWith("about:preferences"), "Prefs tab is open");
+
+ prefsDocument = prefsTabMode.tabs[0].browser.contentDocument;
+ let prefsWindow = prefsDocument.ownerGlobal;
+ prefsWindow.resizeTo(screen.availWidth, screen.availHeight);
+ if (paneID) {
+ await new Promise(resolve => prefsWindow.setTimeout(resolve));
+ Assert.equal(prefsWindow.gLastCategory.category, paneID, `Selected pane is ${paneID}`);
+ } else {
+ // If we don't wait here for other scripts to run, they
+ // could be in a bad state if our test closes the tab.
+ await new Promise(resolve => prefsWindow.setTimeout(resolve));
+ }
+
+ registerCleanupOnce();
+
+ await new Promise(resolve => prefsWindow.setTimeout(resolve));
+ if (scrollPaneTo) {
+ Assert.greater(
+ prefsDocument.getElementById("preferencesContainer").scrollTop,
+ 0,
+ "Prefs page did scroll when it was supposed to"
+ );
+ }
+ return { prefsDocument, prefsWindow };
+}
+
+function registerCleanupOnce() {
+ if (registerCleanupOnce.alreadyRegistered) {
+ return;
+ }
+ registerCleanupFunction(closePrefsTab);
+ registerCleanupOnce.alreadyRegistered = true;
+}
+
+async function closePrefsTab() {
+ info("Closing prefs tab");
+ let tabmail = document.getElementById("tabmail");
+ let prefsTab = tabmail.tabModes.preferencesTab.tabs[0];
+ if (prefsTab) {
+ tabmail.closeTab(prefsTab);
+ }
+}