blob: bf376b50e5d750bbb0a9dec26cc3c80dbe94fb45 [file] [log] [blame]
// Copyright 2018 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.
cr.define('system_dialog_browsertest', function() {
/** @enum {string} */
const TestNames = {
LinkTriggersLocalPrint: 'link triggers local print',
InvalidSettingsDisableLink: 'invalid settings disable link',
};
const suiteName = 'SystemDialogBrowserTest';
suite(suiteName, function() {
/** @type {?PrintPreviewAppElement} */
let page = null;
/** @type {?print_preview.NativeLayer} */
let nativeLayer = null;
/** @type {?PrintPreviewLinkContainerElement} */
let linkContainer = null;
/** @type {?HTMLElement} */
let link = null;
/** @type {string} */
let printTicketKey = '';
/** @override */
setup(function() {
nativeLayer = new print_preview.NativeLayerStub();
print_preview.NativeLayer.setInstance(nativeLayer);
PolymerTest.clearBody();
const initialSettings =
print_preview_test_utils.getDefaultInitialSettings();
nativeLayer.setInitialSettings(initialSettings);
nativeLayer.setLocalDestinationCapabilities(
print_preview_test_utils.getCddTemplate(initialSettings.printerName));
const pluginProxy = new print_preview.PDFPluginStub();
print_preview_new.PluginProxy.setInstance(pluginProxy);
page = document.createElement('print-preview-app');
document.body.appendChild(page);
const previewArea = page.$.previewArea;
pluginProxy.setLoadCallback(previewArea.onPluginLoad_.bind(previewArea));
linkContainer = page.$$('print-preview-link-container');
return Promise
.all([
nativeLayer.whenCalled('getInitialSettings'),
nativeLayer.whenCalled('getPrinterCapabilities'),
])
.then(function() {
return nativeLayer.whenCalled('getPreview');
})
.then(function() {
assertEquals('FooDevice', page.destination_.id);
link = cr.isWindows ? linkContainer.$.systemDialogLink :
linkContainer.$.openPdfInPreviewLink;
printTicketKey =
cr.isWindows ? 'showSystemDialog' : 'OpenPDFInPreview';
});
});
test(assert(TestNames.LinkTriggersLocalPrint), function() {
assertFalse(linkContainer.disabled);
assertFalse(link.hidden);
link.click();
// Should result in a print call and dialog should close.
return nativeLayer.whenCalled('print').then(function(printTicket) {
expectTrue(JSON.parse(printTicket)[printTicketKey]);
return nativeLayer.whenCalled('dialogClose');
});
});
test(assert(TestNames.InvalidSettingsDisableLink), function() {
assertFalse(linkContainer.disabled);
assertFalse(link.hidden);
const moreSettingsElement = page.$$('print-preview-more-settings');
moreSettingsElement.$.label.click();
const scalingSettings = page.$$('print-preview-scaling-settings');
assertFalse(scalingSettings.hidden);
nativeLayer.resetResolver('getPreview');
// Set scaling settings to a bad value
const scalingSettingsInput =
scalingSettings.$$('print-preview-number-settings-section')
.$.userValue.inputElement;
scalingSettingsInput.value = '0';
scalingSettingsInput.dispatchEvent(
new CustomEvent('input', {composed: true, bubbles: true}));
// No new preview
nativeLayer.whenCalled('getPreview').then(function() {
assertTrue(false);
});
return test_util.eventToPromise('input-change', scalingSettings)
.then(function() {
// Expect disabled print button
const header = page.$$('print-preview-header');
const printButton = header.$$('.action-button');
assertTrue(printButton.disabled);
assertTrue(linkContainer.disabled);
assertFalse(link.hidden);
assertTrue(link.querySelector('button').disabled);
});
});
});
return {
suiteName: suiteName,
TestNames: TestNames,
};
});