summaryrefslogtreecommitdiffstats
path: root/toolkit/components/printing/tests/browser_print_duplex.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/printing/tests/browser_print_duplex.js')
-rw-r--r--toolkit/components/printing/tests/browser_print_duplex.js212
1 files changed, 212 insertions, 0 deletions
diff --git a/toolkit/components/printing/tests/browser_print_duplex.js b/toolkit/components/printing/tests/browser_print_duplex.js
new file mode 100644
index 0000000000..9db33ce80e
--- /dev/null
+++ b/toolkit/components/printing/tests/browser_print_duplex.js
@@ -0,0 +1,212 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+function changeToOption(helper, index) {
+ return helper.waitForSettingsEvent(async function () {
+ let select = helper.get("duplex-select");
+ select.focus();
+ select.scrollIntoView({ block: "center" });
+
+ let popupOpen = BrowserTestUtils.waitForSelectPopupShown(window);
+ EventUtils.sendKey("space", helper.win);
+ await popupOpen;
+
+ let selectedIndex = select.selectedIndex;
+ info(`Looking for ${index} from ${selectedIndex}`);
+ while (selectedIndex != index) {
+ if (index > selectedIndex) {
+ EventUtils.sendKey("down", window);
+ selectedIndex++;
+ } else {
+ EventUtils.sendKey("up", window);
+ selectedIndex--;
+ }
+ }
+ EventUtils.sendKey("return", window);
+ });
+}
+
+add_task(async function testPDFPrinterIsNonDuplex() {
+ await PrintHelper.withTestPage(async helper => {
+ await helper.startPrint();
+ await helper.openMoreSettings();
+
+ is(
+ helper.settings.printerName,
+ "Mozilla Save to PDF",
+ "Mozilla Save to PDF is the current printer."
+ );
+
+ const duplexSection = helper.get("two-sided-printing");
+ ok(
+ duplexSection.hidden,
+ "The two-sided printing section should be hidden when the printer does not support duplex."
+ );
+
+ helper.assertSettingsMatch({ duplex: Ci.nsIPrintSettings.kDuplexNone });
+
+ await helper.closeDialog();
+ });
+});
+
+add_task(async function testToggleDuplexWithPortraitOrientation() {
+ const mockPrinterName = "DuplexWithPortrait";
+ await PrintHelper.withTestPage(async helper => {
+ const printer = helper.addMockPrinter(mockPrinterName);
+ printer.supportsDuplex = Promise.resolve(true);
+
+ await helper.startPrint();
+ await helper.dispatchSettingsChange({ printerName: mockPrinterName });
+ await helper.awaitAnimationFrame();
+ await helper.openMoreSettings();
+
+ is(
+ helper.settings.printerName,
+ mockPrinterName,
+ "The Fake Printer is current printer"
+ );
+
+ const duplexSection = helper.get("two-sided-printing");
+ ok(
+ !duplexSection.hidden,
+ "The two-sided printing section should not be hidden when the printer supports duplex."
+ );
+
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexNone,
+ });
+
+ await changeToOption(helper, 1);
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnLongEdge,
+ });
+
+ await changeToOption(helper, 2);
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnShortEdge,
+ });
+
+ await changeToOption(helper, 0);
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexNone,
+ });
+
+ await helper.closeDialog();
+ });
+});
+
+add_task(async function testToggleDuplexWithLandscapeOrientation() {
+ const mockPrinterName = "DuplexWithLandscape";
+ await PrintHelper.withTestPage(async helper => {
+ const printer = helper.addMockPrinter(mockPrinterName);
+ printer.supportsDuplex = Promise.resolve(true);
+
+ await helper.startPrint();
+ await helper.dispatchSettingsChange({ printerName: mockPrinterName });
+ await helper.awaitAnimationFrame();
+ await helper.openMoreSettings();
+
+ is(
+ helper.settings.printerName,
+ mockPrinterName,
+ "The Fake Printer is current printer"
+ );
+
+ const duplexSection = helper.get("two-sided-printing");
+ ok(
+ !duplexSection.hidden,
+ "The two-sided printing section should not be hidden when the printer supports duplex."
+ );
+
+ await helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexNone,
+ });
+
+ await helper.dispatchSettingsChange({ orientation: 1 });
+ await helper.awaitAnimationFrame();
+ await helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kLandscapeOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexNone,
+ });
+
+ await changeToOption(helper, 1);
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kLandscapeOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnLongEdge,
+ });
+
+ await changeToOption(helper, 2);
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kLandscapeOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnShortEdge,
+ });
+
+ await changeToOption(helper, 0);
+ helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kLandscapeOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexNone,
+ });
+
+ await helper.closeDialog();
+ });
+});
+
+add_task(async function testSwitchOrientationWithDuplexEnabled() {
+ const mockPrinterName = "ToggleOrientationPrinter";
+ await PrintHelper.withTestPage(async helper => {
+ const printer = helper.addMockPrinter(mockPrinterName);
+ printer.supportsDuplex = Promise.resolve(true);
+
+ await helper.startPrint();
+ await helper.dispatchSettingsChange({ printerName: mockPrinterName });
+ await helper.awaitAnimationFrame();
+ await helper.openMoreSettings();
+
+ is(
+ helper.settings.printerName,
+ mockPrinterName,
+ "The Fake Printer is current printer"
+ );
+
+ const duplexSection = helper.get("two-sided-printing");
+ ok(
+ !duplexSection.hidden,
+ "The two-sided printing section should not be hidden when the printer supports duplex."
+ );
+
+ await helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexNone,
+ });
+
+ await changeToOption(helper, 1);
+
+ await helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnLongEdge,
+ });
+
+ await helper.dispatchSettingsChange({ orientation: 1 });
+ await helper.awaitAnimationFrame();
+ await helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kLandscapeOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnLongEdge,
+ });
+
+ await helper.dispatchSettingsChange({ orientation: 0 });
+ await helper.awaitAnimationFrame();
+ await helper.assertSettingsMatch({
+ orientation: Ci.nsIPrintSettings.kPortraitOrientation,
+ duplex: Ci.nsIPrintSettings.kDuplexFlipOnLongEdge,
+ });
+
+ await helper.closeDialog();
+ });
+});