diff options
Diffstat (limited to 'toolkit/components/printing/tests/browser_print_page_size.js')
-rw-r--r-- | toolkit/components/printing/tests/browser_print_page_size.js | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/toolkit/components/printing/tests/browser_print_page_size.js b/toolkit/components/printing/tests/browser_print_page_size.js new file mode 100644 index 0000000000..699068eab0 --- /dev/null +++ b/toolkit/components/printing/tests/browser_print_page_size.js @@ -0,0 +1,269 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const pdfPrinterName = "Mozilla Save to PDF"; +const someOtherPrinter = "Other Printer"; + +async function changeDestination(helper, dir) { + let picker = helper.get("printer-picker"); + let changed = BrowserTestUtils.waitForEvent(picker, "change"); + + let pickerOpened = BrowserTestUtils.waitForSelectPopupShown(window); + picker.focus(); + EventUtils.sendKey("space", helper.win); + await pickerOpened; + EventUtils.sendKey(dir, window); + EventUtils.sendKey("return", window); + await changed; +} + +add_task(async function testShowAndHidePaperSizeSectionWithPageSize() { + await PrintHelper.withTestPage(async helper => { + await helper.addMockPrinter(someOtherPrinter); + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + helper.assertSettingsMatch({ + printerName: pdfPrinterName, + usePageRuleSizeAsPaperSize: true, + }); + + await helper.openMoreSettings(); + + let paperSize = helper.get("paper-size"); + + ok(BrowserTestUtils.isHidden(paperSize), "Paper size section is hidden"); + + await helper.waitForSettingsEvent(async () => { + await changeDestination(helper, "down"); + }); + await helper.awaitAnimationFrame(); + + helper.assertSettingsMatch({ + printerName: someOtherPrinter, + usePageRuleSizeAsPaperSize: false, + }); + + ok(BrowserTestUtils.isVisible(paperSize), "Paper size section is shown"); + + await helper.closeDialog(); + }, "page_size.html"); +}); + +add_task(async function testShowPaperSizeSectionWithoutPageSize() { + await PrintHelper.withTestPage(async helper => { + await helper.addMockPrinter(someOtherPrinter); + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + helper.assertSettingsMatch({ + printerName: pdfPrinterName, + usePageRuleSizeAsPaperSize: true, + }); + + await helper.openMoreSettings(); + + let paperSize = helper.get("paper-size"); + + ok(BrowserTestUtils.isVisible(paperSize), "Paper size section is shown"); + + await helper.waitForSettingsEvent(async () => { + await changeDestination(helper, "down"); + }); + await helper.awaitAnimationFrame(); + + helper.assertSettingsMatch({ + printerName: someOtherPrinter, + usePageRuleSizeAsPaperSize: false, + }); + + ok( + BrowserTestUtils.isVisible(paperSize), + "Paper size section is still shown" + ); + + await helper.closeDialog(); + }); +}); + +add_task(async function testCustomPageSizePassedToPrinter() { + await PrintHelper.withTestPage(async helper => { + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + is(helper.settings.paperWidth.toFixed(1), "4.0", "Check paperWidth"); + is(helper.settings.paperHeight.toFixed(1), "12.0", "Check paperHeight"); + is( + helper.settings.orientation, + Ci.nsIPrintSettings.kPortraitOrientation, + "Check orientation" + ); + is( + helper.settings.paperSizeUnit, + helper.settings.kPaperSizeInches, + "Check paperSizeUnit" + ); + + await helper.closeDialog(); + }, "page_size.html"); +}); + +add_task(async function testNamedPageSizePassedToPrinter() { + await PrintHelper.withTestPage(async helper => { + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + helper.assertSettingsMatch({ + printerName: pdfPrinterName, + usePageRuleSizeAsPaperSize: true, + }); + + is(helper.settings.paperId, "iso_a5", "Check paper id is A5"); + is( + helper.settings.paperWidth.toFixed(1), + "5.8", + "Check paperWidth is ~148mm (in inches)" + ); + is( + helper.settings.paperHeight.toFixed(1), + "8.3", + "Check paperHeight is ~210mm (in inches)" + ); + is( + helper.settings.paperSizeUnit, + helper.settings.kPaperSizeInches, + "Check paperSizeUnit" + ); + is( + helper.settings.orientation, + Ci.nsIPrintSettings.kPortraitOrientation, + "Check orientation" + ); + await helper.closeDialog(); + }, "page_size_a5.html"); +}); + +add_task(async function testLandscapePageSizePassedToPrinter() { + await PrintHelper.withTestPage(async helper => { + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + helper.assertSettingsMatch({ + printerName: pdfPrinterName, + usePageRuleSizeAsPaperSize: true, + }); + + is(helper.settings.paperId, "iso_a5", "Check paper id is A5"); + is( + helper.settings.orientation, + Ci.nsIPrintSettings.kLandscapeOrientation, + "Check orientation is landscape" + ); + is( + helper.settings.paperWidth.toFixed(1), + "5.8", + "Check paperWidth is ~148mm (in inches)" + ); + is( + helper.settings.paperHeight.toFixed(1), + "8.3", + "Check paperHeight is ~210mm (in inches)" + ); + is( + helper.settings.paperSizeUnit, + helper.settings.kPaperSizeInches, + "Check paperSizeUnit" + ); + + await helper.closeDialog(); + }, "page_size_a5_landscape.html"); +}); + +add_task(async function testZeroSizePassedToPrinter() { + await PrintHelper.withTestPage(async helper => { + await helper.startPrint(); + await helper.setupMockPrint(); + + let pageSize = helper.get("paper-size"); + let orientation = helper.get("orientation"); + + ok(BrowserTestUtils.isVisible(pageSize), "Fallback to page size section"); + ok(BrowserTestUtils.isVisible(orientation), "Orientation picker is shown"); + + await helper.closeDialog(); + }); +}, "page_size_zero.html"); + +add_task(async function testZeroWidthPassedToPrinter() { + await PrintHelper.withTestPage(async helper => { + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + let pageSize = helper.get("paper-size"); + let orientation = helper.get("orientation"); + + ok(BrowserTestUtils.isVisible(pageSize), "Fallback to page size section"); + ok(BrowserTestUtils.isVisible(orientation), "Orientation picker is shown"); + + await helper.closeDialog(); + }); +}, "page_size_zero_width.html"); + +add_task(async function testDefaultSizePassedToPrinter() { + await PrintHelper.withTestPage(async helper => { + await SpecialPowers.pushPrefEnv({ + set: [ + ["print.save_as_pdf.use_page_rule_size_as_paper_size.enabled", true], + ], + }); + await helper.startPrint(); + await helper.setupMockPrint(); + + helper.assertSettingsMatch({ + printerName: pdfPrinterName, + usePageRuleSizeAsPaperSize: true, + }); + + is(helper.settings.paperWidth.toFixed(1), "8.5", "Check paperWidth"); + is(helper.settings.paperHeight.toFixed(1), "11.0", "Check paperHeight"); + is( + helper.settings.paperSizeUnit, + helper.settings.kPaperSizeInches, + "Check paperSizeUnit" + ); + + await helper.closeDialog(); + }); +}); |