1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 * Test fixture for print preview WebUI testing.
8 * @extends {testing.Test}
10 function PrintPreviewWebUITest() {
11 testing.Test.call(this);
12 this.nativeLayer_ = null;
13 this.initialSettings_ = null;
14 this.localDestinationInfos_ = null;
18 * Index of the "Save as PDF" printer.
22 PrintPreviewWebUITest.PDF_INDEX = 0;
25 * Index of the Foo printer.
29 PrintPreviewWebUITest.FOO_INDEX = 1;
32 * Index of the Bar printer.
36 PrintPreviewWebUITest.BAR_INDEX = 2;
38 PrintPreviewWebUITest.prototype = {
39 __proto__: testing.Test.prototype,
42 * Browse to the sample page, cause print preview & call preLoad().
46 browsePrintPreload: 'print_preview_hello_world_test.html',
49 runAccessibilityChecks: true,
52 accessibilityIssuesAreErrors: true,
58 * Stub out low-level functionality like the NativeLayer and
59 * CloudPrintInterface.
60 * @this {PrintPreviewWebUITest}
64 window.addEventListener('DOMContentLoaded', function() {
65 function NativeLayerStub() {
66 cr.EventTarget.call(this);
68 NativeLayerStub.prototype = {
69 __proto__: cr.EventTarget.prototype,
70 startGetInitialSettings: function() {},
71 startGetLocalDestinations: function() {},
72 startGetPrivetDestinations: function() {},
73 startGetLocalDestinationCapabilities: function(destinationId) {}
75 var oldNativeLayerEventType = print_preview.NativeLayer.EventType;
76 var oldDuplexMode = print_preview.NativeLayer.DuplexMode;
77 print_preview.NativeLayer = NativeLayerStub;
78 print_preview.NativeLayer.EventType = oldNativeLayerEventType;
79 print_preview.NativeLayer.DuplexMode = oldDuplexMode;
81 function CloudPrintInterfaceStub() {
82 cr.EventTarget.call(this);
84 CloudPrintInterfaceStub.prototype = {
85 __proto__: cr.EventTarget.prototype,
86 search: function(isRecent) {}
88 var oldCpInterfaceEventType = cloudprint.CloudPrintInterface.EventType;
89 cloudprint.CloudPrintInterface = CloudPrintInterfaceStub;
90 cloudprint.CloudPrintInterface.EventType = oldCpInterfaceEventType;
92 print_preview.PreviewArea.prototype.getPluginType_ =
94 return print_preview.PreviewArea.PluginType_.NONE;
100 * Dispatch the INITIAL_SETTINGS_SET event. This call is NOT async and will
101 * happen in the same thread.
103 setInitialSettings: function() {
104 var initialSettingsSetEvent =
105 new Event(print_preview.NativeLayer.EventType.INITIAL_SETTINGS_SET);
106 initialSettingsSetEvent.initialSettings = this.initialSettings_;
107 this.nativeLayer_.dispatchEvent(initialSettingsSetEvent);
111 * Dispatch the LOCAL_DESTINATIONS_SET event. This call is NOT async and will
112 * happen in the same thread.
114 setLocalDestinations: function() {
115 var localDestsSetEvent =
116 new Event(print_preview.NativeLayer.EventType.LOCAL_DESTINATIONS_SET);
117 localDestsSetEvent.destinationInfos = this.localDestinationInfos_;
118 this.nativeLayer_.dispatchEvent(localDestsSetEvent);
122 * Dispatch the CAPABILITIES_SET event. This call is NOT async and will
123 * happen in the same thread.
124 * @device - The device whose capabilities should be dispatched.
126 setCapabilities: function(device) {
128 new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
129 capsSetEvent.settingsInfo = device;
130 this.nativeLayer_.dispatchEvent(capsSetEvent);
134 * Even though animation duration and delay is set to zero, it is necessary to
135 * wait until the animation has finished.
137 waitForAnimationToEnd: function(elementId) {
138 // add a listener for the animation end event
139 document.addEventListener('webkitAnimationEnd', function f(e) {
140 if (e.target.id == elementId) {
141 document.removeEventListener(f, 'webkitAnimationEnd');
148 * Expand the 'More Settings' div to expose all options.
150 expandMoreSettings: function() {
151 var moreSettings = $('more-settings');
152 checkSectionVisible(moreSettings, true);
153 moreSettings.click();
157 * Generate a real C++ class; don't typedef.
161 typedefCppFixture: null,
164 * @this {PrintPreviewWebUITest}
168 Mock4JS.clearMocksToVerify();
170 this.initialSettings_ = new print_preview.NativeInitialSettings(
171 false /*isInKioskAutoPrintMode*/,
172 false /*isInAppKioskMode*/,
173 false /*hidePrintWithSystemDialogLink*/,
174 ',' /*thousandsDelimeter*/,
175 '.' /*decimalDelimeter*/,
177 true /*isDocumentModifiable*/,
178 'title' /*documentTitle*/,
179 true /*documentHasSelection*/,
180 false /*selectionOnly*/,
181 'FooDevice' /*systemDefaultDestinationId*/,
182 null /*serializedAppStateStr*/,
183 false /*documentHasSelection*/);
184 this.localDestinationInfos_ = [
185 { printerName: 'FooName', deviceName: 'FooDevice' },
186 { printerName: 'BarName', deviceName: 'BarDevice' }
188 this.nativeLayer_ = printPreview.nativeLayer_;
190 // Make all transitions and animations take 0ms for testing purposes.
191 // Animations still happen and must be waited on.
192 var noAnimationStyle = document.createElement('style');
193 noAnimationStyle.textContent =
195 ' -webkit-transition-duration: 0s !important;' +
196 ' -webkit-transition-delay: 0s !important;' +
197 ' -webkit-animation-duration: 0s !important;' +
198 ' -webkit-animation-delay: 0s !important;' +
200 document.querySelector('head').appendChild(noAnimationStyle);
204 GEN('#include "chrome/test/data/webui/print_preview.h"');
206 // Test some basic assumptions about the print preview WebUI.
207 TEST_F('PrintPreviewWebUITest', 'TestPrinterList', function() {
208 this.setInitialSettings();
209 this.setLocalDestinations();
211 var recentList = $('destination-search').querySelector('.recent-list ul');
212 var localList = $('destination-search').querySelector('.local-list ul');
213 assertNotEquals(null, recentList);
214 assertEquals(1, recentList.childNodes.length);
215 assertEquals('FooName',
216 recentList.childNodes.item(0).querySelector(
217 '.destination-list-item-name').textContent);
219 assertNotEquals(null, localList);
220 assertEquals(3, localList.childNodes.length);
221 assertEquals('Save as PDF',
222 localList.childNodes.item(PrintPreviewWebUITest.PDF_INDEX).
223 querySelector('.destination-list-item-name').textContent);
224 assertEquals('FooName',
225 localList.childNodes.item(PrintPreviewWebUITest.FOO_INDEX).
226 querySelector('.destination-list-item-name').textContent);
227 assertEquals('BarName',
228 localList.childNodes.item(PrintPreviewWebUITest.BAR_INDEX).
229 querySelector('.destination-list-item-name').textContent);
234 // Test that the printer list is structured correctly after calling
235 // addCloudPrinters with an empty list.
236 TEST_F('PrintPreviewWebUITest', 'TestPrinterListCloudEmpty', function() {
237 this.setInitialSettings();
238 this.setLocalDestinations();
240 var cloudPrintEnableEvent =
241 new Event(print_preview.NativeLayer.EventType.CLOUD_PRINT_ENABLE);
242 cloudPrintEnableEvent.baseCloudPrintUrl = 'cloudprint url';
243 this.nativeLayer_.dispatchEvent(cloudPrintEnableEvent);
245 var searchDoneEvent =
246 new Event(cloudprint.CloudPrintInterface.EventType.SEARCH_DONE);
247 searchDoneEvent.printers = [];
248 searchDoneEvent.isRecent = true;
249 searchDoneEvent.email = 'foo@chromium.org';
250 printPreview.cloudPrintInterface_.dispatchEvent(searchDoneEvent);
252 var recentList = $('destination-search').querySelector('.recent-list ul');
253 var localList = $('destination-search').querySelector('.local-list ul');
254 var cloudList = $('destination-search').querySelector('.cloud-list ul');
256 assertNotEquals(null, recentList);
257 assertEquals(1, recentList.childNodes.length);
258 assertEquals('FooName',
259 recentList.childNodes.item(0).querySelector(
260 '.destination-list-item-name').textContent);
262 assertNotEquals(null, localList);
263 assertEquals(3, localList.childNodes.length);
264 assertEquals('Save as PDF',
265 localList.childNodes.item(PrintPreviewWebUITest.PDF_INDEX).
266 querySelector('.destination-list-item-name').textContent);
267 assertEquals('FooName',
268 localList.childNodes.item(PrintPreviewWebUITest.FOO_INDEX).
269 querySelector('.destination-list-item-name').textContent);
270 assertEquals('BarName',
271 localList.childNodes.item(PrintPreviewWebUITest.BAR_INDEX).
272 querySelector('.destination-list-item-name').textContent);
274 assertNotEquals(null, cloudList);
275 assertEquals(0, cloudList.childNodes.length);
281 * Verify that |section| visibility matches |visible|.
282 * @param {HTMLDivElement} section The section to check.
283 * @param {boolean} visible The expected state of visibility.
285 function checkSectionVisible(section, visible) {
286 assertNotEquals(null, section);
288 visible, section.classList.contains('visible'), 'section=' + section.id);
291 function checkElementDisplayed(el, isDisplayed) {
292 assertNotEquals(null, el);
293 expectEquals(isDisplayed,
295 'element="' + el.id + '" of class "' + el.classList + '"');
298 function getCddTemplate(printerId) {
300 printerId: printerId,
304 supported_content_type: [{content_type: 'application/pdf'}],
308 {type: 'STANDARD_COLOR', is_default: true},
309 {type: 'STANDARD_MONOCHROME'}
315 {type: 'NO_DUPLEX', is_default: true},
322 {type: 'PORTRAIT', is_default: true},
330 width_microns: 215900,
331 height_microns: 279400,
341 TEST_F('PrintPreviewWebUITest', 'TestSystemDialogLinkIsHiddenInAppKioskMode',
344 assertEquals(null, $('system-dialog-link'));
346 this.initialSettings_.isInAppKioskMode_ = true;
347 this.setInitialSettings();
349 checkElementDisplayed($('system-dialog-link'), false);
355 // Test that disabled settings hide the disabled sections.
356 TEST_F('PrintPreviewWebUITest', 'TestSectionsDisabled', function() {
357 checkSectionVisible($('layout-settings'), false);
358 checkSectionVisible($('color-settings'), false);
359 checkSectionVisible($('copies-settings'), false);
361 this.setInitialSettings();
362 this.setLocalDestinations();
363 var device = getCddTemplate("FooDevice");
364 device.capabilities.printer.color = {
366 {"is_default": true, "type": "STANDARD_COLOR"}
369 delete device.capabilities.printer.copies;
370 this.setCapabilities(device);
372 checkSectionVisible($('layout-settings'), true);
373 checkSectionVisible($('color-settings'), false);
374 checkSectionVisible($('copies-settings'), false);
376 this.waitForAnimationToEnd('other-options-collapsible');
379 // When the source is 'PDF' and 'Save as PDF' option is selected, we hide the
380 // fit to page option.
381 TEST_F('PrintPreviewWebUITest', 'PrintToPDFSelectedCapabilities', function() {
383 this.initialSettings_.isDocumentModifiable_ = false;
384 this.initialSettings_.systemDefaultDestinationId_ = 'Save as PDF';
385 this.setInitialSettings();
388 printerId: 'Save as PDF',
394 {type: 'AUTO', is_default: true},
401 {type: 'STANDARD_COLOR', is_default: true}
416 this.setCapabilities(device);
418 checkSectionVisible($('other-options-settings'), false);
419 checkSectionVisible($('media-size-settings'), false);
424 // When the source is 'HTML', we always hide the fit to page option and show
425 // media size option.
426 TEST_F('PrintPreviewWebUITest', 'SourceIsHTMLCapabilities', function() {
427 this.setInitialSettings();
428 this.setLocalDestinations();
429 this.setCapabilities(getCddTemplate("FooDevice"));
431 var otherOptions = $('other-options-settings');
432 var fitToPage = otherOptions.querySelector('.fit-to-page-container');
433 var mediaSize = $('media-size-settings');
435 // Check that options are collapsed (section is visible, because duplex is
437 checkSectionVisible(otherOptions, true);
438 checkElementDisplayed(fitToPage, false);
439 checkSectionVisible(mediaSize, false);
441 this.expandMoreSettings();
443 checkElementDisplayed(fitToPage, false);
444 checkSectionVisible(mediaSize, true);
446 this.waitForAnimationToEnd('more-settings');
449 // When the source is "PDF", depending on the selected destination printer, we
450 // show/hide the fit to page option and hide media size selection.
451 TEST_F('PrintPreviewWebUITest', 'SourceIsPDFCapabilities', function() {
452 this.initialSettings_.isDocumentModifiable_ = false;
453 this.setInitialSettings();
454 this.setLocalDestinations();
455 this.setCapabilities(getCddTemplate("FooDevice"));
457 var otherOptions = $('other-options-settings');
458 checkSectionVisible(otherOptions, true);
459 checkElementDisplayed(
460 otherOptions.querySelector('.fit-to-page-container'), true);
462 otherOptions.querySelector('.fit-to-page-checkbox').checked);
463 checkSectionVisible($('media-size-settings'), true);
465 this.waitForAnimationToEnd('other-options-collapsible');
468 // When the print scaling is disabled for the source "PDF", we show the fit
469 // to page option but the state is unchecked by default.
470 TEST_F('PrintPreviewWebUITest', 'PrintScalingDisabledForPlugin', function() {
471 this.initialSettings_.isDocumentModifiable_ = false;
472 this.setInitialSettings();
473 this.setLocalDestinations();
474 this.setCapabilities(getCddTemplate("FooDevice"));
476 // Indicate that the PDF does not support scaling by default.
477 var printPresetOptionsEvent = new Event(
478 print_preview.NativeLayer.EventType.PRINT_PRESET_OPTIONS);
479 printPresetOptionsEvent.optionsFromDocument = {disableScaling: true};
480 this.nativeLayer_.dispatchEvent(printPresetOptionsEvent);
482 var otherOptions = $('other-options-settings');
483 checkSectionVisible(otherOptions, true);
484 checkElementDisplayed(
485 otherOptions.querySelector('.fit-to-page-container'), true);
487 otherOptions.querySelector('.fit-to-page-checkbox').checked);
489 this.waitForAnimationToEnd('other-options-collapsible');
492 // When the number of copies print preset is set for source 'PDF', we update
493 // copies value if capability is supported by printer.
494 TEST_F('PrintPreviewWebUITest', 'CheckNumCopiesPrintPreset', function() {
495 this.initialSettings_.isDocumentModifiable_ = false;
496 this.setInitialSettings();
497 this.setLocalDestinations();
498 this.setCapabilities(getCddTemplate("FooDevice"));
500 // Indicate that the number of copies print preset is set for source PDF.
501 var printPresetOptions = {
502 disableScaling: true,
505 var printPresetOptionsEvent = new Event(
506 print_preview.NativeLayer.EventType.PRINT_PRESET_OPTIONS);
507 printPresetOptionsEvent.optionsFromDocument = printPresetOptions;
508 this.nativeLayer_.dispatchEvent(printPresetOptionsEvent);
510 checkSectionVisible($('copies-settings'), true);
512 printPresetOptions.copies,
513 parseInt($('copies-settings').querySelector('.copies').value));
515 this.waitForAnimationToEnd('other-options-collapsible');
518 // Make sure that custom margins controls are properly set up.
519 TEST_F('PrintPreviewWebUITest', 'CustomMarginsControlsCheck', function() {
520 this.setInitialSettings();
521 this.setLocalDestinations();
522 this.setCapabilities(getCddTemplate("FooDevice"));
524 printPreview.printTicketStore_.marginsType.updateValue(
525 print_preview.ticket_items.MarginsType.Value.CUSTOM);
527 ['left', 'top', 'right', 'bottom'].forEach(function(margin) {
528 var control = $('preview-area').querySelector('.margin-control-' + margin);
529 assertNotEquals(null, control);
530 var input = control.querySelector('.margin-control-textbox');
531 assertTrue(input.hasAttribute('aria-label'));
532 assertNotEquals('undefined', input.getAttribute('aria-label'));
534 this.waitForAnimationToEnd('more-settings');
537 // Page layout has zero margins. Hide header and footer option.
538 TEST_F('PrintPreviewWebUITest', 'PageLayoutHasNoMarginsHideHeaderFooter',
540 this.setInitialSettings();
541 this.setLocalDestinations();
542 this.setCapabilities(getCddTemplate("FooDevice"));
544 var otherOptions = $('other-options-settings');
545 var headerFooter = otherOptions.querySelector('.header-footer-container');
547 // Check that options are collapsed (section is visible, because duplex is
549 checkSectionVisible(otherOptions, true);
550 checkElementDisplayed(headerFooter, false);
552 this.expandMoreSettings();
554 checkElementDisplayed(headerFooter, true);
556 printPreview.printTicketStore_.marginsType.updateValue(
557 print_preview.ticket_items.MarginsType.Value.CUSTOM);
558 printPreview.printTicketStore_.customMargins.updateValue(
559 new print_preview.Margins(0, 0, 0, 0));
561 checkElementDisplayed(headerFooter, false);
563 this.waitForAnimationToEnd('more-settings');
566 // Page layout has half-inch margins. Show header and footer option.
567 TEST_F('PrintPreviewWebUITest', 'PageLayoutHasMarginsShowHeaderFooter',
569 this.setInitialSettings();
570 this.setLocalDestinations();
571 this.setCapabilities(getCddTemplate("FooDevice"));
573 var otherOptions = $('other-options-settings');
574 var headerFooter = otherOptions.querySelector('.header-footer-container');
576 // Check that options are collapsed (section is visible, because duplex is
578 checkSectionVisible(otherOptions, true);
579 checkElementDisplayed(headerFooter, false);
581 this.expandMoreSettings();
583 checkElementDisplayed(headerFooter, true);
585 printPreview.printTicketStore_.marginsType.updateValue(
586 print_preview.ticket_items.MarginsType.Value.CUSTOM);
587 printPreview.printTicketStore_.customMargins.updateValue(
588 new print_preview.Margins(36, 36, 36, 36));
590 checkElementDisplayed(headerFooter, true);
592 this.waitForAnimationToEnd('more-settings');
595 // Page layout has zero top and bottom margins. Hide header and footer option.
596 TEST_F('PrintPreviewWebUITest',
597 'ZeroTopAndBottomMarginsHideHeaderFooter',
599 this.setInitialSettings();
600 this.setLocalDestinations();
601 this.setCapabilities(getCddTemplate("FooDevice"));
603 var otherOptions = $('other-options-settings');
604 var headerFooter = otherOptions.querySelector('.header-footer-container');
606 // Check that options are collapsed (section is visible, because duplex is
608 checkSectionVisible(otherOptions, true);
609 checkElementDisplayed(headerFooter, false);
611 this.expandMoreSettings();
613 checkElementDisplayed(headerFooter, true);
615 printPreview.printTicketStore_.marginsType.updateValue(
616 print_preview.ticket_items.MarginsType.Value.CUSTOM);
617 printPreview.printTicketStore_.customMargins.updateValue(
618 new print_preview.Margins(0, 36, 0, 36));
620 checkElementDisplayed(headerFooter, false);
622 this.waitForAnimationToEnd('more-settings');
625 // Page layout has zero top and half-inch bottom margin. Show header and footer
627 TEST_F('PrintPreviewWebUITest',
628 'ZeroTopAndNonZeroBottomMarginShowHeaderFooter',
630 this.setInitialSettings();
631 this.setLocalDestinations();
632 this.setCapabilities(getCddTemplate("FooDevice"));
634 var otherOptions = $('other-options-settings');
635 var headerFooter = otherOptions.querySelector('.header-footer-container');
637 // Check that options are collapsed (section is visible, because duplex is
639 checkSectionVisible(otherOptions, true);
640 checkElementDisplayed(headerFooter, false);
642 this.expandMoreSettings();
644 checkElementDisplayed(headerFooter, true);
646 printPreview.printTicketStore_.marginsType.updateValue(
647 print_preview.ticket_items.MarginsType.Value.CUSTOM);
648 printPreview.printTicketStore_.customMargins.updateValue(
649 new print_preview.Margins(0, 36, 36, 36));
651 checkElementDisplayed(headerFooter, true);
653 this.waitForAnimationToEnd('more-settings');
656 // Test that the color settings, one option, standard monochrome.
657 TEST_F('PrintPreviewWebUITest', 'TestColorSettingsMonochrome', function() {
658 this.setInitialSettings();
659 this.setLocalDestinations();
661 // Only one option, standard monochrome.
662 var device = getCddTemplate("FooDevice");
663 device.capabilities.printer.color = {
665 {"is_default": true, "type": "STANDARD_MONOCHROME"}
668 this.setCapabilities(device);
670 checkSectionVisible($('color-settings'), false);
672 this.waitForAnimationToEnd('more-settings');
675 // Test that the color settings, one option, custom monochrome.
676 TEST_F('PrintPreviewWebUITest', 'TestColorSettingsCustomMonochrome',
678 this.setInitialSettings();
679 this.setLocalDestinations();
681 // Only one option, standard monochrome.
682 var device = getCddTemplate("FooDevice");
683 device.capabilities.printer.color = {
685 {"is_default": true, "type": "CUSTOM_MONOCHROME", "vendor_id": "42"}
688 this.setCapabilities(device);
690 checkSectionVisible($('color-settings'), false);
692 this.waitForAnimationToEnd('more-settings');
695 // Test that the color settings, one option, standard color.
696 TEST_F('PrintPreviewWebUITest', 'TestColorSettingsColor', function() {
697 this.setInitialSettings();
698 this.setLocalDestinations();
700 var device = getCddTemplate("FooDevice");
701 device.capabilities.printer.color = {
703 {"is_default": true, "type": "STANDARD_COLOR"}
706 this.setCapabilities(device);
708 checkSectionVisible($('color-settings'), false);
710 this.waitForAnimationToEnd('more-settings');
713 // Test that the color settings, one option, custom color.
714 TEST_F('PrintPreviewWebUITest', 'TestColorSettingsCustomColor', function() {
715 this.setInitialSettings();
716 this.setLocalDestinations();
718 var device = getCddTemplate("FooDevice");
719 device.capabilities.printer.color = {
721 {"is_default": true, "type": "CUSTOM_COLOR", "vendor_id": "42"}
724 this.setCapabilities(device);
726 checkSectionVisible($('color-settings'), false);
728 this.waitForAnimationToEnd('more-settings');
731 // Test that the color settings, two options, both standard, defaults to color.
732 TEST_F('PrintPreviewWebUITest', 'TestColorSettingsBothStandardDefaultColor',
734 this.setInitialSettings();
735 this.setLocalDestinations();
737 var device = getCddTemplate("FooDevice");
738 device.capabilities.printer.color = {
740 {"type": "STANDARD_MONOCHROME"},
741 {"is_default": true, "type": "STANDARD_COLOR"}
744 this.setCapabilities(device);
746 checkSectionVisible($('color-settings'), true);
749 $('color-settings').querySelector('.color-settings-select').value);
751 this.waitForAnimationToEnd('more-settings');
754 // Test that the color settings, two options, both standard, defaults to
756 TEST_F('PrintPreviewWebUITest',
757 'TestColorSettingsBothStandardDefaultMonochrome', function() {
758 this.setInitialSettings();
759 this.setLocalDestinations();
761 var device = getCddTemplate("FooDevice");
762 device.capabilities.printer.color = {
764 {"is_default": true, "type": "STANDARD_MONOCHROME"},
765 {"type": "STANDARD_COLOR"}
768 this.setCapabilities(device);
770 checkSectionVisible($('color-settings'), true);
772 'bw', $('color-settings').querySelector('.color-settings-select').value);
774 this.waitForAnimationToEnd('more-settings');
777 // Test that the color settings, two options, both custom, defaults to color.
778 TEST_F('PrintPreviewWebUITest',
779 'TestColorSettingsBothCustomDefaultColor', function() {
780 this.setInitialSettings();
781 this.setLocalDestinations();
783 var device = getCddTemplate("FooDevice");
784 device.capabilities.printer.color = {
786 {"type": "CUSTOM_MONOCHROME", "vendor_id": "42"},
787 {"is_default": true, "type": "CUSTOM_COLOR", "vendor_id": "43"}
790 this.setCapabilities(device);
792 checkSectionVisible($('color-settings'), true);
795 $('color-settings').querySelector('.color-settings-select').value);
797 this.waitForAnimationToEnd('more-settings');
800 // Test to verify that duplex settings are set according to the printer
802 TEST_F('PrintPreviewWebUITest', 'TestDuplexSettingsTrue', function() {
803 this.setInitialSettings();
804 this.setLocalDestinations();
805 this.setCapabilities(getCddTemplate("FooDevice"));
807 var otherOptions = $('other-options-settings');
808 checkSectionVisible(otherOptions, true);
809 expectFalse(otherOptions.querySelector('.duplex-container').hidden);
810 expectFalse(otherOptions.querySelector('.duplex-checkbox').checked);
812 this.waitForAnimationToEnd('more-settings');
815 // Test to verify that duplex settings are set according to the printer
817 TEST_F('PrintPreviewWebUITest', 'TestDuplexSettingsFalse', function() {
818 this.setInitialSettings();
819 this.setLocalDestinations();
820 var device = getCddTemplate("FooDevice");
821 delete device.capabilities.printer.duplex;
822 this.setCapabilities(device);
824 // Check that it is collapsed.
825 var otherOptions = $('other-options-settings');
826 checkSectionVisible(otherOptions, false);
828 this.expandMoreSettings();
830 // Now it should be visible.
831 checkSectionVisible(otherOptions, true);
832 expectTrue(otherOptions.querySelector('.duplex-container').hidden);
834 this.waitForAnimationToEnd('more-settings');
837 // Test that changing the selected printer updates the preview.
838 TEST_F('PrintPreviewWebUITest', 'TestPrinterChangeUpdatesPreview', function() {
839 this.setInitialSettings();
840 this.setLocalDestinations();
841 this.setCapabilities(getCddTemplate("FooDevice"));
843 var previewGenerator = mock(print_preview.PreviewGenerator);
844 printPreview.previewArea_.previewGenerator_ = previewGenerator.proxy();
845 previewGenerator.expects(exactly(6)).requestPreview();
848 var destinations = printPreview.destinationStore_.destinations();
849 for (var destination, i = 0; destination = destinations[i]; i++) {
850 if (destination.id == 'BarDevice') {
851 barDestination = destination;
856 printPreview.destinationStore_.selectDestination(barDestination);
858 var device = getCddTemplate("BarDevice");
859 device.capabilities.printer.color = {
861 {"is_default": true, "type": "STANDARD_MONOCHROME"}
864 this.setCapabilities(device);
866 this.waitForAnimationToEnd('more-settings');
869 // Test that error message is displayed when plugin doesn't exist.
870 TEST_F('PrintPreviewWebUITest', 'TestNoPDFPluginErrorMessage', function() {
871 var previewAreaEl = $('preview-area');
873 var loadingMessageEl =
874 previewAreaEl.getElementsByClassName('preview-area-loading-message')[0];
875 expectEquals(true, loadingMessageEl.hidden);
877 var previewFailedMessageEl = previewAreaEl.getElementsByClassName(
878 'preview-area-preview-failed-message')[0];
879 expectEquals(true, previewFailedMessageEl.hidden);
881 var printFailedMessageEl =
882 previewAreaEl.getElementsByClassName('preview-area-print-failed')[0];
883 expectEquals(true, printFailedMessageEl.hidden);
885 var customMessageEl =
886 previewAreaEl.getElementsByClassName('preview-area-custom-message')[0];
887 expectEquals(false, customMessageEl.hidden);
892 // Test custom localized paper names.
893 TEST_F('PrintPreviewWebUITest', 'TestCustomPaperNames', function() {
894 this.setInitialSettings();
895 this.setLocalDestinations();
897 var customLocalizedMediaName = 'Vendor defined localized media name';
898 var customMediaName = 'Vendor defined media name';
900 var device = getCddTemplate("FooDevice");
901 device.capabilities.printer.media_size = {
904 width_microns: 15900,
905 height_microns: 79400,
907 custom_display_name_localized: [
908 { locale: navigator.language,
909 value: customLocalizedMediaName
914 width_microns: 15900,
915 height_microns: 79400,
916 custom_display_name: customMediaName
921 this.setCapabilities(device);
923 this.expandMoreSettings();
925 checkSectionVisible($('media-size-settings'), true);
926 var mediaSelect = $('media-size-settings').querySelector('.settings-select');
927 // Check the default media item.
929 customLocalizedMediaName,
930 mediaSelect.options[mediaSelect.selectedIndex].text);
931 // Check the other media item.
934 mediaSelect.options[mediaSelect.selectedIndex == 0 ? 1 : 0].text);
936 this.waitForAnimationToEnd('more-settings');