| 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
|
| index 2743ce8ed98a97ae60ecaf0cfe1a9bf0ed4786c0..37c2394b184622d657753a4895447f625f6da9d2 100644
|
| --- a/chrome/test/data/webui/print_preview.js
|
| +++ b/chrome/test/data/webui/print_preview.js
|
| @@ -15,6 +15,7 @@ function PrintPreviewWebUITest() {
|
| this.nativeLayer_ = null;
|
| this.initialSettings_ = null;
|
| this.localDestinationInfos_ = null;
|
| + this.previewArea_ = null;
|
| }
|
|
|
| /**
|
| @@ -82,15 +83,20 @@ PrintPreviewWebUITest.prototype = {
|
| window.addEventListener('DOMContentLoaded', function() {
|
| function NativeLayerStub() {
|
| cr.EventTarget.call(this);
|
| + this.printStarted_ = false;
|
| }
|
| NativeLayerStub.prototype = {
|
| __proto__: cr.EventTarget.prototype,
|
| + isPrintStarted: function() { return this.printStarted_; },
|
| + previewReadyForTest: function() {},
|
| startGetInitialSettings: function() {},
|
| startGetLocalDestinations: function() {},
|
| startGetPrivetDestinations: function() {},
|
| startGetExtensionDestinations: function() {},
|
| startGetLocalDestinationCapabilities: function(destinationId) {},
|
| startGetPreview: function() {},
|
| + startHideDialog: function () {},
|
| + startPrint: function () { this.printStarted_ = true; }
|
| };
|
| var oldNativeLayerEventType = print_preview.NativeLayer.EventType;
|
| var oldDuplexMode = print_preview.NativeLayer.DuplexMode;
|
| @@ -151,6 +157,34 @@ PrintPreviewWebUITest.prototype = {
|
| },
|
|
|
| /**
|
| + * 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_.dispatchEvent(invalidSettingsEvent);
|
| + },
|
| +
|
| + /**
|
| + * @return {boolean} Whether the UI has/has not "printed" (called startPrint
|
| + * on the native layer).
|
| + */
|
| + hasPrinted: function() {
|
| + return this.nativeLayer_.isPrintStarted();
|
| + },
|
| +
|
| + /**
|
| * Even though animation duration and delay is set to zero, it is necessary to
|
| * wait until the animation has finished.
|
| */
|
| @@ -223,6 +257,7 @@ PrintPreviewWebUITest.prototype = {
|
| { printerName: 'BarName', deviceName: 'BarDevice' }
|
| ];
|
| this.nativeLayer_ = printPreview.nativeLayer_;
|
| + this.previewArea_ = printPreview.previewArea_;
|
|
|
| testing.Test.disableAnimationsAndTransitions();
|
|
|
| @@ -1102,14 +1137,10 @@ TEST_F('PrintPreviewWebUITest', 'TestPrinterChangeUpdatesPreview', function() {
|
| // that will therefore dispatch ticket item change events.
|
| previewGenerator.expects(exactly(9)).requestPreview();
|
|
|
| - var barDestination;
|
| - var destinations = printPreview.destinationStore_.destinations();
|
| - for (var destination, i = 0; destination = destinations[i]; i++) {
|
| - if (destination.id == 'BarDevice') {
|
| - barDestination = destination;
|
| - break;
|
| - }
|
| - }
|
| + var barDestination =
|
| + printPreview.destinationStore_.destinations().find(function(d) {
|
| + return d.id == 'BarDevice';
|
| + });
|
|
|
| printPreview.destinationStore_.selectDestination(barDestination);
|
|
|
| @@ -1356,3 +1387,63 @@ TEST_F('PrintPreviewWebUITest', 'TestInitIssuesOneRequest', function() {
|
| 0);
|
| testDone();
|
| });
|
| +
|
| +// 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.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.
|
| + 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 =
|
| + 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.
|
| + 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();
|
| +});
|
|
|