| Index: chrome/test/data/webui/print_preview/print_preview_tests.js
|
| diff --git a/chrome/test/data/webui/print_preview/print_preview_tests.js b/chrome/test/data/webui/print_preview/print_preview_tests.js
|
| index 19acd3c8da70723b679f789502bc260b126e2dd5..aa6243dce00899b714a57224e9a343c662b65876 100644
|
| --- a/chrome/test/data/webui/print_preview/print_preview_tests.js
|
| +++ b/chrome/test/data/webui/print_preview/print_preview_tests.js
|
| @@ -76,6 +76,17 @@ cr.define('print_preview_test', function() {
|
| }
|
|
|
| /**
|
| + * @param {?HTMLElement} el
|
| + * @param {boolean} isDisplayed
|
| + */
|
| + function checkElementDisplayed(el, isDisplayed) {
|
| + assertNotEquals(null, el);
|
| + expectEquals(isDisplayed,
|
| + !el.hidden,
|
| + 'element="' + el.id + '" of class "' + el.classList + '"');
|
| + }
|
| +
|
| + /**
|
| * @param {string} printerId
|
| * @return {!Object}
|
| */
|
| @@ -122,6 +133,38 @@ cr.define('print_preview_test', function() {
|
| };
|
| }
|
|
|
| + /**
|
| + * Even though animation duration and delay is set to zero, it is necessary to
|
| + * wait until the animation has finished.
|
| + * @return {!Promise} A promise firing when the animation is done.
|
| + */
|
| + function whenAnimationDone(elementId) {
|
| + return new Promise(function(resolve) {
|
| + // Add a listener for the animation end event.
|
| + var element = $(elementId);
|
| + element.addEventListener('animationend', function f(e) {
|
| + element.removeEventListener(f, 'animationend');
|
| + resolve();
|
| + });
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Expand the 'More Settings' div to expose all options.
|
| + */
|
| + function expandMoreSettings() {
|
| + var moreSettings = $('more-settings');
|
| + checkSectionVisible(moreSettings, true);
|
| + moreSettings.click();
|
| + }
|
| +
|
| + /** @return {boolean} */
|
| + function isPrintAsImageEnabled() {
|
| + // Should be enabled by default on non Windows/Mac.
|
| + return (!cr.isWindows && !cr.isMac &&
|
| + loadTimeData.getBoolean('printPdfAsImageEnabled'));
|
| + }
|
| +
|
| suite('PrintPreview', function() {
|
| suiteSetup(function() {
|
| function CloudPrintInterfaceStub() {
|
| @@ -361,6 +404,368 @@ cr.define('print_preview_test', function() {
|
| 'BarDevice',
|
| printPreview.destinationStore_.selectedDestination.id);
|
| });
|
| - });
|
| + });
|
| +
|
| + test('SystemDialogLinkIsHiddenInAppKioskMode', function() {
|
| + if (!cr.isChromeOS)
|
| + initialSettings.isInAppKioskMode_ = true;
|
| +
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + if (cr.isChromeOS)
|
| + assertEquals(null, $('system-dialog-link'));
|
| + else
|
| + checkElementDisplayed($('system-dialog-link'), false);
|
| + });
|
| + });
|
| +
|
| + test('SectionsDisabled', function() {
|
| + checkSectionVisible($('layout-settings'), false);
|
| + checkSectionVisible($('color-settings'), false);
|
| + checkSectionVisible($('copies-settings'), false);
|
| +
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + var device = getCddTemplate('FooDevice');
|
| + device.capabilities.printer.color = {
|
| + option: [{is_default: true, type: 'STANDARD_COLOR'}]
|
| + };
|
| + delete device.capabilities.printer.copies;
|
| + setCapabilities(device);
|
| +
|
| + checkSectionVisible($('layout-settings'), true);
|
| + checkSectionVisible($('color-settings'), false);
|
| + checkSectionVisible($('copies-settings'), false);
|
| +
|
| + return whenAnimationDone('other-options-collapsible');
|
| + });
|
| + });
|
| +
|
| + // When the source is 'PDF' and 'Save as PDF' option is selected, we hide
|
| + // the fit to page option.
|
| + test('PrintToPDFSelectedCapabilities', function() {
|
| + // Add PDF printer.
|
| + initialSettings.isDocumentModifiable_ = false;
|
| + initialSettings.systemDefaultDestinationId_ = 'Save as PDF';
|
| + setInitialSettings();
|
| +
|
| + return nativeLayer.whenCalled('getInitialSettings').then(function() {
|
| + var device = {
|
| + printerId: 'Save as PDF',
|
| + capabilities: {
|
| + version: '1.0',
|
| + printer: {
|
| + page_orientation: {
|
| + option: [
|
| + {type: 'AUTO', is_default: true},
|
| + {type: 'PORTRAIT'},
|
| + {type: 'LANDSCAPE'}
|
| + ]
|
| + },
|
| + color: {
|
| + option: [
|
| + {type: 'STANDARD_COLOR', is_default: true}
|
| + ]
|
| + },
|
| + media_size: {
|
| + option: [
|
| + { name: 'NA_LETTER',
|
| + width_microns: 0,
|
| + height_microns: 0,
|
| + is_default: true
|
| + }
|
| + ]
|
| + }
|
| + }
|
| + }
|
| + };
|
| + setCapabilities(device);
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + // If rasterization is an option, other options should be visible. If
|
| + // not, there should be no available other options.
|
| + checkSectionVisible(otherOptions, isPrintAsImageEnabled());
|
| + if (isPrintAsImageEnabled()) {
|
| + checkElementDisplayed(
|
| + otherOptions.querySelector('#fit-to-page-container'), false);
|
| + checkElementDisplayed(
|
| + otherOptions.querySelector('#rasterize-container'), true);
|
| + }
|
| + checkSectionVisible($('media-size-settings'), false);
|
| + checkSectionVisible($('scaling-settings'), false);
|
| + });
|
| + });
|
| +
|
| + // When the source is 'HTML', we always hide the fit to page option and show
|
| + // media size option.
|
| + test('SourceIsHTMLCapabilities', function() {
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + var fitToPage = otherOptions.querySelector('#fit-to-page-container');
|
| + var rasterize;
|
| + if (isPrintAsImageEnabled())
|
| + rasterize = otherOptions.querySelector('#rasterize-container');
|
| + var mediaSize = $('media-size-settings');
|
| + var scalingSettings = $('scaling-settings');
|
| +
|
| + // Check that options are collapsed (section is visible, because duplex
|
| + // is available).
|
| + checkSectionVisible(otherOptions, true);
|
| + checkElementDisplayed(fitToPage, false);
|
| + if (isPrintAsImageEnabled())
|
| + checkElementDisplayed(rasterize, false);
|
| + checkSectionVisible(mediaSize, false);
|
| + checkSectionVisible(scalingSettings, false);
|
| +
|
| + expandMoreSettings();
|
| +
|
| + checkElementDisplayed(fitToPage, false);
|
| + if (isPrintAsImageEnabled())
|
| + checkElementDisplayed(rasterize, false);
|
| + checkSectionVisible(mediaSize, true);
|
| + checkSectionVisible(scalingSettings, true);
|
| +
|
| + return whenAnimationDone('more-settings');
|
| + });
|
| + });
|
| +
|
| + // When the source is "PDF", depending on the selected destination printer,
|
| + // we show/hide the fit to page option and hide media size selection.
|
| + test('SourceIsPDFCapabilities', function() {
|
| + initialSettings.isDocumentModifiable_ = false;
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + var scalingSettings = $('scaling-settings');
|
| + var fitToPageContainer =
|
| + otherOptions.querySelector('#fit-to-page-container');
|
| + var rasterizeContainer;
|
| + if (isPrintAsImageEnabled()) {
|
| + rasterizeContainer =
|
| + otherOptions.querySelector('#rasterize-container');
|
| + }
|
| +
|
| + checkSectionVisible(otherOptions, true);
|
| + checkElementDisplayed(fitToPageContainer, true);
|
| + if (isPrintAsImageEnabled())
|
| + checkElementDisplayed(rasterizeContainer, false);
|
| + expectTrue(
|
| + fitToPageContainer.querySelector('.checkbox').checked);
|
| + expandMoreSettings();
|
| + if (isPrintAsImageEnabled()) {
|
| + checkElementDisplayed(rasterizeContainer, true);
|
| + expectFalse(
|
| + rasterizeContainer.querySelector('.checkbox').checked);
|
| + }
|
| + checkSectionVisible($('media-size-settings'), true);
|
| + checkSectionVisible(scalingSettings, true);
|
| +
|
| + return whenAnimationDone('other-options-collapsible');
|
| + });
|
| + });
|
| +
|
| + // When the source is "PDF", depending on the selected destination printer,
|
| + // we show/hide the fit to page option and hide media size selection.
|
| + test('ScalingUnchecksFitToPage', function() {
|
| + initialSettings.isDocumentModifiable_ = false;
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + var scalingSettings = $('scaling-settings');
|
| +
|
| + checkSectionVisible(otherOptions, true);
|
| + var fitToPageContainer =
|
| + otherOptions.querySelector('#fit-to-page-container');
|
| + checkElementDisplayed(fitToPageContainer, true);
|
| + expectTrue(
|
| + fitToPageContainer.querySelector('.checkbox').checked);
|
| + expandMoreSettings();
|
| + checkSectionVisible($('media-size-settings'), true);
|
| + checkSectionVisible(scalingSettings, true);
|
| +
|
| + // Change scaling input
|
| + var scalingInput = scalingSettings.querySelector('.user-value');
|
| + expectEquals('100', scalingInput.value);
|
| + scalingInput.stepUp(5);
|
| + expectEquals('105', scalingInput.value);
|
| +
|
| + // Trigger the event
|
| + var enterEvent = document.createEvent('Event');
|
| + enterEvent.initEvent('keydown');
|
| + enterEvent.keyCode = 'Enter';
|
| + scalingInput.dispatchEvent(enterEvent);
|
| + expectFalse(
|
| + fitToPageContainer.querySelector('.checkbox').checked);
|
| +
|
| + return whenAnimationDone('other-options-collapsible');
|
| + });
|
| + });
|
| +
|
| + // When the number of copies print preset is set for source 'PDF', we update
|
| + // the copies value if capability is supported by printer.
|
| + test('CheckNumCopiesPrintPreset', function() {
|
| + initialSettings.isDocumentModifiable_ = false;
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + // Indicate that the number of copies print preset is set for source
|
| + // PDF.
|
| + var printPresetOptions = {
|
| + disableScaling: true,
|
| + copies: 2
|
| + };
|
| + var printPresetOptionsEvent = new Event(
|
| + print_preview.NativeLayer.EventType.PRINT_PRESET_OPTIONS);
|
| + printPresetOptionsEvent.optionsFromDocument = printPresetOptions;
|
| + nativeLayer.getEventTarget().
|
| + dispatchEvent(printPresetOptionsEvent);
|
| +
|
| + checkSectionVisible($('copies-settings'), true);
|
| + expectEquals(
|
| + printPresetOptions.copies,
|
| + parseInt($('copies-settings').querySelector('.user-value').value));
|
| +
|
| + return whenAnimationDone('other-options-collapsible');
|
| + });
|
| + });
|
| +
|
| + // When the duplex print preset is set for source 'PDF', we update the
|
| + // duplex setting if capability is supported by printer.
|
| + test('CheckDuplexPrintPreset', function() {
|
| + initialSettings.isDocumentModifiable_ = false;
|
| + setInitialSettings();
|
| +
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + // Indicate that the duplex print preset is set to "long edge" for
|
| + // source PDF.
|
| + var printPresetOptions = {
|
| + duplex: 1
|
| + };
|
| + var printPresetOptionsEvent = new Event(
|
| + print_preview.NativeLayer.EventType.PRINT_PRESET_OPTIONS);
|
| + printPresetOptionsEvent.optionsFromDocument = printPresetOptions;
|
| + nativeLayer.getEventTarget().
|
| + dispatchEvent(printPresetOptionsEvent);
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + checkSectionVisible(otherOptions, true);
|
| + var duplexContainer =
|
| + otherOptions.querySelector('#duplex-container');
|
| + checkElementDisplayed(duplexContainer, true);
|
| + expectTrue(duplexContainer.querySelector('.checkbox').checked);
|
| +
|
| + return whenAnimationDone('other-options-collapsible');
|
| + });
|
| + });
|
| +
|
| + // Make sure that custom margins controls are properly set up.
|
| + test('CustomMarginsControlsCheck', function() {
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + printPreview.printTicketStore_.marginsType.updateValue(
|
| + print_preview.ticket_items.MarginsTypeValue.CUSTOM);
|
| +
|
| + ['left', 'top', 'right', 'bottom'].forEach(function(margin) {
|
| + var control =
|
| + $('preview-area').querySelector('.margin-control-' + margin);
|
| + assertNotEquals(null, control);
|
| + var input = control.querySelector('.margin-control-textbox');
|
| + assertTrue(input.hasAttribute('aria-label'));
|
| + assertNotEquals('undefined', input.getAttribute('aria-label'));
|
| + });
|
| + return whenAnimationDone('more-settings');
|
| + });
|
| + });
|
| +
|
| + // Page layout has zero margins. Hide header and footer option.
|
| + test('PageLayoutHasNoMarginsHideHeaderFooter', function() {
|
| + setInitialSettings();
|
| + return nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + var headerFooter =
|
| + otherOptions.querySelector('#header-footer-container');
|
| +
|
| + // Check that options are collapsed (section is visible, because
|
| + // duplex is available).
|
| + checkSectionVisible(otherOptions, true);
|
| + checkElementDisplayed(headerFooter, false);
|
| +
|
| + expandMoreSettings();
|
| +
|
| + checkElementDisplayed(headerFooter, true);
|
| +
|
| + printPreview.printTicketStore_.marginsType.updateValue(
|
| + print_preview.ticket_items.MarginsTypeValue.CUSTOM);
|
| + printPreview.printTicketStore_.customMargins.updateValue(
|
| + new print_preview.Margins(0, 0, 0, 0));
|
| +
|
| + checkElementDisplayed(headerFooter, false);
|
| +
|
| + return whenAnimationDone('more-settings');
|
| + });
|
| + });
|
| +
|
| + // Page layout has half-inch margins. Show header and footer option.
|
| + test('PageLayoutHasMarginsShowHeaderFooter', function() {
|
| + setInitialSettings();
|
| + nativeLayer.whenCalled('getInitialSettings').then(
|
| + function() {
|
| + setLocalDestinations();
|
| + setCapabilities(getCddTemplate('FooDevice'));
|
| +
|
| + var otherOptions = $('other-options-settings');
|
| + var headerFooter =
|
| + otherOptions.querySelector('#header-footer-container');
|
| +
|
| + // Check that options are collapsed (section is visible, because
|
| + // duplex is available).
|
| + checkSectionVisible(otherOptions, true);
|
| + checkElementDisplayed(headerFooter, false);
|
| +
|
| + expandMoreSettings();
|
| +
|
| + checkElementDisplayed(headerFooter, true);
|
| +
|
| + printPreview.printTicketStore_.marginsType.updateValue(
|
| + print_preview.ticket_items.MarginsTypeValue.CUSTOM);
|
| + printPreview.printTicketStore_.customMargins.updateValue(
|
| + new print_preview.Margins(36, 36, 36, 36));
|
| +
|
| + checkElementDisplayed(headerFooter, true);
|
| +
|
| + return whenAnimationDone('more-settings');
|
| + });
|
| + });
|
| +
|
| +
|
| });
|
| });
|
|
|