Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('print_preview_test', function() { | 5 cr.define('print_preview_test', function() { |
| 6 /** | 6 /** |
| 7 * Index of the "Save as PDF" printer. | 7 * Index of the "Save as PDF" printer. |
| 8 * @type {number} | 8 * @type {number} |
| 9 * @const | 9 * @const |
| 10 */ | 10 */ |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 127 is_default: true | 127 is_default: true |
| 128 } | 128 } |
| 129 ] | 129 ] |
| 130 } | 130 } |
| 131 } | 131 } |
| 132 } | 132 } |
| 133 }; | 133 }; |
| 134 } | 134 } |
| 135 | 135 |
| 136 /** | 136 /** |
| 137 * @param {string} printerId | |
| 138 * @return {!Object} | |
| 139 */ | |
| 140 function getCddTemplateWithAdvancedSettings(printerId) { | |
| 141 var template = getCddTemplate(printerId); | |
| 142 template.capabilities.printer.vendor_capability = [{ | |
| 143 display_name: 'Print Area', | |
| 144 id: 'Print Area', | |
| 145 type: 'SELECT', | |
| 146 select_cap: { | |
| 147 option: [ | |
| 148 {display_name: 'A4', value: 4, is_default: true}, | |
| 149 {display_name: 'A6', value: 6}, | |
| 150 {display_name: 'A7', value: 7}, | |
| 151 ], | |
| 152 }, | |
| 153 }]; | |
| 154 return template; | |
| 155 } | |
| 156 | |
| 157 /** | |
| 137 * Even though animation duration and delay is set to zero, it is necessary to | 158 * Even though animation duration and delay is set to zero, it is necessary to |
| 138 * wait until the animation has finished. | 159 * wait until the animation has finished. |
| 139 * @return {!Promise} A promise firing when the animation is done. | 160 * @return {!Promise} A promise firing when the animation is done. |
| 140 */ | 161 */ |
| 141 function whenAnimationDone(elementId) { | 162 function whenAnimationDone(elementId) { |
| 142 return new Promise(function(resolve) { | 163 return new Promise(function(resolve) { |
| 143 // Add a listener for the animation end event. | 164 // Add a listener for the animation end event. |
| 144 var element = $(elementId); | 165 var element = $(elementId); |
| 145 element.addEventListener('animationend', function f(e) { | 166 element.addEventListener('animationend', function f(e) { |
| 146 element.removeEventListener(f, 'animationend'); | 167 element.removeEventListener(f, 'animationend'); |
| 147 resolve(); | 168 resolve(); |
| 148 }); | 169 }); |
| 149 }); | 170 }); |
| 150 } | 171 } |
| 151 | 172 |
| 152 /** | 173 /** |
| 153 * Expand the 'More Settings' div to expose all options. | 174 * Expand the 'More Settings' div to expose all options. |
| 154 */ | 175 */ |
| 155 function expandMoreSettings() { | 176 function expandMoreSettings() { |
| 156 var moreSettings = $('more-settings'); | 177 var moreSettings = $('more-settings'); |
| 157 checkSectionVisible(moreSettings, true); | 178 checkSectionVisible(moreSettings, true); |
| 158 moreSettings.click(); | 179 moreSettings.click(); |
| 159 } | 180 } |
| 160 | 181 |
| 182 // Simulates a click of the advanced options settings button to bring up the | |
| 183 // advanced settings overlay. | |
| 184 function openAdvancedSettings() { | |
| 185 // Check for button and click to view advanced settings section. | |
| 186 var advancedOptionsSettingsButton = | |
| 187 $('advanced-options-settings'). | |
| 188 querySelector('.advanced-options-settings-button'); | |
| 189 checkElementDisplayed(advancedOptionsSettingsButton, true); | |
| 190 // Button is disabled during testing due to test version of | |
| 191 // testPluginCompatibility() being set to always return false. Enable button | |
| 192 // to send click event. | |
| 193 advancedOptionsSettingsButton.disabled = false; | |
| 194 advancedOptionsSettingsButton.click(); | |
| 195 } | |
| 196 | |
| 197 /** | |
| 198 * Repeated setup steps for the advanced settings tests. | |
| 199 * Disables accessiblity errors, sets initial settings, and verifies | |
| 200 * advanced options section is visible after expanding more settings. | |
| 201 */ | |
| 202 function setupAdvancedSettingsTest(device) { | |
| 203 // Need to disable this since overlay animation will not fully complete. | |
|
rbpotter
2017/05/31 23:28:24
Since all tests now run with accessibility issues
dpapad
2017/06/01 00:29:48
Updated.
| |
| 204 setLocalDestinations(); | |
| 205 setCapabilities(device); | |
| 206 expandMoreSettings(); | |
| 207 | |
| 208 // Check that the advanced options settings section is visible. | |
| 209 checkSectionVisible($('advanced-options-settings'), true); | |
| 210 } | |
| 211 | |
| 161 /** @return {boolean} */ | 212 /** @return {boolean} */ |
| 162 function isPrintAsImageEnabled() { | 213 function isPrintAsImageEnabled() { |
| 163 // Should be enabled by default on non Windows/Mac. | 214 // Should be enabled by default on non Windows/Mac. |
| 164 return (!cr.isWindows && !cr.isMac && | 215 return (!cr.isWindows && !cr.isMac && |
| 165 loadTimeData.getBoolean('printPdfAsImageEnabled')); | 216 loadTimeData.getBoolean('printPdfAsImageEnabled')); |
| 166 } | 217 } |
| 167 | 218 |
| 168 suite('PrintPreview', function() { | 219 suite('PrintPreview', function() { |
| 169 suiteSetup(function() { | 220 suiteSetup(function() { |
| 170 function CloudPrintInterfaceStub() { | 221 function CloudPrintInterfaceStub() { |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 529 checkElementDisplayed(fitToPage, false); | 580 checkElementDisplayed(fitToPage, false); |
| 530 if (isPrintAsImageEnabled()) | 581 if (isPrintAsImageEnabled()) |
| 531 checkElementDisplayed(rasterize, false); | 582 checkElementDisplayed(rasterize, false); |
| 532 checkSectionVisible(mediaSize, true); | 583 checkSectionVisible(mediaSize, true); |
| 533 checkSectionVisible(scalingSettings, true); | 584 checkSectionVisible(scalingSettings, true); |
| 534 | 585 |
| 535 return whenAnimationDone('more-settings'); | 586 return whenAnimationDone('more-settings'); |
| 536 }); | 587 }); |
| 537 }); | 588 }); |
| 538 | 589 |
| 539 // When the source is "PDF", depending on the selected destination printer, | 590 // When the source is 'PDF', depending on the selected destination printer, |
| 540 // we show/hide the fit to page option and hide media size selection. | 591 // we show/hide the fit to page option and hide media size selection. |
| 541 test('SourceIsPDFCapabilities', function() { | 592 test('SourceIsPDFCapabilities', function() { |
| 542 initialSettings.isDocumentModifiable_ = false; | 593 initialSettings.isDocumentModifiable_ = false; |
| 543 setInitialSettings(); | 594 setInitialSettings(); |
| 544 return nativeLayer.whenCalled('getInitialSettings').then( | 595 return nativeLayer.whenCalled('getInitialSettings').then( |
| 545 function() { | 596 function() { |
| 546 setLocalDestinations(); | 597 setLocalDestinations(); |
| 547 setCapabilities(getCddTemplate('FooDevice')); | 598 setCapabilities(getCddTemplate('FooDevice')); |
| 548 | 599 |
| 549 var otherOptions = $('other-options-settings'); | 600 var otherOptions = $('other-options-settings'); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 568 expectFalse( | 619 expectFalse( |
| 569 rasterizeContainer.querySelector('.checkbox').checked); | 620 rasterizeContainer.querySelector('.checkbox').checked); |
| 570 } | 621 } |
| 571 checkSectionVisible($('media-size-settings'), true); | 622 checkSectionVisible($('media-size-settings'), true); |
| 572 checkSectionVisible(scalingSettings, true); | 623 checkSectionVisible(scalingSettings, true); |
| 573 | 624 |
| 574 return whenAnimationDone('other-options-collapsible'); | 625 return whenAnimationDone('other-options-collapsible'); |
| 575 }); | 626 }); |
| 576 }); | 627 }); |
| 577 | 628 |
| 578 // When the source is "PDF", depending on the selected destination printer, | 629 // When the source is 'PDF', depending on the selected destination printer, |
| 579 // we show/hide the fit to page option and hide media size selection. | 630 // we show/hide the fit to page option and hide media size selection. |
| 580 test('ScalingUnchecksFitToPage', function() { | 631 test('ScalingUnchecksFitToPage', function() { |
| 581 initialSettings.isDocumentModifiable_ = false; | 632 initialSettings.isDocumentModifiable_ = false; |
| 582 setInitialSettings(); | 633 setInitialSettings(); |
| 583 return nativeLayer.whenCalled('getInitialSettings').then( | 634 return nativeLayer.whenCalled('getInitialSettings').then( |
| 584 function() { | 635 function() { |
| 585 setLocalDestinations(); | 636 setLocalDestinations(); |
| 586 setCapabilities(getCddTemplate('FooDevice')); | 637 setCapabilities(getCddTemplate('FooDevice')); |
| 587 | 638 |
| 588 var otherOptions = $('other-options-settings'); | 639 var otherOptions = $('other-options-settings'); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 650 // duplex setting if capability is supported by printer. | 701 // duplex setting if capability is supported by printer. |
| 651 test('CheckDuplexPrintPreset', function() { | 702 test('CheckDuplexPrintPreset', function() { |
| 652 initialSettings.isDocumentModifiable_ = false; | 703 initialSettings.isDocumentModifiable_ = false; |
| 653 setInitialSettings(); | 704 setInitialSettings(); |
| 654 | 705 |
| 655 return nativeLayer.whenCalled('getInitialSettings').then( | 706 return nativeLayer.whenCalled('getInitialSettings').then( |
| 656 function() { | 707 function() { |
| 657 setLocalDestinations(); | 708 setLocalDestinations(); |
| 658 setCapabilities(getCddTemplate('FooDevice')); | 709 setCapabilities(getCddTemplate('FooDevice')); |
| 659 | 710 |
| 660 // Indicate that the duplex print preset is set to "long edge" for | 711 // Indicate that the duplex print preset is set to 'long edge' for |
| 661 // source PDF. | 712 // source PDF. |
| 662 var printPresetOptions = { | 713 var printPresetOptions = { |
| 663 duplex: 1 | 714 duplex: 1 |
| 664 }; | 715 }; |
| 665 var printPresetOptionsEvent = new Event( | 716 var printPresetOptionsEvent = new Event( |
| 666 print_preview.NativeLayer.EventType.PRINT_PRESET_OPTIONS); | 717 print_preview.NativeLayer.EventType.PRINT_PRESET_OPTIONS); |
| 667 printPresetOptionsEvent.optionsFromDocument = printPresetOptions; | 718 printPresetOptionsEvent.optionsFromDocument = printPresetOptions; |
| 668 nativeLayer.getEventTarget(). | 719 nativeLayer.getEventTarget(). |
| 669 dispatchEvent(printPresetOptionsEvent); | 720 dispatchEvent(printPresetOptionsEvent); |
| 670 | 721 |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 868 // Oriented in landscape, there should be enough space for | 919 // Oriented in landscape, there should be enough space for |
| 869 // header/footer. | 920 // header/footer. |
| 870 printPreview.printTicketStore_.landscape.updateValue(true); | 921 printPreview.printTicketStore_.landscape.updateValue(true); |
| 871 checkElementDisplayed(headerFooter, true); | 922 checkElementDisplayed(headerFooter, true); |
| 872 | 923 |
| 873 return whenAnimationDone('more-settings'); | 924 return whenAnimationDone('more-settings'); |
| 874 }); | 925 }); |
| 875 }); | 926 }); |
| 876 | 927 |
| 877 // Test that the color settings, one option, standard monochrome. | 928 // Test that the color settings, one option, standard monochrome. |
| 878 test('TestColorSettingsMonochrome', function() { | 929 test('ColorSettingsMonochrome', function() { |
| 879 setInitialSettings(); | 930 setInitialSettings(); |
| 880 return nativeLayer.whenCalled('getInitialSettings').then(function() { | 931 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 881 setLocalDestinations(); | 932 setLocalDestinations(); |
| 882 | 933 |
| 883 // Only one option, standard monochrome. | 934 // Only one option, standard monochrome. |
| 884 var device = getCddTemplate('FooDevice'); | 935 var device = getCddTemplate('FooDevice'); |
| 885 device.capabilities.printer.color = { | 936 device.capabilities.printer.color = { |
| 886 'option': [ | 937 'option': [ |
| 887 {'is_default': true, 'type': 'STANDARD_MONOCHROME'} | 938 {'is_default': true, 'type': 'STANDARD_MONOCHROME'} |
| 888 ] | 939 ] |
| 889 }; | 940 }; |
| 890 setCapabilities(device); | 941 setCapabilities(device); |
| 891 | 942 |
| 892 checkSectionVisible($('color-settings'), false); | 943 checkSectionVisible($('color-settings'), false); |
| 893 | 944 |
| 894 return whenAnimationDone('more-settings'); | 945 return whenAnimationDone('more-settings'); |
| 895 }); | 946 }); |
| 896 }); | 947 }); |
| 897 | 948 |
| 898 // Test that the color settings, one option, custom monochrome. | 949 // Test that the color settings, one option, custom monochrome. |
| 899 test('TestColorSettingsCustomMonochrome', function() { | 950 test('ColorSettingsCustomMonochrome', function() { |
| 900 setInitialSettings(); | 951 setInitialSettings(); |
| 901 return nativeLayer.whenCalled('getInitialSettings').then(function() { | 952 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 902 setLocalDestinations(); | 953 setLocalDestinations(); |
| 903 | 954 |
| 904 // Only one option, standard monochrome. | 955 // Only one option, standard monochrome. |
| 905 var device = getCddTemplate('FooDevice'); | 956 var device = getCddTemplate('FooDevice'); |
| 906 device.capabilities.printer.color = { | 957 device.capabilities.printer.color = { |
| 907 'option': [ | 958 'option': [ |
| 908 {'is_default': true, 'type': 'CUSTOM_MONOCHROME', | 959 {'is_default': true, 'type': 'CUSTOM_MONOCHROME', |
| 909 'vendor_id': '42'} | 960 'vendor_id': '42'} |
| 910 ] | 961 ] |
| 911 }; | 962 }; |
| 912 setCapabilities(device); | 963 setCapabilities(device); |
| 913 | 964 |
| 914 checkSectionVisible($('color-settings'), false); | 965 checkSectionVisible($('color-settings'), false); |
| 915 | 966 |
| 916 return whenAnimationDone('more-settings'); | 967 return whenAnimationDone('more-settings'); |
| 917 }); | 968 }); |
| 918 }); | 969 }); |
| 919 | 970 |
| 920 // Test that the color settings, one option, standard color. | 971 // Test that the color settings, one option, standard color. |
| 921 test('TestColorSettingsColor', function() { | 972 test('ColorSettingsColor', function() { |
| 922 setInitialSettings(); | 973 setInitialSettings(); |
| 923 return nativeLayer.whenCalled('getInitialSettings').then(function() { | 974 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 924 setLocalDestinations(); | 975 setLocalDestinations(); |
| 925 | 976 |
| 926 var device = getCddTemplate('FooDevice'); | 977 var device = getCddTemplate('FooDevice'); |
| 927 device.capabilities.printer.color = { | 978 device.capabilities.printer.color = { |
| 928 'option': [ | 979 'option': [ |
| 929 {'is_default': true, 'type': 'STANDARD_COLOR'} | 980 {'is_default': true, 'type': 'STANDARD_COLOR'} |
| 930 ] | 981 ] |
| 931 }; | 982 }; |
| 932 setCapabilities(device); | 983 setCapabilities(device); |
| 933 | 984 |
| 934 checkSectionVisible($('color-settings'), false); | 985 checkSectionVisible($('color-settings'), false); |
| 935 | 986 |
| 936 return whenAnimationDone('more-settings'); | 987 return whenAnimationDone('more-settings'); |
| 937 }); | 988 }); |
| 938 }); | 989 }); |
| 939 | 990 |
| 940 // Test that the color settings, one option, custom color. | 991 // Test that the color settings, one option, custom color. |
| 941 test('TestColorSettingsCustomColor', function() { | 992 test('ColorSettingsCustomColor', function() { |
| 942 setInitialSettings(); | 993 setInitialSettings(); |
| 943 return nativeLayer.whenCalled('getInitialSettings').then(function() { | 994 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 944 setLocalDestinations(); | 995 setLocalDestinations(); |
| 945 | 996 |
| 946 var device = getCddTemplate('FooDevice'); | 997 var device = getCddTemplate('FooDevice'); |
| 947 device.capabilities.printer.color = { | 998 device.capabilities.printer.color = { |
| 948 'option': [ | 999 'option': [ |
| 949 {'is_default': true, 'type': 'CUSTOM_COLOR', 'vendor_id': '42'} | 1000 {'is_default': true, 'type': 'CUSTOM_COLOR', 'vendor_id': '42'} |
| 950 ] | 1001 ] |
| 951 }; | 1002 }; |
| 952 setCapabilities(device); | 1003 setCapabilities(device); |
| 953 | 1004 |
| 954 checkSectionVisible($('color-settings'), false); | 1005 checkSectionVisible($('color-settings'), false); |
| 955 | 1006 |
| 956 return whenAnimationDone('more-settings'); | 1007 return whenAnimationDone('more-settings'); |
| 957 }); | 1008 }); |
| 958 }); | 1009 }); |
| 959 | 1010 |
| 960 // Test that the color settings, two options, both standard, defaults to | 1011 // Test that the color settings, two options, both standard, defaults to |
| 961 // color. | 1012 // color. |
| 962 test('TestColorSettingsBothStandardDefaultColor', function() { | 1013 test('ColorSettingsBothStandardDefaultColor', function() { |
| 963 setInitialSettings(); | 1014 setInitialSettings(); |
| 964 return nativeLayer.whenCalled('getInitialSettings').then(function() { | 1015 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 965 setLocalDestinations(); | 1016 setLocalDestinations(); |
| 966 | 1017 |
| 967 var device = getCddTemplate('FooDevice'); | 1018 var device = getCddTemplate('FooDevice'); |
| 968 device.capabilities.printer.color = { | 1019 device.capabilities.printer.color = { |
| 969 'option': [ | 1020 'option': [ |
| 970 {'type': 'STANDARD_MONOCHROME'}, | 1021 {'type': 'STANDARD_MONOCHROME'}, |
| 971 {'is_default': true, 'type': 'STANDARD_COLOR'} | 1022 {'is_default': true, 'type': 'STANDARD_COLOR'} |
| 972 ] | 1023 ] |
| 973 }; | 1024 }; |
| 974 setCapabilities(device); | 1025 setCapabilities(device); |
| 975 | 1026 |
| 976 checkSectionVisible($('color-settings'), true); | 1027 checkSectionVisible($('color-settings'), true); |
| 977 expectEquals( | 1028 expectEquals( |
| 978 'color', | 1029 'color', |
| 979 $('color-settings').querySelector('.color-settings-select').value); | 1030 $('color-settings').querySelector('.color-settings-select').value); |
| 980 | 1031 |
| 981 return whenAnimationDone('more-settings'); | 1032 return whenAnimationDone('more-settings'); |
| 982 }); | 1033 }); |
| 983 }); | 1034 }); |
| 984 | 1035 |
| 985 // Test that the color settings, two options, both standard, defaults to | 1036 // Test that the color settings, two options, both standard, defaults to |
| 986 // monochrome. | 1037 // monochrome. |
| 987 test('TestColorSettingsBothStandardDefaultMonochrome', function() { | 1038 test('ColorSettingsBothStandardDefaultMonochrome', function() { |
| 988 setInitialSettings(); | 1039 setInitialSettings(); |
| 989 return nativeLayer.whenCalled('getInitialSettings').then(function() { | 1040 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 990 setLocalDestinations(); | 1041 setLocalDestinations(); |
| 991 | 1042 |
| 992 var device = getCddTemplate('FooDevice'); | 1043 var device = getCddTemplate('FooDevice'); |
| 993 device.capabilities.printer.color = { | 1044 device.capabilities.printer.color = { |
| 994 'option': [ | 1045 'option': [ |
| 995 {'is_default': true, 'type': 'STANDARD_MONOCHROME'}, | 1046 {'is_default': true, 'type': 'STANDARD_MONOCHROME'}, |
| 996 {'type': 'STANDARD_COLOR'} | 1047 {'type': 'STANDARD_COLOR'} |
| 997 ] | 1048 ] |
| 998 }; | 1049 }; |
| 999 setCapabilities(device); | 1050 setCapabilities(device); |
| 1000 | 1051 |
| 1001 checkSectionVisible($('color-settings'), true); | 1052 checkSectionVisible($('color-settings'), true); |
| 1002 expectEquals( | 1053 expectEquals( |
| 1003 'bw', | 1054 'bw', |
| 1004 $('color-settings').querySelector('.color-settings-select').value); | 1055 $('color-settings').querySelector('.color-settings-select').value); |
| 1005 | 1056 |
| 1006 return whenAnimationDone('more-settings'); | 1057 return whenAnimationDone('more-settings'); |
| 1007 }); | 1058 }); |
| 1008 }); | 1059 }); |
| 1009 | 1060 |
| 1010 // Test that the color settings, two options, both custom, defaults to | 1061 // Test that the color settings, two options, both custom, defaults to |
| 1011 // color. | 1062 // color. |
| 1012 test('TestColorSettingsBothCustomDefaultColor', function() { | 1063 test('ColorSettingsBothCustomDefaultColor', function() { |
| 1013 setInitialSettings(); | 1064 setInitialSettings(); |
| 1014 return nativeLayer.whenCalled('getInitialSettings').then( | 1065 return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| 1015 function() { | 1066 setLocalDestinations(); |
| 1016 setLocalDestinations(); | 1067 |
| 1017 | 1068 var device = getCddTemplate('FooDevice'); |
| 1018 var device = getCddTemplate('FooDevice'); | 1069 device.capabilities.printer.color = { |
| 1019 device.capabilities.printer.color = { | 1070 'option': [ |
| 1020 'option': [ | 1071 {'type': 'CUSTOM_MONOCHROME', 'vendor_id': '42'}, |
| 1021 {'type': 'CUSTOM_MONOCHROME', 'vendor_id': '42'}, | 1072 {'is_default': true, 'type': 'CUSTOM_COLOR', 'vendor_id': '43'} |
| 1022 {'is_default': true, 'type': 'CUSTOM_COLOR', 'vendor_id': '43'} | 1073 ] |
| 1074 }; | |
| 1075 setCapabilities(device); | |
| 1076 | |
| 1077 checkSectionVisible($('color-settings'), true); | |
| 1078 expectEquals( | |
| 1079 'color', | |
| 1080 $('color-settings').querySelector( | |
| 1081 '.color-settings-select').value); | |
| 1082 | |
| 1083 return whenAnimationDone('more-settings'); | |
| 1084 }); | |
| 1085 }); | |
| 1086 | |
| 1087 // Test to verify that duplex settings are set according to the printer | |
| 1088 // capabilities. | |
| 1089 test('DuplexSettingsTrue', function() { | |
| 1090 setInitialSettings(); | |
| 1091 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1092 setLocalDestinations(); | |
| 1093 setCapabilities(getCddTemplate('FooDevice')); | |
| 1094 | |
| 1095 var otherOptions = $('other-options-settings'); | |
| 1096 checkSectionVisible(otherOptions, true); | |
| 1097 duplexContainer = otherOptions.querySelector('#duplex-container'); | |
| 1098 expectFalse(duplexContainer.hidden); | |
| 1099 expectFalse(duplexContainer.querySelector('.checkbox').checked); | |
| 1100 | |
| 1101 return whenAnimationDone('more-settings'); | |
| 1102 }); | |
| 1103 }); | |
| 1104 | |
| 1105 // Test to verify that duplex settings are set according to the printer | |
| 1106 // capabilities. | |
| 1107 test('DuplexSettingsFalse', function() { | |
| 1108 setInitialSettings(); | |
| 1109 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1110 setLocalDestinations(); | |
| 1111 var device = getCddTemplate('FooDevice'); | |
| 1112 delete device.capabilities.printer.duplex; | |
| 1113 setCapabilities(device); | |
| 1114 | |
| 1115 // Check that it is collapsed. | |
| 1116 var otherOptions = $('other-options-settings'); | |
| 1117 checkSectionVisible(otherOptions, false); | |
| 1118 | |
| 1119 expandMoreSettings(); | |
| 1120 | |
| 1121 // Now it should be visible. | |
| 1122 checkSectionVisible(otherOptions, true); | |
| 1123 expectTrue(otherOptions.querySelector('#duplex-container').hidden); | |
| 1124 | |
| 1125 return whenAnimationDone('more-settings'); | |
| 1126 }); | |
| 1127 }); | |
| 1128 | |
| 1129 // Test that changing the selected printer updates the preview. | |
| 1130 test('PrinterChangeUpdatesPreview', function() { | |
| 1131 setInitialSettings(); | |
| 1132 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1133 setLocalDestinations(); | |
| 1134 setCapabilities(getCddTemplate('FooDevice')); | |
| 1135 | |
| 1136 var previewGenerator = mock(print_preview.PreviewGenerator); | |
| 1137 previewArea.previewGenerator_ = previewGenerator.proxy(); | |
| 1138 | |
| 1139 // The number of settings that can change due to a change in the | |
| 1140 // destination that will therefore dispatch ticket item change events. | |
| 1141 previewGenerator.expects(exactly(9)).requestPreview(); | |
| 1142 | |
| 1143 var barDestination = | |
| 1144 printPreview.destinationStore_.destinations().find( | |
| 1145 function(d) { | |
| 1146 return d.id == 'BarDevice'; | |
| 1147 }); | |
| 1148 | |
| 1149 printPreview.destinationStore_.selectDestination(barDestination); | |
| 1150 | |
| 1151 var device = getCddTemplate('BarDevice'); | |
| 1152 device.capabilities.printer.color = { | |
| 1153 'option': [ | |
| 1154 {'is_default': true, 'type': 'STANDARD_MONOCHROME'} | |
| 1155 ] | |
| 1156 }; | |
| 1157 setCapabilities(device); | |
| 1158 | |
| 1159 return whenAnimationDone('more-settings'); | |
| 1160 }); | |
| 1161 }); | |
| 1162 | |
| 1163 // Test that error message is displayed when plugin doesn't exist. | |
| 1164 test('NoPDFPluginErrorMessage', function() { | |
| 1165 setInitialSettings(); | |
| 1166 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1167 var previewAreaEl = $('preview-area'); | |
| 1168 | |
| 1169 var loadingMessageEl = | |
| 1170 previewAreaEl. | |
| 1171 getElementsByClassName('preview-area-loading-message')[0]; | |
| 1172 expectTrue(loadingMessageEl.hidden); | |
| 1173 | |
| 1174 var previewFailedMessageEl = previewAreaEl.getElementsByClassName( | |
| 1175 'preview-area-preview-failed-message')[0]; | |
| 1176 expectTrue(previewFailedMessageEl.hidden); | |
| 1177 | |
| 1178 var printFailedMessageEl = | |
| 1179 previewAreaEl. | |
| 1180 getElementsByClassName('preview-area-print-failed')[0]; | |
| 1181 expectTrue(printFailedMessageEl.hidden); | |
| 1182 | |
| 1183 var customMessageEl = | |
| 1184 previewAreaEl. | |
| 1185 getElementsByClassName('preview-area-custom-message')[0]; | |
| 1186 expectFalse(customMessageEl.hidden); | |
| 1187 }); | |
| 1188 }); | |
| 1189 | |
| 1190 // Test custom localized paper names. | |
| 1191 test('CustomPaperNames', function() { | |
| 1192 setInitialSettings(); | |
| 1193 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1194 setLocalDestinations(); | |
| 1195 | |
| 1196 var customLocalizedMediaName = 'Vendor defined localized media name'; | |
| 1197 var customMediaName = 'Vendor defined media name'; | |
| 1198 | |
| 1199 var device = getCddTemplate('FooDevice'); | |
| 1200 device.capabilities.printer.media_size = { | |
| 1201 option: [ | |
| 1202 { name: 'CUSTOM', | |
| 1203 width_microns: 15900, | |
| 1204 height_microns: 79400, | |
| 1205 is_default: true, | |
| 1206 custom_display_name_localized: [ | |
| 1207 { locale: navigator.language, | |
| 1208 value: customLocalizedMediaName | |
| 1209 } | |
| 1023 ] | 1210 ] |
| 1024 }; | 1211 }, |
| 1025 setCapabilities(device); | 1212 { name: 'CUSTOM', |
| 1026 | 1213 width_microns: 15900, |
| 1027 checkSectionVisible($('color-settings'), true); | 1214 height_microns: 79400, |
| 1028 expectEquals( | 1215 custom_display_name: customMediaName |
| 1029 'color', | 1216 } |
| 1030 $('color-settings').querySelector( | 1217 ] |
| 1031 '.color-settings-select').value); | 1218 }; |
| 1032 | 1219 |
| 1033 return whenAnimationDone('more-settings'); | 1220 setCapabilities(device); |
| 1034 }); | 1221 |
| 1035 }); | 1222 expandMoreSettings(); |
| 1036 | 1223 |
| 1224 checkSectionVisible($('media-size-settings'), true); | |
| 1225 var mediaSelect = | |
| 1226 $('media-size-settings').querySelector('.settings-select'); | |
| 1227 // Check the default media item. | |
| 1228 expectEquals( | |
| 1229 customLocalizedMediaName, | |
| 1230 mediaSelect.options[mediaSelect.selectedIndex].text); | |
| 1231 // Check the other media item. | |
| 1232 expectEquals( | |
| 1233 customMediaName, | |
| 1234 mediaSelect.options[mediaSelect.selectedIndex == 0 ? 1 : 0].text); | |
| 1235 | |
| 1236 return whenAnimationDone('more-settings'); | |
| 1237 }); | |
| 1238 }); | |
| 1239 | |
| 1240 // Test advanced settings with 1 capability (should not display settings | |
| 1241 // search box). | |
| 1242 test('AdvancedSettings1Option', function() { | |
| 1243 var device = getCddTemplateWithAdvancedSettings('FooDevice'); | |
| 1244 setInitialSettings(); | |
| 1245 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1246 setupAdvancedSettingsTest(device); | |
| 1247 | |
| 1248 // Open the advanced settings overlay. | |
| 1249 openAdvancedSettings(); | |
| 1250 | |
| 1251 // Check that advanced settings close button is now visible, | |
| 1252 // but not the search box (only 1 capability). | |
| 1253 var advancedSettingsCloseButton = $('advanced-settings'). | |
| 1254 querySelector('.close-button'); | |
| 1255 checkElementDisplayed(advancedSettingsCloseButton, true); | |
| 1256 checkElementDisplayed($('advanced-settings'). | |
| 1257 querySelector('.search-box-area'), false); | |
| 1258 | |
| 1259 return whenAnimationDone('more-settings'); | |
| 1260 }); | |
| 1261 }); | |
| 1262 | |
| 1263 | |
| 1264 // Test advanced settings with 2 capabilities (should have settings search | |
| 1265 // box). | |
| 1266 test('AdvancedSettings2Options', function() { | |
| 1267 var device = getCddTemplateWithAdvancedSettings('FooDevice'); | |
| 1268 // Add new capability. | |
| 1269 device.capabilities.printer.vendor_capability.push({ | |
| 1270 display_name: 'Paper Type', | |
| 1271 id: 'Paper Type', | |
| 1272 type: 'SELECT', | |
| 1273 select_cap: { | |
| 1274 option: [ | |
| 1275 {display_name: 'Standard', value: 0, is_default: true}, | |
| 1276 {display_name: 'Recycled', value: 1}, | |
| 1277 {display_name: 'Special', value: 2} | |
| 1278 ] | |
| 1279 } | |
| 1280 }); | |
| 1281 setInitialSettings(); | |
| 1282 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1283 setupAdvancedSettingsTest(device); | |
| 1284 | |
| 1285 // Open the advanced settings overlay. | |
| 1286 openAdvancedSettings(); | |
| 1287 | |
| 1288 // Check advanced settings is visible and that the search box now | |
| 1289 // appears. | |
| 1290 var advancedSettingsCloseButton = $('advanced-settings'). | |
| 1291 querySelector('.close-button'); | |
| 1292 checkElementDisplayed(advancedSettingsCloseButton, true); | |
| 1293 checkElementDisplayed($('advanced-settings'). | |
| 1294 querySelector('.search-box-area'), true); | |
| 1295 | |
| 1296 return whenAnimationDone('more-settings'); | |
| 1297 }); | |
| 1298 }); | |
| 1299 | |
| 1300 // Test that initialization with saved destination only issues one call | |
| 1301 // to startPreview. | |
| 1302 test('InitIssuesOneRequest', function() { | |
| 1303 // Load in a bunch of recent destinations with non null capabilities. | |
| 1304 var origin = cr.isChromeOS ? 'chrome_os' : 'local'; | |
| 1305 initialSettings.serializedAppStateStr_ = JSON.stringify({ | |
| 1306 version: 2, | |
| 1307 recentDestinations: [1, 2, 3].map(function(i) { | |
| 1308 return { | |
| 1309 id: 'ID' + i, origin: origin, account: '', | |
| 1310 capabilities: getCddTemplate('ID' + i), name: '', | |
| 1311 extensionId: '', extensionName: '' | |
| 1312 }; | |
| 1313 }), | |
| 1314 }); | |
| 1315 setCapabilities(getCddTemplate('ID1')); | |
| 1316 setCapabilities(getCddTemplate('ID2')); | |
| 1317 setCapabilities(getCddTemplate('ID3')); | |
| 1318 | |
| 1319 // Use a real preview generator. | |
| 1320 previewArea.previewGenerator_ = | |
| 1321 new print_preview.PreviewGenerator(printPreview.destinationStore_, | |
| 1322 printPreview.printTicketStore_, nativeLayer, | |
| 1323 printPreview.documentInfo_); | |
| 1324 | |
| 1325 // Preview generator starts out with inFlightRequestId_ == -1. The id | |
| 1326 // increments by 1 for each startGetPreview call it makes. It should only | |
| 1327 // make one such call during initialization or there will be a race; see | |
| 1328 // crbug.com/666595 | |
| 1329 expectEquals(-1, previewArea.previewGenerator_.inFlightRequestId_); | |
| 1330 setInitialSettings(); | |
| 1331 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1332 expectEquals(0, previewArea.previewGenerator_.inFlightRequestId_); | |
| 1333 }); | |
| 1334 }); | |
| 1335 | |
| 1336 // Test that invalid settings errors disable the print preview and display | |
| 1337 // an error and that the preview dialog can be recovered by selecting a | |
| 1338 // new destination. | |
| 1339 test('InvalidSettingsError', function() { | |
| 1340 // Setup | |
| 1341 setInitialSettings(); | |
| 1342 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1343 setLocalDestinations(); | |
| 1344 setCapabilities(getCddTemplate('FooDevice')); | |
| 1345 | |
| 1346 // Manually enable the print header. This is needed since there is no | |
| 1347 // plugin during test, so it will be set as disabled normally. | |
| 1348 printPreview.printHeader_.isEnabled = true; | |
| 1349 | |
| 1350 // There will be an error message in the preview area since the plugin | |
| 1351 // is not running. However, it should not be the invalid settings error. | |
| 1352 var previewAreaEl = $('preview-area'); | |
| 1353 var customMessageEl = | |
| 1354 previewAreaEl. | |
| 1355 getElementsByClassName('preview-area-custom-message')[0]; | |
| 1356 expectFalse(customMessageEl.hidden); | |
| 1357 var expectedMessageStart = 'The selected printer is not available or ' | |
| 1358 + 'not installed correctly.' | |
| 1359 expectFalse(customMessageEl.textContent.includes(expectedMessageStart)); | |
| 1360 | |
| 1361 // Verify that the print button is enabled. | |
| 1362 var printHeader = $('print-header'); | |
| 1363 var printButton = printHeader.querySelector('button.print'); | |
| 1364 checkElementDisplayed(printButton, true); | |
| 1365 expectFalse(printButton.disabled); | |
| 1366 | |
| 1367 // Report invalid settings error. | |
| 1368 var invalidSettingsEvent = | |
| 1369 new Event(print_preview.NativeLayer.EventType.SETTINGS_INVALID); | |
| 1370 nativeLayer.getEventTarget().dispatchEvent(invalidSettingsEvent); | |
| 1371 | |
| 1372 // Should be in an error state, print button disabled, invalid custom | |
| 1373 // error message shown. | |
| 1374 expectFalse(customMessageEl.hidden); | |
| 1375 expectTrue(customMessageEl.textContent.includes(expectedMessageStart)); | |
| 1376 expectTrue(printButton.disabled); | |
| 1377 | |
| 1378 // Select a new destination | |
| 1379 var barDestination = | |
| 1380 printPreview.destinationStore_.destinations().find( | |
| 1381 function(d) { | |
| 1382 return d.id == 'BarDevice'; | |
| 1383 }); | |
| 1384 | |
| 1385 printPreview.destinationStore_.selectDestination(barDestination); | |
| 1386 | |
| 1387 // Dispatch events indicating capabilities were fetched and new preview | |
| 1388 // has loaded. | |
| 1389 setCapabilities(getCddTemplate('BarDevice')); | |
| 1390 var previewDoneEvent = new Event( | |
| 1391 print_preview.PreviewArea.EventType.PREVIEW_GENERATION_DONE); | |
| 1392 previewArea.dispatchEvent(previewDoneEvent); | |
| 1393 | |
| 1394 // Has active print button and successfully 'prints', indicating | |
| 1395 // recovery from error state. | |
| 1396 expectFalse(printButton.disabled); | |
| 1397 expectFalse(nativeLayer.isPrintStarted()); | |
| 1398 printButton.click(); | |
| 1399 expectTrue(nativeLayer.isPrintStarted()); | |
| 1400 }); | |
| 1401 }); | |
| 1402 | |
| 1403 // Test the preview generator to make sure the generate draft parameter is | |
| 1404 // set correctly. It should be false if the only change is the page range. | |
| 1405 test('GenerateDraft', function() { | |
| 1406 // Use a real preview generator. | |
| 1407 previewArea.previewGenerator_ = | |
| 1408 new print_preview.PreviewGenerator(printPreview.destinationStore_, | |
| 1409 printPreview.printTicketStore_, nativeLayer, | |
| 1410 printPreview.documentInfo_); | |
| 1411 | |
| 1412 setInitialSettings(); | |
| 1413 return nativeLayer.whenCalled('getInitialSettings').then(function() { | |
| 1414 setLocalDestinations(); | |
| 1415 setCapabilities(getCddTemplate('FooDevice')); | |
| 1416 | |
| 1417 // The first request should generate draft because there was no | |
| 1418 // previous print preview draft. | |
| 1419 expectTrue(nativeLayer.generateDraft()); | |
| 1420 | |
| 1421 // Change the page range - no new draft needed. | |
| 1422 printPreview.printTicketStore_.pageRange.updateValue('2'); | |
| 1423 expectFalse(nativeLayer.generateDraft()); | |
| 1424 | |
| 1425 // Change the margin type - need to regenerate again. | |
| 1426 printPreview.printTicketStore_.marginsType.updateValue( | |
| 1427 print_preview.ticket_items.MarginsTypeValue.NO_MARGINS); | |
| 1428 expectTrue(nativeLayer.generateDraft()); | |
| 1429 }); | |
| 1430 }); | |
| 1037 }); | 1431 }); |
| 1038 }); | 1432 }); |
| OLD | NEW |