Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9522)

Unified Diff: chrome/test/data/webui/print_preview.js

Issue 2893003003: Print Preview: Merge NativeLayerStubs for tests (Closed)
Patch Set: Remove extra variable Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/webui/print_preview.js
diff --git a/chrome/test/data/webui/print_preview.js b/chrome/test/data/webui/print_preview.js
deleted file mode 100644
index 5612030a401913fd12f2b18db0ff138449a40a6c..0000000000000000000000000000000000000000
--- a/chrome/test/data/webui/print_preview.js
+++ /dev/null
@@ -1,1650 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-var ROOT_PATH = '../../../../';
-
-/**
- * Test fixture for print preview WebUI testing.
- * @constructor
- * @extends {testing.Test}
- */
-function PrintPreviewWebUITest() {
- testing.Test.call(this);
- this.printPreview_ = null;
- this.nativeLayer_ = null;
- this.initialSettings_ = null;
- this.localDestinationInfos_ = null;
- this.previewArea_ = null;
-}
-
-/**
- * Index of the "Save as PDF" printer.
- * @type {number}
- * @const
- */
-PrintPreviewWebUITest.PDF_INDEX = 0;
-
-/**
- * Index of the Foo printer.
- * @type {number}
- * @const
- */
-PrintPreviewWebUITest.FOO_INDEX = 1;
-
-/**
- * Index of the Bar printer.
- * @type {number}
- * @const
- */
-PrintPreviewWebUITest.BAR_INDEX = 2;
-
-PrintPreviewWebUITest.prototype = {
- __proto__: testing.Test.prototype,
-
- /**
- * Browse to the sample page, cause print preview & call preLoad().
- * @type {string}
- * @override
- */
- browsePrintPreload: 'print_preview_hello_world_test.html',
-
- /** @override */
- runAccessibilityChecks: true,
-
- /** @override */
- accessibilityIssuesAreErrors: true,
-
- /** @override */
- isAsync: true,
-
- /**
- * Stub out low-level functionality like the NativeLayer and
- * CloudPrintInterface.
- * @this {PrintPreviewWebUITest}
- * @override
- */
- preLoad: function() {
- window.isTest = true;
- window.addEventListener('DOMContentLoaded', function() {
- /**
- * Test version of the native layer.
- * @constructor
- * @extends {settings.TestBrowserProxy}
- */
- function NativeLayerStub() {
- settings.TestBrowserProxy.call(this, [ 'getInitialSettings' ]);
- this.eventTarget_ = new cr.EventTarget();
- this.printStarted_ = false;
- this.generateDraft_ = false;
- this.initialSettings_ = null;
- }
- NativeLayerStub.prototype = {
- __proto__: settings.TestBrowserProxy.prototype,
- getEventTarget: function() { return this.eventTarget_; },
- isPrintStarted: function() { return this.printStarted_; },
- generateDraft: function() { return this.generateDraft_; },
- getInitialSettings: function() {
- this.methodCalled('getInitialSettings');
- return Promise.resolve(this.initialSettings_);
- },
- previewReadyForTest: function() {},
- startGetLocalDestinations: function() {},
- startGetPrivetDestinations: function() {},
- startGetExtensionDestinations: function() {},
- startGetLocalDestinationCapabilities: function(destinationId) {},
- startGetPreview: function(destination, printTicketStore, documentInfo,
- generateDraft, requestId) {
- this.generateDraft_ = generateDraft;
- },
- startHideDialog: function () {},
- startPrint: function () { this.printStarted_ = true; }
- };
- var oldNativeLayerEventType = print_preview.NativeLayer.EventType;
- var oldDuplexMode = print_preview.NativeLayer.DuplexMode;
- print_preview.NativeLayer = NativeLayerStub;
- print_preview.NativeLayer.EventType = oldNativeLayerEventType;
- print_preview.NativeLayer.DuplexMode = oldDuplexMode;
-
- function CloudPrintInterfaceStub() {
- cr.EventTarget.call(this);
- }
- CloudPrintInterfaceStub.prototype = {
- __proto__: cr.EventTarget.prototype,
- search: function(isRecent) {}
- };
- var oldCpInterfaceEventType = cloudprint.CloudPrintInterfaceEventType;
- cloudprint.CloudPrintInterface = CloudPrintInterfaceStub;
- cloudprint.CloudPrintInterfaceEventType = oldCpInterfaceEventType;
-
- print_preview.PreviewArea.prototype.checkPluginCompatibility_ =
- function() {
- return false;
- };
- }.bind(this));
- },
-
- extraLibraries: [
- ROOT_PATH + 'ui/webui/resources/js/cr.js',
- ROOT_PATH + 'ui/webui/resources/js/promise_resolver.js',
- ROOT_PATH + 'ui/webui/resources/js/util.js',
- ROOT_PATH + 'chrome/test/data/webui/settings/test_browser_proxy.js',
- ],
-
- /**
- * Creates an instance of print_preview.PrintPreview and initializes the
- * |nativeLayer_| and |previewArea_|.
- */
- createPrintPreview: function() {
- this.printPreview_ = new print_preview.PrintPreview();
- this.nativeLayer_ = this.printPreview_.nativeLayer_;
- this.previewArea_ = this.printPreview_.previewArea_;
- },
-
- /**
- * Initialize print preview with the initial settings currently stored in
- * |this.initialSettings_|. Creates |this.printPreview_| if it does not
- * already exist.
- */
- setInitialSettings: function() {
- if (!this.printPreview_) {
- this.printPreview_ = new print_preview.PrintPreview();
- this.nativeLayer_ = this.printPreview_.nativeLayer_;
- this.previewArea_ = this.printPreview_.previewArea_;
- }
- this.nativeLayer_.initialSettings_ = this.initialSettings_;
- this.printPreview_.initialize();
- testing.Test.disableAnimationsAndTransitions();
- // Enable when failure is resolved.
- // AX_TEXT_03: http://crbug.com/559209
- this.accessibilityAuditConfig.ignoreSelectors(
- 'multipleLabelableElementsPerLabel',
- '#page-settings > .right-column > *');
- },
-
- /**
- * Dispatch the LOCAL_DESTINATIONS_SET event. This call is NOT async and will
- * happen in the same thread.
- */
- setLocalDestinations: function() {
- var localDestsSetEvent =
- new Event(print_preview.NativeLayer.EventType.LOCAL_DESTINATIONS_SET);
- localDestsSetEvent.destinationInfos = this.localDestinationInfos_;
- this.nativeLayer_.getEventTarget().dispatchEvent(localDestsSetEvent);
- },
-
- /**
- * Dispatch the CAPABILITIES_SET event. This call is NOT async and will
- * happen in the same thread.
- * @device - The device whose capabilities should be dispatched.
- */
- setCapabilities: function(device) {
- var capsSetEvent =
- new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = device;
- this.nativeLayer_.getEventTarget().dispatchEvent(capsSetEvent);
- },
-
- /**
- * Dispatch the PREVIEW_GENERATION_DONE event. This call is NOT async and
- * will happen in the same thread.
- */
- dispatchPreviewDone: function() {
- var previewDoneEvent =
- new Event(print_preview.PreviewArea.EventType.PREVIEW_GENERATION_DONE);
- this.previewArea_.dispatchEvent(previewDoneEvent);
- },
-
- /**
- * Dispatch the SETTINGS_INVALID event. This call is NOT async and will
- * happen in the same thread.
- */
- dispatchInvalidSettings: function() {
- var invalidSettingsEvent =
- new Event(print_preview.NativeLayer.EventType.SETTINGS_INVALID);
- this.nativeLayer_.getEventTarget().dispatchEvent(invalidSettingsEvent);
- },
-
- /**
- * @return {boolean} Whether the UI has "printed" or not. (called startPrint
- * on the native layer)
- */
- hasPrinted: function() {
- return this.nativeLayer_.isPrintStarted();
- },
-
- /**
- * @return {boolean} Whether the UI is "generating draft" in the most recent
- * preview. (checking the result of the startGetPreview call in the native
- * layer)
- */
- generateDraft: function() {
- return this.nativeLayer_.generateDraft();
- },
-
- /**
- * Even though animation duration and delay is set to zero, it is necessary to
- * wait until the animation has finished.
- */
- waitForAnimationToEnd: function(elementId) {
- // add a listener for the animation end event
- document.addEventListener('animationend', function f(e) {
- if (e.target.id == elementId) {
- document.removeEventListener(f, 'animationend');
- testDone();
- }
- });
- },
-
- /**
- * Expand the 'More Settings' div to expose all options.
- */
- expandMoreSettings: function() {
- var moreSettings = $('more-settings');
- checkSectionVisible(moreSettings, true);
- moreSettings.click();
- },
-
- /**
- * Repeated setup steps for the advanced settings tests.
- * Disables accessiblity errors, sets initial settings, and verifies
- * advanced options section is visible after expanding more settings.
- */
- setupAdvancedSettingsTest: function(device) {
- // Need to disable this since overlay animation will not fully complete.
- this.setLocalDestinations();
- this.setCapabilities(device);
- this.expandMoreSettings();
-
- // Check that the advanced options settings section is visible.
- checkSectionVisible($('advanced-options-settings'), true);
- },
-
- /**
- * @this {PrintPreviewWebUITest}
- * @override
- */
- setUp: function() {
- testing.Test.prototype.setUp.call(this);
- Mock4JS.clearMocksToVerify();
-
- this.initialSettings_ = new print_preview.NativeInitialSettings(
- false /*isInKioskAutoPrintMode*/,
- false /*isInAppKioskMode*/,
- ',' /*thousandsDelimeter*/,
- '.' /*decimalDelimeter*/,
- 1 /*unitType*/,
- true /*isDocumentModifiable*/,
- 'title' /*documentTitle*/,
- true /*documentHasSelection*/,
- false /*selectionOnly*/,
- 'FooDevice' /*systemDefaultDestinationId*/,
- null /*serializedAppStateStr*/,
- null /*serializedDefaultDestinationSelectionRulesStr*/);
- this.localDestinationInfos_ = [
- { printerName: 'FooName', deviceName: 'FooDevice' },
- { printerName: 'BarName', deviceName: 'BarDevice' }
- ];
- },
-};
-
-// Test some basic assumptions about the print preview WebUI.
-TEST_F('PrintPreviewWebUITest', 'TestPrinterList', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- var recentList =
- $('destination-search').querySelector('.recent-list ul');
- var localList =
- $('destination-search').querySelector('.local-list ul');
- assertNotEquals(null, recentList);
- assertEquals(1, recentList.childNodes.length);
- assertEquals('FooName',
- recentList.childNodes.item(0).querySelector(
- '.destination-list-item-name').textContent);
- assertNotEquals(null, localList);
- assertEquals(3, localList.childNodes.length);
- assertEquals('Save as PDF',
- localList.childNodes.item(PrintPreviewWebUITest.PDF_INDEX).
- querySelector('.destination-list-item-name').textContent);
- assertEquals('FooName',
- localList.childNodes.item(PrintPreviewWebUITest.FOO_INDEX).
- querySelector('.destination-list-item-name').textContent);
- assertEquals('BarName',
- localList.childNodes.item(PrintPreviewWebUITest.BAR_INDEX).
- querySelector('.destination-list-item-name').textContent);
- testDone();
- }.bind(this));
-});
-
-// Test that the printer list is structured correctly after calling
-// addCloudPrinters with an empty list.
-TEST_F('PrintPreviewWebUITest', 'TestPrinterListCloudEmpty', function() {
- this.setInitialSettings();
-
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var cloudPrintEnableEvent =
- new Event(print_preview.NativeLayer.EventType.CLOUD_PRINT_ENABLE);
- cloudPrintEnableEvent.baseCloudPrintUrl = 'cloudprint url';
- this.nativeLayer_.getEventTarget().dispatchEvent(
- cloudPrintEnableEvent);
-
- var searchDoneEvent =
- new Event(cloudprint.CloudPrintInterfaceEventType.SEARCH_DONE);
- searchDoneEvent.printers = [];
- searchDoneEvent.isRecent = true;
- searchDoneEvent.email = 'foo@chromium.org';
- this.printPreview_.cloudPrintInterface_.dispatchEvent(searchDoneEvent);
-
- var recentList =
- $('destination-search').querySelector('.recent-list ul');
- var localList =
- $('destination-search').querySelector('.local-list ul');
- var cloudList =
- $('destination-search').querySelector('.cloud-list ul');
-
- assertNotEquals(null, recentList);
- assertEquals(1, recentList.childNodes.length);
- assertEquals('FooName',
- recentList.childNodes.item(0).
- querySelector('.destination-list-item-name').
- textContent);
-
- assertNotEquals(null, localList);
- assertEquals(3, localList.childNodes.length);
- assertEquals('Save as PDF',
- localList.childNodes.item(
- PrintPreviewWebUITest.PDF_INDEX).
- querySelector('.destination-list-item-name').
- textContent);
- assertEquals('FooName',
- localList.childNodes.
- item(PrintPreviewWebUITest.FOO_INDEX).
- querySelector('.destination-list-item-name').
- textContent);
- assertEquals('BarName',
- localList.childNodes.
- item(PrintPreviewWebUITest.BAR_INDEX).
- querySelector('.destination-list-item-name').
- textContent);
-
- assertNotEquals(null, cloudList);
- assertEquals(0, cloudList.childNodes.length);
-
- testDone();
- }.bind(this));
-});
-
-/**
- * Verify that |section| visibility matches |visible|.
- * @param {HTMLDivElement} section The section to check.
- * @param {boolean} visible The expected state of visibility.
- */
-function checkSectionVisible(section, visible) {
- assertNotEquals(null, section);
- expectEquals(
- visible, section.classList.contains('visible'), 'section=' + section.id);
-}
-
-function checkElementDisplayed(el, isDisplayed) {
- assertNotEquals(null, el);
- expectEquals(isDisplayed,
- !el.hidden,
- 'element="' + el.id + '" of class "' + el.classList + '"');
-}
-
-function getCddTemplate(printerId) {
- return {
- printerId: printerId,
- capabilities: {
- version: '1.0',
- printer: {
- supported_content_type: [{content_type: 'application/pdf'}],
- collate: {},
- color: {
- option: [
- {type: 'STANDARD_COLOR', is_default: true},
- {type: 'STANDARD_MONOCHROME'}
- ]
- },
- copies: {},
- duplex: {
- option: [
- {type: 'NO_DUPLEX', is_default: true},
- {type: 'LONG_EDGE'},
- {type: 'SHORT_EDGE'}
- ]
- },
- page_orientation: {
- option: [
- {type: 'PORTRAIT', is_default: true},
- {type: 'LANDSCAPE'},
- {type: 'AUTO'}
- ]
- },
- media_size: {
- option: [
- { name: 'NA_LETTER',
- width_microns: 215900,
- height_microns: 279400,
- is_default: true
- }
- ]
- }
- }
- }
- };
-}
-
-function isPrintAsImageEnabled() {
- // Should be enabled by default on non Windows/Mac
- return (!cr.isWindows && !cr.isMac &&
- loadTimeData.getBoolean('printPdfAsImageEnabled'));
-}
-
-// Test restore settings with one destination.
-TEST_F('PrintPreviewWebUITest', 'TestPrintPreviewRestoreLocalDestination',
- function() {
- this.initialSettings_.serializedAppStateStr_ =
- '{"version":2,"recentDestinations":[{"id":"ID", "origin":"local",' +
- '"account":"", "capabilities":0, "name":"", "extensionId":"",' +
- '"extensionName":""}]}';
-
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- testDone();
- });
-});
-
-// Test with multiple destinations
-TEST_F('PrintPreviewWebUITest', 'TestPrintPreviewRestoreMultipleDestinations',
- function() {
- var origin = cr.isChromeOS ? "chrome_os" : "local";
-
- var appState = {
- 'version': 2,
- 'recentDestinations': [
- {
- 'id': 'ID1',
- 'origin': origin,
- 'account': '',
- 'capabilities': 0,
- 'name': '',
- 'extensionId': '',
- 'extensionName': ''
- },
- {
- 'id': 'ID2',
- 'origin': origin,
- 'account': '',
- 'capabilities': 0,
- 'name': '',
- 'extensionId': '',
- 'extensionName': ''
- },
- {
- 'id': 'ID3',
- 'origin': origin,
- 'account': '',
- 'capabilities': 0,
- 'name': '',
- 'extensionId': '',
- 'extensionName': ''
- }
- ]
- };
-
- this.initialSettings_.serializedAppStateStr_ = JSON.stringify(appState);
- this.setInitialSettings();
-
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- // Set capabilities for the three recently used destinations + 1 more
- this.setCapabilities(getCddTemplate('ID1'));
- this.setCapabilities(getCddTemplate('ID2'));
- this.setCapabilities(getCddTemplate('ID3'));
- this.setCapabilities(getCddTemplate('ID4'));
-
- // The most recently used destination should be the currently selected
- // one. This is ID1.
- assertEquals(
- 'ID1', this.printPreview_.destinationStore_.selectedDestination.id);
-
- // Look through the destinations. ID1, ID2, and ID3 should all be
- // recent.
- var destinations = this.printPreview_.destinationStore_.destinations_;
- var idsFound = [];
-
- for (var i = 0; i < destinations.length; i++) {
- if (!destinations[i])
- continue;
- if (destinations[i].isRecent)
- idsFound.push(destinations[i].id);
- }
-
- // Make sure there were 3 recent destinations and that they are the
- // correct IDs.
- assertEquals(3, idsFound.length);
- assertNotEquals(-1, idsFound.indexOf("ID1"));
- assertNotEquals(-1, idsFound.indexOf("ID2"));
- assertNotEquals(-1, idsFound.indexOf("ID3"));
-
- testDone();
- }.bind(this));
-});
-
-TEST_F('PrintPreviewWebUITest',
- 'TestPrintPreviewDefaultDestinationSelectionRules', function() {
- // It also makes sure these rules do override system default destination.
- this.initialSettings_.serializedDefaultDestinationSelectionRulesStr_ =
- '{"namePattern":".*Bar.*"}';
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- assertEquals(
- 'BarDevice',
- this.printPreview_.destinationStore_.selectedDestination.id);
-
- testDone();
- }.bind(this));
-});
-
-TEST_F('PrintPreviewWebUITest', 'TestSystemDialogLinkIsHiddenInAppKioskMode',
- function() {
- if (!cr.isChromeOS)
- this.initialSettings_.isInAppKioskMode_ = true;
-
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- if (cr.isChromeOS)
- assertEquals(null, $('system-dialog-link'));
- else
- checkElementDisplayed($('system-dialog-link'), false);
- testDone();
- });
-});
-
-// Test that disabled settings hide the disabled sections.
-TEST_F('PrintPreviewWebUITest', 'TestSectionsDisabled', function() {
- this.createPrintPreview();
- checkSectionVisible($('layout-settings'), false);
- checkSectionVisible($('color-settings'), false);
- checkSectionVisible($('copies-settings'), false);
-
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "STANDARD_COLOR"}
- ]
- };
- delete device.capabilities.printer.copies;
- this.setCapabilities(device);
-
- checkSectionVisible($('layout-settings'), true);
- checkSectionVisible($('color-settings'), false);
- checkSectionVisible($('copies-settings'), false);
-
- this.waitForAnimationToEnd('other-options-collapsible');
- }.bind(this));
-});
-
-// When the source is 'PDF' and 'Save as PDF' option is selected, we hide the
-// fit to page option.
-TEST_F('PrintPreviewWebUITest', 'PrintToPDFSelectedCapabilities', function() {
- // Add PDF printer.
- this.initialSettings_.isDocumentModifiable_ = false;
- this.initialSettings_.systemDefaultDestinationId_ = 'Save as PDF';
- this.setInitialSettings();
-
- this.printPreview_.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
- }
- ]
- }
- }
- }
- };
- this.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);
-
- testDone();
- }.bind(this));
-});
-
-// When the source is 'HTML', we always hide the fit to page option and show
-// media size option.
-TEST_F('PrintPreviewWebUITest', 'SourceIsHTMLCapabilities', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
-
- this.expandMoreSettings();
-
- checkElementDisplayed(fitToPage, false);
- if (isPrintAsImageEnabled())
- checkElementDisplayed(rasterize, false);
- checkSectionVisible(mediaSize, true);
- checkSectionVisible(scalingSettings, true);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// 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_F('PrintPreviewWebUITest', 'SourceIsPDFCapabilities', function() {
- this.initialSettings_.isDocumentModifiable_ = false;
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
- this.expandMoreSettings();
- if (isPrintAsImageEnabled()) {
- checkElementDisplayed(rasterizeContainer, true);
- expectFalse(
- rasterizeContainer.querySelector('.checkbox').checked);
- }
- checkSectionVisible($('media-size-settings'), true);
- checkSectionVisible(scalingSettings, true);
-
- this.waitForAnimationToEnd('other-options-collapsible');
- }.bind(this));
-});
-
-// 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_F('PrintPreviewWebUITest', 'ScalingUnchecksFitToPage', function() {
- this.initialSettings_.isDocumentModifiable_ = false;
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
- this.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);
-
- this.waitForAnimationToEnd('other-options-collapsible');
- }.bind(this));
-});
-
-// When the number of copies print preset is set for source 'PDF', we update
-// the copies value if capability is supported by printer.
-TEST_F('PrintPreviewWebUITest', 'CheckNumCopiesPrintPreset', function() {
- this.initialSettings_.isDocumentModifiable_ = false;
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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;
- this.nativeLayer_.getEventTarget().
- dispatchEvent(printPresetOptionsEvent);
-
- checkSectionVisible($('copies-settings'), true);
- expectEquals(
- printPresetOptions.copies,
- parseInt($('copies-settings').querySelector('.user-value').value));
-
- this.waitForAnimationToEnd('other-options-collapsible');
- }.bind(this));
-});
-
-// When the duplex print preset is set for source 'PDF', we update the
-// duplex setting if capability is supported by printer.
-TEST_F('PrintPreviewWebUITest', 'CheckDuplexPrintPreset', function() {
- this.initialSettings_.isDocumentModifiable_ = false;
- this.setInitialSettings();
-
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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;
- this.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);
-
- this.waitForAnimationToEnd('other-options-collapsible');
- }.bind(this));
-});
-
-// Make sure that custom margins controls are properly set up.
-TEST_F('PrintPreviewWebUITest', 'CustomMarginsControlsCheck', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.setCapabilities(getCddTemplate("FooDevice"));
-
- this.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'));
- });
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Page layout has zero margins. Hide header and footer option.
-TEST_F('PrintPreviewWebUITest', 'PageLayoutHasNoMarginsHideHeaderFooter',
- function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
-
- this.expandMoreSettings();
-
- checkElementDisplayed(headerFooter, true);
-
- this.printPreview_.printTicketStore_.marginsType.updateValue(
- print_preview.ticket_items.MarginsTypeValue.CUSTOM);
- this.printPreview_.printTicketStore_.customMargins.updateValue(
- new print_preview.Margins(0, 0, 0, 0));
-
- checkElementDisplayed(headerFooter, false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Page layout has half-inch margins. Show header and footer option.
-TEST_F('PrintPreviewWebUITest', 'PageLayoutHasMarginsShowHeaderFooter',
- function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
-
- this.expandMoreSettings();
-
- checkElementDisplayed(headerFooter, true);
-
- this.printPreview_.printTicketStore_.marginsType.updateValue(
- print_preview.ticket_items.MarginsTypeValue.CUSTOM);
- this.printPreview_.printTicketStore_.customMargins.updateValue(
- new print_preview.Margins(36, 36, 36, 36));
-
- checkElementDisplayed(headerFooter, true);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Page layout has zero top and bottom margins. Hide header and footer option.
-TEST_F('PrintPreviewWebUITest',
- 'ZeroTopAndBottomMarginsHideHeaderFooter',
- function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
-
- this.expandMoreSettings();
-
- checkElementDisplayed(headerFooter, true);
-
- this.printPreview_.printTicketStore_.marginsType.updateValue(
- print_preview.ticket_items.MarginsTypeValue.CUSTOM);
- this.printPreview_.printTicketStore_.customMargins.updateValue(
- new print_preview.Margins(0, 36, 0, 36));
-
- checkElementDisplayed(headerFooter, false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Page layout has zero top and half-inch bottom margin. Show header and footer
-// option.
-TEST_F('PrintPreviewWebUITest',
- 'ZeroTopAndNonZeroBottomMarginShowHeaderFooter',
- function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.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);
-
- this.expandMoreSettings();
-
- checkElementDisplayed(headerFooter, true);
-
- this.printPreview_.printTicketStore_.marginsType.updateValue(
- print_preview.ticket_items.MarginsTypeValue.CUSTOM);
- this.printPreview_.printTicketStore_.customMargins.updateValue(
- new print_preview.Margins(0, 36, 36, 36));
-
- checkElementDisplayed(headerFooter, true);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Check header footer availability with small (label) page size.
-TEST_F('PrintPreviewWebUITest', 'SmallPaperSizeHeaderFooter', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.media_size = {
- "option": [
- {"name": "SmallLabel", "width_microns": 38100,
- "height_microns": 12700, "is_default": false},
- {"name": "BigLabel", "width_microns": 50800,
- "height_microns": 76200, "is_default": true}
- ]
- };
- this.setCapabilities(device);
-
- 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);
-
- this.expandMoreSettings();
-
- // Big label should have header/footer
- checkElementDisplayed(headerFooter, true);
-
- // Small label should not
- this.printPreview_.printTicketStore_.mediaSize.updateValue(
- device.capabilities.printer.media_size.option[0]);
- checkElementDisplayed(headerFooter, false);
-
- // Oriented in landscape, there should be enough space for
- // header/footer.
- this.printPreview_.printTicketStore_.landscape.updateValue(true);
- checkElementDisplayed(headerFooter, true);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, one option, standard monochrome.
-TEST_F('PrintPreviewWebUITest', 'TestColorSettingsMonochrome', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- // Only one option, standard monochrome.
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "STANDARD_MONOCHROME"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, one option, custom monochrome.
-TEST_F('PrintPreviewWebUITest', 'TestColorSettingsCustomMonochrome',
- function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- // Only one option, standard monochrome.
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "CUSTOM_MONOCHROME",
- "vendor_id": "42"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, one option, standard color.
-TEST_F('PrintPreviewWebUITest', 'TestColorSettingsColor', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "STANDARD_COLOR"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, one option, custom color.
-TEST_F('PrintPreviewWebUITest', 'TestColorSettingsCustomColor', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "CUSTOM_COLOR", "vendor_id": "42"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, two options, both standard, defaults to color.
-TEST_F('PrintPreviewWebUITest', 'TestColorSettingsBothStandardDefaultColor',
- function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"type": "STANDARD_MONOCHROME"},
- {"is_default": true, "type": "STANDARD_COLOR"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), true);
- expectEquals(
- 'color',
- $('color-settings').querySelector('.color-settings-select').value);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, two options, both standard, defaults to
-// monochrome.
-TEST_F('PrintPreviewWebUITest',
- 'TestColorSettingsBothStandardDefaultMonochrome', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "STANDARD_MONOCHROME"},
- {"type": "STANDARD_COLOR"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), true);
- expectEquals(
- 'bw',
- $('color-settings').querySelector('.color-settings-select').value);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that the color settings, two options, both custom, defaults to color.
-TEST_F('PrintPreviewWebUITest',
- 'TestColorSettingsBothCustomDefaultColor', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.color = {
- "option": [
- {"type": "CUSTOM_MONOCHROME", "vendor_id": "42"},
- {"is_default": true, "type": "CUSTOM_COLOR", "vendor_id": "43"}
- ]
- };
- this.setCapabilities(device);
-
- checkSectionVisible($('color-settings'), true);
- expectEquals(
- 'color',
- $('color-settings').querySelector('.color-settings-select').value);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test to verify that duplex settings are set according to the printer
-// capabilities.
-TEST_F('PrintPreviewWebUITest', 'TestDuplexSettingsTrue', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.setCapabilities(getCddTemplate("FooDevice"));
-
- var otherOptions = $('other-options-settings');
- checkSectionVisible(otherOptions, true);
- duplexContainer = otherOptions.querySelector('#duplex-container');
- expectFalse(duplexContainer.hidden);
- expectFalse(duplexContainer.querySelector('.checkbox').checked);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test to verify that duplex settings are set according to the printer
-// capabilities.
-TEST_F('PrintPreviewWebUITest', 'TestDuplexSettingsFalse', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- var device = getCddTemplate("FooDevice");
- delete device.capabilities.printer.duplex;
- this.setCapabilities(device);
-
- // Check that it is collapsed.
- var otherOptions = $('other-options-settings');
- checkSectionVisible(otherOptions, false);
-
- this.expandMoreSettings();
-
- // Now it should be visible.
- checkSectionVisible(otherOptions, true);
- expectTrue(otherOptions.querySelector('#duplex-container').hidden);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that changing the selected printer updates the preview.
-TEST_F('PrintPreviewWebUITest', 'TestPrinterChangeUpdatesPreview', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.setCapabilities(getCddTemplate("FooDevice"));
-
- var previewGenerator = mock(print_preview.PreviewGenerator);
- this.printPreview_.previewArea_.previewGenerator_ =
- previewGenerator.proxy();
-
- // The number of settings that can change due to a change in the
- // destination that will therefore dispatch ticket item change events.
- previewGenerator.expects(exactly(9)).requestPreview();
-
- var barDestination =
- this.printPreview_.destinationStore_.destinations().find(
- function(d) {
- return d.id == 'BarDevice';
- });
-
- this.printPreview_.destinationStore_.selectDestination(barDestination);
-
- var device = getCddTemplate("BarDevice");
- device.capabilities.printer.color = {
- "option": [
- {"is_default": true, "type": "STANDARD_MONOCHROME"}
- ]
- };
- this.setCapabilities(device);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that error message is displayed when plugin doesn't exist.
-TEST_F('PrintPreviewWebUITest', 'TestNoPDFPluginErrorMessage', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- var previewAreaEl = $('preview-area');
-
- var loadingMessageEl =
- previewAreaEl.
- getElementsByClassName('preview-area-loading-message')[0];
- expectTrue(loadingMessageEl.hidden);
-
- var previewFailedMessageEl = previewAreaEl.getElementsByClassName(
- 'preview-area-preview-failed-message')[0];
- expectTrue(previewFailedMessageEl.hidden);
-
- var printFailedMessageEl =
- previewAreaEl.
- getElementsByClassName('preview-area-print-failed')[0];
- expectTrue(printFailedMessageEl.hidden);
-
- var customMessageEl =
- previewAreaEl.
- getElementsByClassName('preview-area-custom-message')[0];
- expectFalse(customMessageEl.hidden);
-
- testDone();
- });
-});
-
-// Test custom localized paper names.
-TEST_F('PrintPreviewWebUITest', 'TestCustomPaperNames', function() {
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
-
- var customLocalizedMediaName = 'Vendor defined localized media name';
- var customMediaName = 'Vendor defined media name';
-
- var device = getCddTemplate("FooDevice");
- device.capabilities.printer.media_size = {
- option: [
- { name: 'CUSTOM',
- width_microns: 15900,
- height_microns: 79400,
- is_default: true,
- custom_display_name_localized: [
- { locale: navigator.language,
- value: customLocalizedMediaName
- }
- ]
- },
- { name: 'CUSTOM',
- width_microns: 15900,
- height_microns: 79400,
- custom_display_name: customMediaName
- }
- ]
- };
-
- this.setCapabilities(device);
-
- this.expandMoreSettings();
-
- checkSectionVisible($('media-size-settings'), true);
- var mediaSelect =
- $('media-size-settings').querySelector('.settings-select');
- // Check the default media item.
- expectEquals(
- customLocalizedMediaName,
- mediaSelect.options[mediaSelect.selectedIndex].text);
- // Check the other media item.
- expectEquals(
- customMediaName,
- mediaSelect.options[mediaSelect.selectedIndex == 0 ? 1 : 0].text);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-function getCddTemplateWithAdvancedSettings(printerId) {
- return {
- printerId: printerId,
- capabilities: {
- version: '1.0',
- printer: {
- supported_content_type: [{content_type: 'application/pdf'}],
- vendor_capability:
- [
- {display_name: 'Print Area',
- id: 'Print Area',
- type: 'SELECT',
- select_cap: {
- option: [
- {display_name: 'A4', value: 4, is_default: true},
- {display_name: 'A6', value: 6},
- {display_name: 'A7', value: 7}
- ]
- }
- }
- ],
- collate: {},
- color: {
- option: [
- {type: 'STANDARD_COLOR', is_default: true},
- {type: 'STANDARD_MONOCHROME'}
- ]
- },
- copies: {},
- duplex: {
- option: [
- {type: 'NO_DUPLEX', is_default: true},
- {type: 'LONG_EDGE'},
- {type: 'SHORT_EDGE'}
- ]
- },
- page_orientation: {
- option: [
- {type: 'PORTRAIT', is_default: true},
- {type: 'LANDSCAPE'},
- {type: 'AUTO'}
- ]
- },
- media_size: {
- option: [
- { name: 'NA_LETTER',
- width_microns: 215900,
- height_microns: 279400,
- is_default: true
- }
- ]
- },
- }
- }
- };
-}
-
-// Simulates a click of the advanced options settings button to bring up the
-// advanced settings overlay.
-function openAdvancedSettings() {
- // Check for button and click to view advanced settings section.
- var advancedOptionsSettingsButton =
- $('advanced-options-settings').
- querySelector('.advanced-options-settings-button');
- checkElementDisplayed(advancedOptionsSettingsButton, true);
- // Button is disabled during testing due to test version of
- // testPluginCompatibility() being set to always return false. Enable button
- // to send click event.
- advancedOptionsSettingsButton.disabled = false;
- advancedOptionsSettingsButton.click();
-}
-
-// Test advanced settings with 1 capability (should not display settings search
-// box).
-TEST_F('PrintPreviewWebUITest', 'TestAdvancedSettings1Option', function() {
- var device = getCddTemplateWithAdvancedSettings("FooDevice");
- this.accessibilityIssuesAreErrors = false;
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setupAdvancedSettingsTest(device);
-
- // Open the advanced settings overlay.
- openAdvancedSettings();
-
- // Check that advanced settings close button is now visible,
- // but not the search box (only 1 capability).
- var advancedSettingsCloseButton = $('advanced-settings').
- querySelector('.close-button');
- checkElementDisplayed(advancedSettingsCloseButton, true);
- checkElementDisplayed($('advanced-settings').
- querySelector('.search-box-area'), false);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-
-// Test advanced settings with 2 capabilities (should have settings search box).
-TEST_F('PrintPreviewWebUITest', 'TestAdvancedSettings2Options', function() {
- var device = getCddTemplateWithAdvancedSettings("FooDevice");
- // Add new capability.
- device.capabilities.printer.vendor_capability.push({
- display_name: 'Paper Type',
- id: 'Paper Type',
- type: 'SELECT',
- select_cap: {
- option: [
- {display_name: 'Standard', value: 0, is_default: true},
- {display_name: 'Recycled', value: 1},
- {display_name: 'Special', value: 2}
- ]
- }
- });
- this.accessibilityIssuesAreErrors = false;
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setupAdvancedSettingsTest(device);
-
- // Open the advanced settings overlay.
- openAdvancedSettings();
-
- // Check advanced settings is visible and that the search box now
- // appears.
- var advancedSettingsCloseButton = $('advanced-settings').
- querySelector('.close-button');
- checkElementDisplayed(advancedSettingsCloseButton, true);
- checkElementDisplayed($('advanced-settings').
- querySelector('.search-box-area'), true);
-
- this.waitForAnimationToEnd('more-settings');
- }.bind(this));
-});
-
-// Test that initialization with saved destination only issues one call
-// to startPreview.
-TEST_F('PrintPreviewWebUITest', 'TestInitIssuesOneRequest', function() {
- this.createPrintPreview();
- // Load in a bunch of recent destinations with non null capabilities.
- var origin = cr.isChromeOS ? 'chrome_os' : 'local';
- var initSettings = {
- version: 2,
- recentDestinations: [1, 2, 3].map(function(i) {
- return {
- id: 'ID' + i, origin: origin, account: '',
- capabilities: getCddTemplate('ID' + i), name: '',
- extensionId: '', extensionName: ''
- };
- }),
- };
- this.initialSettings_.serializedAppStateStr_ = JSON.stringify(initSettings);
- this.setCapabilities(getCddTemplate('ID1'));
- this.setCapabilities(getCddTemplate('ID2'));
- this.setCapabilities(getCddTemplate('ID3'));
-
- // Use a real preview generator.
- this.printPreview_.previewArea_.previewGenerator_ =
- new print_preview.PreviewGenerator(this.printPreview_.destinationStore_,
- this.printPreview_.printTicketStore_, this.nativeLayer_,
- this.printPreview_.documentInfo_);
-
- // Preview generator starts out with inFlightRequestId_ == -1. The id
- // increments by 1 for each startGetPreview call it makes. It should only
- // make one such call during initialization or there will be a race; see
- // crbug.com/666595
- expectEquals(
- -1,
- this.printPreview_.previewArea_.previewGenerator_.inFlightRequestId_);
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- expectEquals(
- 0,
- this.printPreview_.previewArea_.previewGenerator_.
- inFlightRequestId_);
- testDone();
- }.bind(this));
-});
-
-// Test that invalid settings errors disable the print preview and display
-// an error and that the preview dialog can be recovered by selecting a
-// new destination.
-TEST_F('PrintPreviewWebUITest', 'TestInvalidSettingsError', function() {
- // Setup
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.setCapabilities(getCddTemplate("FooDevice"));
-
- // Manually enable the print header. This is needed since there is no
- // plugin during test, so it will be set as disabled normally.
- this.printPreview_.printHeader_.isEnabled = true;
-
- // There will be an error message in the preview area since the plugin
- // is not running. However, it should not be the invalid settings error.
- var previewAreaEl = $('preview-area');
- var customMessageEl =
- previewAreaEl.
- getElementsByClassName('preview-area-custom-message')[0];
- expectFalse(customMessageEl.hidden);
- var expectedMessageStart = 'The selected printer is not available or '
- + 'not installed correctly.'
- expectFalse(customMessageEl.textContent.includes(expectedMessageStart));
-
- // Verify that the print button is enabled.
- var printHeader = $('print-header');
- var printButton = printHeader.querySelector('button.print');
- checkElementDisplayed(printButton, true);
- expectFalse(printButton.disabled);
-
- // Report invalid settings error.
- this.dispatchInvalidSettings();
-
- // Should be in an error state, print button disabled, invalid custom
- // error message shown.
- expectFalse(customMessageEl.hidden);
- expectTrue(customMessageEl.textContent.includes(expectedMessageStart));
- expectTrue(printButton.disabled);
-
- // Select a new destination
- var barDestination =
- this.printPreview_.destinationStore_.destinations().find(
- function(d) {
- return d.id == 'BarDevice';
- });
-
- this.printPreview_.destinationStore_.selectDestination(barDestination);
-
- // Dispatch events indicating capabilities were fetched and new preview
- // has loaded.
- this.setCapabilities(getCddTemplate("BarDevice"));
- this.dispatchPreviewDone();
-
- // Has active print button and successfully "prints", indicating
- // recovery from error state.
- expectFalse(printButton.disabled);
- expectFalse(this.hasPrinted());
- printButton.click();
- expectTrue(this.hasPrinted());
- testDone();
- }.bind(this));
-});
-
-// Test the preview generator to make sure the generate draft parameter is set
-// correctly. It should be false if the only change is the page range.
-TEST_F('PrintPreviewWebUITest', 'TestGenerateDraft', function() {
- this.createPrintPreview();
-
- // Use a real preview generator.
- this.printPreview_.previewArea_.previewGenerator_ =
- new print_preview.PreviewGenerator(this.printPreview_.destinationStore_,
- this.printPreview_.printTicketStore_, this.nativeLayer_,
- this.printPreview_.documentInfo_);
-
- this.setInitialSettings();
- this.printPreview_.nativeLayer_.whenCalled('getInitialSettings').then(
- function() {
- this.setLocalDestinations();
- this.setCapabilities(getCddTemplate("FooDevice"));
-
- // The first request should generate draft because there was no
- // previous print preview draft.
- expectTrue(this.generateDraft());
-
- // Change the page range - no new draft needed.
- this.printPreview_.printTicketStore_.pageRange.updateValue("2");
- expectFalse(this.generateDraft());
-
- // Change the margin type - need to regenerate again.
- this.printPreview_.printTicketStore_.marginsType.updateValue(
- print_preview.ticket_items.MarginsTypeValue.NO_MARGINS);
- expectTrue(this.generateDraft());
-
- testDone();
- }.bind(this));
-});

Powered by Google App Engine
This is Rietveld 408576698