summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/composition/browser_font_size.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/composition/browser_font_size.js')
-rw-r--r--comm/mail/test/browser/composition/browser_font_size.js333
1 files changed, 333 insertions, 0 deletions
diff --git a/comm/mail/test/browser/composition/browser_font_size.js b/comm/mail/test/browser/composition/browser_font_size.js
new file mode 100644
index 0000000000..a6113188c7
--- /dev/null
+++ b/comm/mail/test/browser/composition/browser_font_size.js
@@ -0,0 +1,333 @@
+/* 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 font size in messages.
+ */
+
+var { close_compose_window, open_compose_new_mail, FormatHelper } =
+ ChromeUtils.import("resource://testing-common/mozmill/ComposeHelpers.jsm");
+
+add_task(async function test_font_size() {
+ let controller = open_compose_new_mail();
+ let formatHelper = new FormatHelper(controller.window);
+
+ const NO_SIZE = formatHelper.NO_SIZE;
+ const MIN_SIZE = formatHelper.MIN_SIZE;
+ const MAX_SIZE = formatHelper.MAX_SIZE;
+
+ // Before focus, disabled.
+ Assert.ok(
+ formatHelper.sizeSelector.disabled,
+ "Selector should be disabled with no focus"
+ );
+
+ formatHelper.focusMessage();
+ Assert.ok(
+ !formatHelper.sizeSelector.disabled,
+ "Selector should be enabled with focus"
+ );
+
+ let firstText = "no size";
+ let secondText = "with size";
+
+ for (let size = MIN_SIZE; size <= MAX_SIZE; size++) {
+ if (size === NO_SIZE) {
+ continue;
+ }
+ await formatHelper.assertShownSize(NO_SIZE, `No size at start (${size})`);
+
+ await formatHelper.typeInMessage(firstText);
+ formatHelper.assertMessageParagraph(
+ [firstText],
+ `No size at start after typing (${size})`
+ );
+
+ // Select through toolbar.
+ await formatHelper.selectSize(size);
+ await formatHelper.assertShownSize(size, `Changed to size ${size}`);
+
+ await formatHelper.typeInMessage(secondText);
+ await formatHelper.assertShownSize(size, `Still size ${size} when typing`);
+ formatHelper.assertMessageParagraph(
+ [firstText, { text: secondText, size }],
+ `size ${size} on second half`
+ );
+
+ // Test text selections.
+ for (let [start, end, forward, expect] of [
+ // Make sure we expect changes, so the test does not capture the previous
+ // state.
+ [0, null, true, NO_SIZE], // At start.
+ [firstText.length + 1, null, true, size], // In the size region.
+ // See Bug 1718227
+ // [0, firstText.length + secondText.length, true, null], // Mixed.
+ [firstText.length, null, true, NO_SIZE], // On boundary travelling forward.
+ [firstText.length, null, false, size], // On boundary travelling backward.
+ ]) {
+ await formatHelper.selectTextRange(start, end, forward);
+ await formatHelper.assertShownSize(
+ expect,
+ `Selecting text with size ${size}, from ${start} to ${end} ` +
+ `${forward ? "forwards" : "backwards"}`
+ );
+ }
+
+ // Select mixed.
+ await formatHelper.selectTextRange(3, firstText.length + 1);
+ // See Bug 1718227
+ // await formatHelper.assertShownSize(null, `Mixed selection (${size})`);
+
+ // Select through Format menu.
+ let item = formatHelper.getSizeMenuItem(size);
+ await formatHelper.selectFromFormatSubMenu(item, formatHelper.sizeMenu);
+ await formatHelper.assertShownSize(size, `size ${size} on more`);
+ formatHelper.assertMessageParagraph(
+ [firstText.slice(0, 3), { text: firstText.slice(3) + secondText, size }],
+ `size ${size} on more`
+ );
+
+ await formatHelper.selectSize(NO_SIZE);
+ await formatHelper.assertShownSize(NO_SIZE, `Cleared some size ${size}`);
+ formatHelper.assertMessageParagraph(
+ [firstText + secondText.slice(0, 1), { text: secondText.slice(1), size }],
+ `Cleared some size ${size}`
+ );
+
+ await formatHelper.emptyParagraph();
+ }
+
+ close_compose_window(controller);
+});
+
+add_task(async function test_font_size_increment() {
+ let controller = open_compose_new_mail();
+ let formatHelper = new FormatHelper(controller.window);
+
+ const NO_SIZE = formatHelper.NO_SIZE;
+ const MIN_SIZE = formatHelper.MIN_SIZE;
+ const MAX_SIZE = formatHelper.MAX_SIZE;
+
+ // NOTE: size=3 corresponds to no set size
+ let increaseButton = formatHelper.increaseSizeButton;
+ let decreaseButton = formatHelper.decreaseSizeButton;
+ let increaseItem = formatHelper.increaseSizeMenuItem;
+ let decreaseItem = formatHelper.decreaseSizeMenuItem;
+
+ Assert.ok(
+ increaseButton.disabled,
+ "Increase button should be disabled with no focus"
+ );
+ Assert.ok(
+ decreaseButton.disabled,
+ "Decrease button should be disabled with no focus"
+ );
+
+ formatHelper.focusMessage();
+
+ Assert.ok(
+ !increaseButton.disabled,
+ "Increase button should be enabled with focus"
+ );
+ Assert.ok(
+ !decreaseButton.disabled,
+ "Decrease button should be enabled with focus"
+ );
+
+ async function assertShownAndDisabled(formatHelper, size, message) {
+ await formatHelper.assertShownSize(size, message);
+ switch (size) {
+ case MAX_SIZE:
+ Assert.ok(
+ increaseButton.disabled,
+ `${message}: Increase button should be disabled at max size ${size}`
+ );
+ Assert.ok(
+ !decreaseButton.disabled,
+ `${message}: Decrease button should be enabled at max size ${size}`
+ );
+ await formatHelper.assertWithFormatSubMenu(
+ formatHelper.sizeMenu,
+ () => increaseItem.disabled && !decreaseItem.disabled,
+ `Only the increase menu item should be disabled at max size ${size}`
+ );
+ break;
+ case MIN_SIZE:
+ Assert.ok(
+ !increaseButton.disabled,
+ `${message}: Increase button should be enabled at min size ${size}`
+ );
+ Assert.ok(
+ decreaseButton.disabled,
+ `${message}: Decrease button should be disabled at min size ${size}`
+ );
+ await formatHelper.assertWithFormatSubMenu(
+ formatHelper.sizeMenu,
+ () => !increaseItem.disabled && decreaseItem.disabled,
+ `Only the decrease menu item should be disabled at min size ${size}`
+ );
+ break;
+ default:
+ Assert.ok(
+ !increaseButton.disabled,
+ `${message}: Increase button should be enabled at size ${size}`
+ );
+ Assert.ok(
+ !decreaseButton.disabled,
+ `${message}: Decrease button should be enabled at size ${size}`
+ );
+ await formatHelper.assertWithFormatSubMenu(
+ formatHelper.sizeMenu,
+ () => !increaseItem.disabled && !decreaseItem.disabled,
+ `No menu items should be disabled at size ${size}`
+ );
+ break;
+ }
+ }
+
+ async function assertAndType(formatHelper, size, text, content, message) {
+ await assertShownAndDisabled(
+ formatHelper,
+ size,
+ `${message}: At size ${size}`
+ );
+
+ await formatHelper.typeInMessage(text);
+ await assertShownAndDisabled(
+ formatHelper,
+ size,
+ `${message}: At size ${size} and typing`
+ );
+
+ content.push({ text, size });
+ formatHelper.assertMessageParagraph(
+ content,
+ `${message}: Added size ${size}`
+ );
+ }
+
+ let content = [];
+ let size = NO_SIZE;
+
+ let text = "start";
+ await formatHelper.typeInMessage(text);
+ content.push(text);
+ formatHelper.assertMessageParagraph(content, "Start with no font");
+
+ await assertShownAndDisabled(formatHelper, size, "At start");
+
+ for (size++; size <= MAX_SIZE; size++) {
+ increaseButton.click();
+ await assertAndType(
+ formatHelper,
+ size,
+ `step up to ${size}`,
+ content,
+ `Increase step with button`
+ );
+ }
+
+ // Reverse direction.
+ for (size = MAX_SIZE - 1; size > NO_SIZE; size--) {
+ decreaseButton.click();
+ await assertAndType(
+ formatHelper,
+ size,
+ `step down to ${size}`,
+ content,
+ `Decrease step with button`
+ );
+ }
+
+ decreaseButton.click();
+ text = "middle";
+ await formatHelper.typeInMessage(text);
+ content.push(text);
+ await assertShownAndDisabled(formatHelper, size, "At middle");
+
+ for (size--; size >= MIN_SIZE; size--) {
+ // Use menu item.
+ await formatHelper.selectFromFormatSubMenu(
+ decreaseItem,
+ formatHelper.sizeMenu
+ );
+ await assertAndType(
+ formatHelper,
+ size,
+ `step down to ${size}`,
+ content,
+ `Decrease step with menu item`
+ );
+ }
+
+ for (size = MIN_SIZE + 1; size < NO_SIZE; size++) {
+ // Use menu item.
+ await formatHelper.selectFromFormatSubMenu(
+ increaseItem,
+ formatHelper.sizeMenu
+ );
+ await assertAndType(
+ formatHelper,
+ size,
+ `step up to ${size}`,
+ content,
+ `Increase step with menu item`
+ );
+ }
+
+ await formatHelper.emptyParagraph();
+
+ // Selecting max or min sizes directly also enables or disables the
+ // increase/decrease buttons and items.
+ await formatHelper.selectSize(MAX_SIZE);
+ await assertShownAndDisabled(formatHelper, MAX_SIZE, "Direct to max size");
+ await formatHelper.selectSize(NO_SIZE);
+ await assertShownAndDisabled(formatHelper, NO_SIZE, "Direct to no size");
+ await formatHelper.selectSize(MIN_SIZE);
+ await assertShownAndDisabled(formatHelper, MIN_SIZE, "Direct to min size");
+
+ // Type at min size.
+ text = "text to select";
+ await formatHelper.typeInMessage(text);
+ formatHelper.assertMessageParagraph([{ text, size: MIN_SIZE }], "Min text");
+ // Select all.
+ await formatHelper.selectTextRange(0, text.length);
+
+ for (size = MIN_SIZE + 1; size <= MAX_SIZE; size++) {
+ increaseButton.click();
+ await assertShownAndDisabled(
+ formatHelper,
+ size,
+ `Increase selection to size ${size}`
+ );
+ if (size === NO_SIZE) {
+ formatHelper.assertMessageParagraph([text], "Increase to middle size");
+ } else {
+ formatHelper.assertMessageParagraph(
+ [{ text, size }],
+ `Increase to size ${size}`
+ );
+ }
+ }
+
+ // Reverse
+ for (size = MAX_SIZE - 1; size >= MIN_SIZE; size--) {
+ decreaseButton.click();
+ await assertShownAndDisabled(
+ formatHelper,
+ size,
+ `Decrease selection to size ${size}`
+ );
+ if (size === NO_SIZE) {
+ formatHelper.assertMessageParagraph([text], "Decrease to middle size");
+ } else {
+ formatHelper.assertMessageParagraph(
+ [{ text, size }],
+ `Decrease to size ${size}`
+ );
+ }
+ }
+
+ close_compose_window(controller);
+});