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({ ...@@ -37,16 +37,12 @@ Polymer({
managed: Boolean, managed: Boolean,
/** @private {number} */ /** @private {number} */
sheetCount_: { sheetCount: Number,
type: Number,
computed: 'computeSheetCount_(' +
'settings.pages.*, settings.duplex.*, settings.copies.*)',
},
/** @private {?string} */ /** @private {?string} */
summary_: { summary_: {
type: String, type: String,
computed: 'computeSummary_(sheetCount_, state, destination.id)', computed: 'computeSummary_(sheetCount, state, destination.id)',
}, },
}, },
...@@ -93,33 +89,21 @@ Polymer({ ...@@ -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} * @return {string}
* @private * @private
*/ */
getSheetsSummary_() { getSheetsSummary_() {
if (this.sheetCount_ === 0) { if (this.sheetCount === 0) {
return ''; return '';
} }
const pageOrSheets = this.isPdfOrDrive_() ? 'Page' : 'Sheets'; const pageOrSheets = this.isPdfOrDrive_() ? 'Page' : 'Sheets';
const singularOrPlural = this.sheetCount_ > 1 ? 'Plural' : 'Singular'; const singularOrPlural = this.sheetCount > 1 ? 'Plural' : 'Singular';
const label = loadTimeData.getString( const label = loadTimeData.getString(
`printPreview${pageOrSheets}Label${singularOrPlural}`); `printPreview${pageOrSheets}Label${singularOrPlural}`);
return loadTimeData.getStringF( return loadTimeData.getStringF(
'printPreviewSummaryFormatShort', this.sheetCount_.toLocaleString(), 'printPreviewSummaryFormatShort', this.sheetCount.toLocaleString(),
label); label);
}, },
}); });
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
</style> </style>
<print-preview-header id="header" destination="[[destination]]" <print-preview-header id="header" destination="[[destination]]"
cloud-print-error-message="[[cloudPrintErrorMessage]]" cloud-print-error-message="[[cloudPrintErrorMessage]]"
error="[[error]]" state="[[state]]" error="[[error]]" sheet-count="[[sheetCount_]]" state="[[state]]"
settings="[[settings]]" managed="[[controlsManaged]]"> settings="[[settings]]" managed="[[controlsManaged]]">
</print-preview-header> </print-preview-header>
<div id="container" show-bottom-shadow> <div id="container" show-bottom-shadow>
......
...@@ -104,6 +104,13 @@ Polymer({ ...@@ -104,6 +104,13 @@ Polymer({
computed: 'computeControlsDisabled_(state)', computed: 'computeControlsDisabled_(state)',
}, },
/** @private {number} */
sheetCount_: {
type: Number,
computed: 'computeSheetCount_(' +
'settings.pages.*, settings.duplex.*, settings.copies.*)',
},
/** @private {boolean} */ /** @private {boolean} */
firstLoad_: { firstLoad_: {
type: Boolean, type: Boolean,
...@@ -162,6 +169,18 @@ Polymer({ ...@@ -162,6 +169,18 @@ Polymer({
return this.state !== State.READY; 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. * @return {boolean} Whether to show the "More settings" link.
* @private * @private
......
...@@ -11,9 +11,6 @@ header_test.suiteName = 'HeaderTest'; ...@@ -11,9 +11,6 @@ header_test.suiteName = 'HeaderTest';
/** @enum {string} */ /** @enum {string} */
header_test.TestNames = { header_test.TestNames = {
HeaderPrinterTypes: 'header printer types', HeaderPrinterTypes: 'header printer types',
HeaderWithDuplex: 'header with duplex',
HeaderWithCopies: 'header with copies',
HeaderWithNup: 'header with nup',
HeaderChangesForState: 'header changes for state', HeaderChangesForState: 'header changes for state',
EnterprisePolicy: 'enterprise policy', EnterprisePolicy: 'enterprise policy',
}; };
...@@ -38,6 +35,7 @@ suite(header_test.suiteName, function() { ...@@ -38,6 +35,7 @@ suite(header_test.suiteName, function() {
'FooName', DestinationConnectionStatus.ONLINE); 'FooName', DestinationConnectionStatus.ONLINE);
header.state = State.READY; header.state = State.READY;
header.managed = false; header.managed = false;
header.sheetCount = 1;
fakeDataBind(model, header, 'settings'); fakeDataBind(model, header, 'settings');
document.body.appendChild(header); document.body.appendChild(header);
}); });
...@@ -56,44 +54,18 @@ suite(header_test.suiteName, function() { ...@@ -56,44 +54,18 @@ suite(header_test.suiteName, function() {
test(assert(header_test.TestNames.HeaderPrinterTypes), function() { test(assert(header_test.TestNames.HeaderPrinterTypes), function() {
const summary = header.$$('.summary'); const summary = header.$$('.summary');
assertEquals('1 sheet of paper', summary.textContent.trim()); 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()); assertEquals('3 sheets of paper', summary.textContent.trim());
setPdfDestination(); setPdfDestination();
assertEquals('3 pages', summary.textContent.trim()); assertEquals('3 pages', summary.textContent.trim());
header.setSetting('pages', [1]); header.sheetCount = 1;
assertEquals('1 page', summary.textContent.trim()); assertEquals('1 page', summary.textContent.trim());
// Verify the chrome://print case of a zero length document does not show // Verify the chrome://print case of a zero length document does not show
// the summary. // the summary.
header.setSetting('pages', []); header.sheetCount = 0;
assertEquals('', summary.textContent); 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 // Tests that the correct message is shown for non-READY states, and that
// the print button is disabled appropriately. // the print button is disabled appropriately.
test(assert(header_test.TestNames.HeaderChangesForState), function() { test(assert(header_test.TestNames.HeaderChangesForState), function() {
......
...@@ -14,6 +14,8 @@ print_preview_sidebar_test.suiteName = 'PrintPreviewSidebarTest'; ...@@ -14,6 +14,8 @@ print_preview_sidebar_test.suiteName = 'PrintPreviewSidebarTest';
/** @enum {string} */ /** @enum {string} */
print_preview_sidebar_test.TestNames = { print_preview_sidebar_test.TestNames = {
SettingsSectionsVisibilityChange: 'settings sections visibility change', SettingsSectionsVisibilityChange: 'settings sections visibility change',
SheetCountWithDuplex: 'sheet count with duplex',
SheetCountWithCopies: 'sheet count with copies',
}; };
suite(print_preview_sidebar_test.suiteName, function() { suite(print_preview_sidebar_test.suiteName, function() {
...@@ -43,6 +45,8 @@ 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 = document.createElement('print-preview-sidebar');
sidebar.settings = model.settings; sidebar.settings = model.settings;
sidebar.setSetting('duplex', false);
sidebar.pageCount = 1;
fakeDataBind(model, sidebar, 'settings'); fakeDataBind(model, sidebar, 'settings');
document.body.appendChild(sidebar); document.body.appendChild(sidebar);
sidebar.init(false, 'FooDevice', null); sidebar.init(false, 'FooDevice', null);
...@@ -71,4 +75,36 @@ suite(print_preview_sidebar_test.suiteName, function() { ...@@ -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( ...@@ -89,6 +89,14 @@ TEST_F(
.SettingsSectionsVisibilityChange); .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 // eslint-disable-next-line no-var
var PrintPreviewPagesSettingsTest = class extends PrintPreviewTest { var PrintPreviewPagesSettingsTest = class extends PrintPreviewTest {
/** @override */ /** @override */
...@@ -811,14 +819,6 @@ TEST_F('PrintPreviewHeaderTest', 'HeaderPrinterTypes', function() { ...@@ -811,14 +819,6 @@ TEST_F('PrintPreviewHeaderTest', 'HeaderPrinterTypes', function() {
this.runMochaTest(header_test.TestNames.HeaderPrinterTypes); 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() { TEST_F('PrintPreviewHeaderTest', 'HeaderChangesForState', function() {
this.runMochaTest(header_test.TestNames.HeaderChangesForState); 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