Commit 63926b72 authored by Nikita Podguzov's avatar Nikita Podguzov Committed by Commit Bot

Print Preview: Move calculation of number of sheets to sidebar

This is needed to reuse this information for MaxSheetsAllowed policy
which is introduced in follow-up CL.

Bug: 1061077
Change-Id: I51cd80c1be6d2ed2a734b47b720a318836779602
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2129552Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Commit-Queue: Nikita Podguzov <nikitapodguzov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#755570}
parent e82b503b
......@@ -37,16 +37,12 @@ Polymer({
managed: Boolean,
/** @private {number} */
sheetCount_: {
type: Number,
computed: 'computeSheetCount_(' +
'settings.pages.*, settings.duplex.*, settings.copies.*)',
},
sheetCount: Number,
/** @private {?string} */
summary_: {
type: String,
computed: 'computeSummary_(sheetCount_, state, destination.id)',
computed: 'computeSummary_(sheetCount, state, destination.id)',
},
},
......@@ -93,33 +89,21 @@ Polymer({
}
},
/**
* @return {number} The number of sheets that will be printed.
* @private
*/
computeSheetCount_() {
let sheets = this.getSettingValue('pages').length;
if (this.getSettingValue('duplex')) {
sheets = Math.ceil(sheets / 2);
}
return sheets * /** @type {number} */ (this.getSettingValue('copies'));
},
/**
* @return {string}
* @private
*/
getSheetsSummary_() {
if (this.sheetCount_ === 0) {
if (this.sheetCount === 0) {
return '';
}
const pageOrSheets = this.isPdfOrDrive_() ? 'Page' : 'Sheets';
const singularOrPlural = this.sheetCount_ > 1 ? 'Plural' : 'Singular';
const singularOrPlural = this.sheetCount > 1 ? 'Plural' : 'Singular';
const label = loadTimeData.getString(
`printPreview${pageOrSheets}Label${singularOrPlural}`);
return loadTimeData.getStringF(
'printPreviewSummaryFormatShort', this.sheetCount_.toLocaleString(),
'printPreviewSummaryFormatShort', this.sheetCount.toLocaleString(),
label);
},
});
......@@ -37,7 +37,7 @@
</style>
<print-preview-header id="header" destination="[[destination]]"
cloud-print-error-message="[[cloudPrintErrorMessage]]"
error="[[error]]" state="[[state]]"
error="[[error]]" sheet-count="[[sheetCount_]]" state="[[state]]"
settings="[[settings]]" managed="[[controlsManaged]]">
</print-preview-header>
<div id="container" show-bottom-shadow>
......
......@@ -104,6 +104,13 @@ Polymer({
computed: 'computeControlsDisabled_(state)',
},
/** @private {number} */
sheetCount_: {
type: Number,
computed: 'computeSheetCount_(' +
'settings.pages.*, settings.duplex.*, settings.copies.*)',
},
/** @private {boolean} */
firstLoad_: {
type: Boolean,
......@@ -162,6 +169,18 @@ Polymer({
return this.state !== State.READY;
},
/**
* @return {number} The number of sheets that will be printed.
* @private
*/
computeSheetCount_() {
let sheets = this.getSettingValue('pages').length;
if (this.getSettingValue('duplex')) {
sheets = Math.ceil(sheets / 2);
}
return sheets * /** @type {number} */ (this.getSettingValue('copies'));
},
/**
* @return {boolean} Whether to show the "More settings" link.
* @private
......
......@@ -11,9 +11,6 @@ header_test.suiteName = 'HeaderTest';
/** @enum {string} */
header_test.TestNames = {
HeaderPrinterTypes: 'header printer types',
HeaderWithDuplex: 'header with duplex',
HeaderWithCopies: 'header with copies',
HeaderWithNup: 'header with nup',
HeaderChangesForState: 'header changes for state',
EnterprisePolicy: 'enterprise policy',
};
......@@ -38,6 +35,7 @@ suite(header_test.suiteName, function() {
'FooName', DestinationConnectionStatus.ONLINE);
header.state = State.READY;
header.managed = false;
header.sheetCount = 1;
fakeDataBind(model, header, 'settings');
document.body.appendChild(header);
});
......@@ -56,44 +54,18 @@ suite(header_test.suiteName, function() {
test(assert(header_test.TestNames.HeaderPrinterTypes), function() {
const summary = header.$$('.summary');
assertEquals('1 sheet of paper', summary.textContent.trim());
header.setSetting('pages', [1, 2, 3]);
header.sheetCount = 3;
assertEquals('3 sheets of paper', summary.textContent.trim());
setPdfDestination();
assertEquals('3 pages', summary.textContent.trim());
header.setSetting('pages', [1]);
header.sheetCount = 1;
assertEquals('1 page', summary.textContent.trim());
// Verify the chrome://print case of a zero length document does not show
// the summary.
header.setSetting('pages', []);
header.sheetCount = 0;
assertEquals('', summary.textContent);
});
// Tests that the message is correctly adjusted with a duplex printer.
test(assert(header_test.TestNames.HeaderWithDuplex), function() {
const summary = header.$$('.summary');
assertEquals('1 sheet of paper', summary.textContent.trim());
header.setSetting('pages', [1, 2, 3]);
assertEquals('3 sheets of paper', summary.textContent.trim());
header.setSetting('duplex', true);
assertEquals('2 sheets of paper', summary.textContent.trim());
header.setSetting('pages', [1, 2]);
assertEquals('1 sheet of paper', summary.textContent.trim());
});
// Tests that the message is correctly adjusted with multiple copies.
test(assert(header_test.TestNames.HeaderWithCopies), function() {
const summary = header.$$('.summary');
assertEquals('1 sheet of paper', summary.textContent.trim());
header.setSetting('copies', 4);
assertEquals('4 sheets of paper', summary.textContent.trim());
header.setSetting('duplex', true);
assertEquals('4 sheets of paper', summary.textContent.trim());
header.setSetting('pages', [1, 2]);
assertEquals('4 sheets of paper', summary.textContent.trim());
header.setSetting('duplex', false);
assertEquals('8 sheets of paper', summary.textContent.trim());
});
// Tests that the correct message is shown for non-READY states, and that
// the print button is disabled appropriately.
test(assert(header_test.TestNames.HeaderChangesForState), function() {
......
......@@ -14,6 +14,8 @@ print_preview_sidebar_test.suiteName = 'PrintPreviewSidebarTest';
/** @enum {string} */
print_preview_sidebar_test.TestNames = {
SettingsSectionsVisibilityChange: 'settings sections visibility change',
SheetCountWithDuplex: 'sheet count with duplex',
SheetCountWithCopies: 'sheet count with copies',
};
suite(print_preview_sidebar_test.suiteName, function() {
......@@ -43,6 +45,8 @@ suite(print_preview_sidebar_test.suiteName, function() {
sidebar = document.createElement('print-preview-sidebar');
sidebar.settings = model.settings;
sidebar.setSetting('duplex', false);
sidebar.pageCount = 1;
fakeDataBind(model, sidebar, 'settings');
document.body.appendChild(sidebar);
sidebar.init(false, 'FooDevice', null);
......@@ -71,4 +75,36 @@ suite(print_preview_sidebar_test.suiteName, function() {
});
});
});
// Tests that number of sheets is correctly calculated if duplex setting is
// enabled.
test(
assert(print_preview_sidebar_test.TestNames.SheetCountWithDuplex),
function() {
const header = sidebar.$$('print-preview-header');
assertEquals(1, header.sheetCount);
sidebar.setSetting('pages', [1, 2, 3]);
assertEquals(3, header.sheetCount);
sidebar.setSetting('duplex', true);
assertEquals(2, header.sheetCount);
sidebar.setSetting('pages', [1, 2]);
assertEquals(1, header.sheetCount);
});
// Tests that number of sheets is correctly calculated if multiple copies
// setting is enabled.
test(
assert(print_preview_sidebar_test.TestNames.SheetCountWithCopies),
function() {
const header = sidebar.$$('print-preview-header');
assertEquals(1, header.sheetCount);
sidebar.setSetting('copies', 4);
assertEquals(4, header.sheetCount);
sidebar.setSetting('duplex', true);
assertEquals(4, header.sheetCount);
sidebar.setSetting('pages', [1, 2]);
assertEquals(4, header.sheetCount);
sidebar.setSetting('duplex', false);
assertEquals(8, header.sheetCount);
});
});
......@@ -89,6 +89,14 @@ TEST_F(
.SettingsSectionsVisibilityChange);
});
TEST_F('PrintPreviewSidebarTest', 'SheetCountWithDuplex', function() {
this.runMochaTest(print_preview_sidebar_test.TestNames.SheetCountWithDuplex);
});
TEST_F('PrintPreviewSidebarTest', 'SheetCountWithCopies', function() {
this.runMochaTest(print_preview_sidebar_test.TestNames.SheetCountWithCopies);
});
// eslint-disable-next-line no-var
var PrintPreviewPagesSettingsTest = class extends PrintPreviewTest {
/** @override */
......@@ -811,14 +819,6 @@ TEST_F('PrintPreviewHeaderTest', 'HeaderPrinterTypes', function() {
this.runMochaTest(header_test.TestNames.HeaderPrinterTypes);
});
TEST_F('PrintPreviewHeaderTest', 'HeaderWithDuplex', function() {
this.runMochaTest(header_test.TestNames.HeaderWithDuplex);
});
TEST_F('PrintPreviewHeaderTest', 'HeaderWithCopies', function() {
this.runMochaTest(header_test.TestNames.HeaderWithCopies);
});
TEST_F('PrintPreviewHeaderTest', 'HeaderChangesForState', function() {
this.runMochaTest(header_test.TestNames.HeaderChangesForState);
});
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment