gecko-dev/toolkit/components/printing/tests/browser_print_duplex.js

210 строки
6.4 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
function changeToOption(helper, index) {
return helper.waitForSettingsEvent(function() {
let select = helper.get("duplex-select");
select.focus();
select.scrollIntoView({ block: "center" });
EventUtils.sendKey("space", helper.win);
let selectedIndex = select.selectedIndex;
info(`Looking for ${index} from ${selectedIndex}`);
while (selectedIndex != index) {
if (index > selectedIndex) {
EventUtils.sendKey("down", helper.win);
selectedIndex++;
} else {
EventUtils.sendKey("up", helper.win);
selectedIndex--;
}
}
EventUtils.sendKey("return", helper.win);
});
}
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();
});
});