Chromium Code Reviews| Index: chrome/test/data/webui/print_preview/print_preview_tests.js |
| diff --git a/chrome/test/data/webui/print_preview/print_preview_tests.js b/chrome/test/data/webui/print_preview/print_preview_tests.js |
| index 861010330540bd9d132599851314bac02337c7b7..cd35ef1c91b7e771f48b2280eedff018222eb2a6 100644 |
| --- a/chrome/test/data/webui/print_preview/print_preview_tests.js |
| +++ b/chrome/test/data/webui/print_preview/print_preview_tests.js |
| @@ -134,6 +134,27 @@ cr.define('print_preview_test', function() { |
| } |
| /** |
| + * @param {string} printerId |
| + * @return {!Object} |
| + */ |
| + function getCddTemplateWithAdvancedSettings(printerId) { |
| + var template = getCddTemplate(printerId); |
| + template.capabilities.printer.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}, |
| + ], |
| + }, |
| + }]; |
| + return template; |
| + } |
| + |
| + /** |
| * Even though animation duration and delay is set to zero, it is necessary to |
| * wait until the animation has finished. |
| * @return {!Promise} A promise firing when the animation is done. |
| @@ -158,6 +179,36 @@ cr.define('print_preview_test', function() { |
| moreSettings.click(); |
| } |
| + // 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(); |
| + } |
| + |
| + /** |
| + * 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. |
| + */ |
| + function setupAdvancedSettingsTest(device) { |
| + // 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.
|
| + setLocalDestinations(); |
| + setCapabilities(device); |
| + expandMoreSettings(); |
| + |
| + // Check that the advanced options settings section is visible. |
| + checkSectionVisible($('advanced-options-settings'), true); |
| + } |
| + |
| /** @return {boolean} */ |
| function isPrintAsImageEnabled() { |
| // Should be enabled by default on non Windows/Mac. |
| @@ -536,7 +587,7 @@ cr.define('print_preview_test', function() { |
| }); |
| }); |
| - // When the source is "PDF", depending on the selected destination printer, |
| + // When the source is 'PDF', depending on the selected destination printer, |
| // we show/hide the fit to page option and hide media size selection. |
| test('SourceIsPDFCapabilities', function() { |
| initialSettings.isDocumentModifiable_ = false; |
| @@ -575,7 +626,7 @@ cr.define('print_preview_test', function() { |
| }); |
| }); |
| - // When the source is "PDF", depending on the selected destination printer, |
| + // When the source is 'PDF', depending on the selected destination printer, |
| // we show/hide the fit to page option and hide media size selection. |
| test('ScalingUnchecksFitToPage', function() { |
| initialSettings.isDocumentModifiable_ = false; |
| @@ -657,7 +708,7 @@ cr.define('print_preview_test', function() { |
| setLocalDestinations(); |
| setCapabilities(getCddTemplate('FooDevice')); |
| - // Indicate that the duplex print preset is set to "long edge" for |
| + // Indicate that the duplex print preset is set to 'long edge' for |
| // source PDF. |
| var printPresetOptions = { |
| duplex: 1 |
| @@ -875,7 +926,7 @@ cr.define('print_preview_test', function() { |
| }); |
| // Test that the color settings, one option, standard monochrome. |
| - test('TestColorSettingsMonochrome', function() { |
| + test('ColorSettingsMonochrome', function() { |
| setInitialSettings(); |
| return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| setLocalDestinations(); |
| @@ -896,7 +947,7 @@ cr.define('print_preview_test', function() { |
| }); |
| // Test that the color settings, one option, custom monochrome. |
| - test('TestColorSettingsCustomMonochrome', function() { |
| + test('ColorSettingsCustomMonochrome', function() { |
| setInitialSettings(); |
| return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| setLocalDestinations(); |
| @@ -918,7 +969,7 @@ cr.define('print_preview_test', function() { |
| }); |
| // Test that the color settings, one option, standard color. |
| - test('TestColorSettingsColor', function() { |
| + test('ColorSettingsColor', function() { |
| setInitialSettings(); |
| return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| setLocalDestinations(); |
| @@ -938,7 +989,7 @@ cr.define('print_preview_test', function() { |
| }); |
| // Test that the color settings, one option, custom color. |
| - test('TestColorSettingsCustomColor', function() { |
| + test('ColorSettingsCustomColor', function() { |
| setInitialSettings(); |
| return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| setLocalDestinations(); |
| @@ -959,7 +1010,7 @@ cr.define('print_preview_test', function() { |
| // Test that the color settings, two options, both standard, defaults to |
| // color. |
| - test('TestColorSettingsBothStandardDefaultColor', function() { |
| + test('ColorSettingsBothStandardDefaultColor', function() { |
| setInitialSettings(); |
| return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| setLocalDestinations(); |
| @@ -984,7 +1035,7 @@ cr.define('print_preview_test', function() { |
| // Test that the color settings, two options, both standard, defaults to |
| // monochrome. |
| - test('TestColorSettingsBothStandardDefaultMonochrome', function() { |
| + test('ColorSettingsBothStandardDefaultMonochrome', function() { |
| setInitialSettings(); |
| return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| setLocalDestinations(); |
| @@ -1009,30 +1060,373 @@ cr.define('print_preview_test', function() { |
| // Test that the color settings, two options, both custom, defaults to |
| // color. |
| - test('TestColorSettingsBothCustomDefaultColor', function() { |
| + test('ColorSettingsBothCustomDefaultColor', function() { |
| setInitialSettings(); |
| - return nativeLayer.whenCalled('getInitialSettings').then( |
| - function() { |
| - setLocalDestinations(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + 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'} |
| + var device = getCddTemplate('FooDevice'); |
| + device.capabilities.printer.color = { |
| + 'option': [ |
| + {'type': 'CUSTOM_MONOCHROME', 'vendor_id': '42'}, |
| + {'is_default': true, 'type': 'CUSTOM_COLOR', 'vendor_id': '43'} |
| + ] |
| + }; |
| + setCapabilities(device); |
| + |
| + checkSectionVisible($('color-settings'), true); |
| + expectEquals( |
| + 'color', |
| + $('color-settings').querySelector( |
| + '.color-settings-select').value); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| + |
| + // Test to verify that duplex settings are set according to the printer |
| + // capabilities. |
| + test('DuplexSettingsTrue', function() { |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + setLocalDestinations(); |
| + setCapabilities(getCddTemplate('FooDevice')); |
| + |
| + var otherOptions = $('other-options-settings'); |
| + checkSectionVisible(otherOptions, true); |
| + duplexContainer = otherOptions.querySelector('#duplex-container'); |
| + expectFalse(duplexContainer.hidden); |
| + expectFalse(duplexContainer.querySelector('.checkbox').checked); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| + |
| + // Test to verify that duplex settings are set according to the printer |
| + // capabilities. |
| + test('DuplexSettingsFalse', function() { |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + setLocalDestinations(); |
| + var device = getCddTemplate('FooDevice'); |
| + delete device.capabilities.printer.duplex; |
| + setCapabilities(device); |
| + |
| + // Check that it is collapsed. |
| + var otherOptions = $('other-options-settings'); |
| + checkSectionVisible(otherOptions, false); |
| + |
| + expandMoreSettings(); |
| + |
| + // Now it should be visible. |
| + checkSectionVisible(otherOptions, true); |
| + expectTrue(otherOptions.querySelector('#duplex-container').hidden); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| + |
| + // Test that changing the selected printer updates the preview. |
| + test('PrinterChangeUpdatesPreview', function() { |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + setLocalDestinations(); |
| + setCapabilities(getCddTemplate('FooDevice')); |
| + |
| + var previewGenerator = mock(print_preview.PreviewGenerator); |
| + 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 = |
| + printPreview.destinationStore_.destinations().find( |
| + function(d) { |
| + return d.id == 'BarDevice'; |
| + }); |
| + |
| + printPreview.destinationStore_.selectDestination(barDestination); |
| + |
| + var device = getCddTemplate('BarDevice'); |
| + device.capabilities.printer.color = { |
| + 'option': [ |
| + {'is_default': true, 'type': 'STANDARD_MONOCHROME'} |
| + ] |
| + }; |
| + setCapabilities(device); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| + |
| + // Test that error message is displayed when plugin doesn't exist. |
| + test('NoPDFPluginErrorMessage', function() { |
| + setInitialSettings(); |
| + return 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); |
| + }); |
| + }); |
| + |
| + // Test custom localized paper names. |
| + test('CustomPaperNames', function() { |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + 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 |
| + } |
| ] |
| - }; |
| - setCapabilities(device); |
| + }, |
| + { name: 'CUSTOM', |
| + width_microns: 15900, |
| + height_microns: 79400, |
| + custom_display_name: customMediaName |
| + } |
| + ] |
| + }; |
| + |
| + setCapabilities(device); |
| - checkSectionVisible($('color-settings'), true); |
| - expectEquals( |
| - 'color', |
| - $('color-settings').querySelector( |
| - '.color-settings-select').value); |
| + 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); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| + |
| + // Test advanced settings with 1 capability (should not display settings |
| + // search box). |
| + test('AdvancedSettings1Option', function() { |
| + var device = getCddTemplateWithAdvancedSettings('FooDevice'); |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + 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); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| - return whenAnimationDone('more-settings'); |
| - }); |
| - }); |
| + // Test advanced settings with 2 capabilities (should have settings search |
| + // box). |
| + test('AdvancedSettings2Options', 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} |
| + ] |
| + } |
| + }); |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + 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); |
| + |
| + return whenAnimationDone('more-settings'); |
| + }); |
| + }); |
| + |
| + // Test that initialization with saved destination only issues one call |
| + // to startPreview. |
| + test('InitIssuesOneRequest', function() { |
| + // Load in a bunch of recent destinations with non null capabilities. |
| + var origin = cr.isChromeOS ? 'chrome_os' : 'local'; |
| + initialSettings.serializedAppStateStr_ = JSON.stringify({ |
| + version: 2, |
| + recentDestinations: [1, 2, 3].map(function(i) { |
| + return { |
| + id: 'ID' + i, origin: origin, account: '', |
| + capabilities: getCddTemplate('ID' + i), name: '', |
| + extensionId: '', extensionName: '' |
| + }; |
| + }), |
| + }); |
| + setCapabilities(getCddTemplate('ID1')); |
| + setCapabilities(getCddTemplate('ID2')); |
| + setCapabilities(getCddTemplate('ID3')); |
| + |
| + // Use a real preview generator. |
| + previewArea.previewGenerator_ = |
| + new print_preview.PreviewGenerator(printPreview.destinationStore_, |
| + printPreview.printTicketStore_, nativeLayer, |
| + 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, previewArea.previewGenerator_.inFlightRequestId_); |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + expectEquals(0, previewArea.previewGenerator_.inFlightRequestId_); |
| + }); |
| + }); |
| + |
| + // 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('InvalidSettingsError', function() { |
| + // Setup |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + setLocalDestinations(); |
| + 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. |
| + 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. |
| + var invalidSettingsEvent = |
| + new Event(print_preview.NativeLayer.EventType.SETTINGS_INVALID); |
| + nativeLayer.getEventTarget().dispatchEvent(invalidSettingsEvent); |
| + |
| + // 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 = |
| + printPreview.destinationStore_.destinations().find( |
| + function(d) { |
| + return d.id == 'BarDevice'; |
| + }); |
| + |
| + printPreview.destinationStore_.selectDestination(barDestination); |
| + |
| + // Dispatch events indicating capabilities were fetched and new preview |
| + // has loaded. |
| + setCapabilities(getCddTemplate('BarDevice')); |
| + var previewDoneEvent = new Event( |
| + print_preview.PreviewArea.EventType.PREVIEW_GENERATION_DONE); |
| + previewArea.dispatchEvent(previewDoneEvent); |
| + |
| + // Has active print button and successfully 'prints', indicating |
| + // recovery from error state. |
| + expectFalse(printButton.disabled); |
| + expectFalse(nativeLayer.isPrintStarted()); |
| + printButton.click(); |
| + expectTrue(nativeLayer.isPrintStarted()); |
| + }); |
| + }); |
| + |
| + // 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('GenerateDraft', function() { |
| + // Use a real preview generator. |
| + previewArea.previewGenerator_ = |
| + new print_preview.PreviewGenerator(printPreview.destinationStore_, |
| + printPreview.printTicketStore_, nativeLayer, |
| + printPreview.documentInfo_); |
| + |
| + setInitialSettings(); |
| + return nativeLayer.whenCalled('getInitialSettings').then(function() { |
| + setLocalDestinations(); |
| + setCapabilities(getCddTemplate('FooDevice')); |
| + |
| + // The first request should generate draft because there was no |
| + // previous print preview draft. |
| + expectTrue(nativeLayer.generateDraft()); |
| + |
| + // Change the page range - no new draft needed. |
| + printPreview.printTicketStore_.pageRange.updateValue('2'); |
| + expectFalse(nativeLayer.generateDraft()); |
| + |
| + // Change the margin type - need to regenerate again. |
| + printPreview.printTicketStore_.marginsType.updateValue( |
| + print_preview.ticket_items.MarginsTypeValue.NO_MARGINS); |
| + expectTrue(nativeLayer.generateDraft()); |
| + }); |
| + }); |
| }); |
| }); |