Print Preview: Migrate print button, app, and sidebar tests to TS
Bug: 1245834
Change-Id: Id95a02ec2fcff4777e0963bef5cfc56435513c38
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3321297
Reviewed-by: Demetrios Papadopoulos <dpapad@chromium.org>
Commit-Queue: Rebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/main@{#949827}
diff --git a/chrome/browser/resources/print_preview/ui/sidebar.ts b/chrome/browser/resources/print_preview/ui/sidebar.ts
index ab98ef34..3c2e856 100644
--- a/chrome/browser/resources/print_preview/ui/sidebar.ts
+++ b/chrome/browser/resources/print_preview/ui/sidebar.ts
@@ -248,5 +248,11 @@
// </if>
}
+declare global {
+ interface HTMLElementTagNameMap {
+ 'print-preview-sidebar': PrintPreviewSidebarElement;
+ }
+}
+
customElements.define(
PrintPreviewSidebarElement.is, PrintPreviewSidebarElement);
diff --git a/chrome/test/data/webui/print_preview/BUILD.gn b/chrome/test/data/webui/print_preview/BUILD.gn
index d7090e7..78d9ef68 100644
--- a/chrome/test/data/webui/print_preview/BUILD.gn
+++ b/chrome/test/data/webui/print_preview/BUILD.gn
@@ -23,9 +23,9 @@
"native_layer_stub.ts",
"policy_test.ts",
"preview_generation_test.ts",
- "print_button_test.js",
- "print_preview_app_test.js",
- "print_preview_sidebar_test.js",
+ "print_button_test.ts",
+ "print_preview_app_test.ts",
+ "print_preview_sidebar_test.ts",
"print_preview_test_utils.ts",
"restore_state_test.js",
"user_manager_test.js",
diff --git a/chrome/test/data/webui/print_preview/print_button_test.js b/chrome/test/data/webui/print_preview/print_button_test.ts
similarity index 61%
rename from chrome/test/data/webui/print_preview/print_button_test.js
rename to chrome/test/data/webui/print_preview/print_button_test.ts
index 8a004cb..4e1cd3c 100644
--- a/chrome/test/data/webui/print_preview/print_button_test.js
+++ b/chrome/test/data/webui/print_preview/print_button_test.ts
@@ -2,8 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import {Destination, GooglePromotedDestinationId, NativeLayerImpl, PluginProxyImpl, PrintPreviewAppElement} from 'chrome://print/print_preview.js';
+import {CrButtonElement, NativeInitialSettings, NativeLayerImpl, PluginProxyImpl, PrintPreviewAppElement, PrintTicket} from 'chrome://print/print_preview.js';
+// <if expr="chromeos or lacros">
+import {GooglePromotedDestinationId} from 'chrome://print/print_preview.js';
+// </if>
import {assert} from 'chrome://resources/js/assert.m.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
// <if expr="chromeos or lacros">
import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
@@ -13,33 +17,28 @@
import {getDefaultInitialSettings} from './print_preview_test_utils.js';
import {TestPluginProxy} from './test_plugin_proxy.js';
-
-window.print_button_test = {};
-print_button_test.suiteName = 'PrintButtonTest';
-/** @enum {string} */
-print_button_test.TestNames = {
- LocalPrintHidePreview: 'local print hide preview',
- PDFPrintVisiblePreview: 'pdf print visible preview',
- SaveToDriveVisiblePreviewCros: 'save to drive visible preview cros',
+const print_button_test = {
+ suiteName: 'PrintButtonTest',
+ TestNames: {
+ LocalPrintHidePreview: 'local print hide preview',
+ PDFPrintVisiblePreview: 'pdf print visible preview',
+ SaveToDriveVisiblePreviewCros: 'save to drive visible preview cros',
+ },
};
+Object.assign(window, {print_button_test: print_button_test});
+
suite(print_button_test.suiteName, function() {
- /** @type {?PrintPreviewAppElement} */
- let page = null;
+ let page: PrintPreviewAppElement;
- /** @type {?NativeLayer} */
- let nativeLayer = null;
+ let nativeLayer: NativeLayerStub;
- /** @type {boolean} */
- let printBeforePreviewReady = false;
+ let printBeforePreviewReady: boolean = false;
- /** @type {boolean} */
- let previewHidden = false;
+ let previewHidden: boolean = false;
- /** @type {!NativeInitialSettings} */
- const initialSettings = getDefaultInitialSettings();
+ const initialSettings: NativeInitialSettings = getDefaultInitialSettings();
- /** @override */
setup(function() {
nativeLayer = new NativeLayerStub();
NativeLayerImpl.setInstance(nativeLayer);
@@ -64,11 +63,13 @@
// loading, since previewArea.onPluginLoadComplete_() indicates to the UI
// that the preview is ready.
if (printBeforePreviewReady) {
- const sidebar = page.shadowRoot.querySelector('print-preview-sidebar');
+ const sidebar =
+ page.shadowRoot!.querySelector('print-preview-sidebar')!;
const parentElement =
- sidebar.shadowRoot.querySelector('print-preview-button-strip');
+ sidebar.shadowRoot!.querySelector('print-preview-button-strip')!;
const printButton =
- parentElement.shadowRoot.querySelector('.action-button');
+ parentElement.shadowRoot!.querySelector<CrButtonElement>(
+ '.action-button')!;
assertFalse(printButton.disabled);
printButton.click();
}
@@ -80,14 +81,12 @@
});
});
- function waitForInitialPreview() {
- return nativeLayer.whenCalled('getInitialSettings').then(function() {
- // Wait for the preview request.
- return Promise.all([
- nativeLayer.whenCalled('getPrinterCapabilities'),
- nativeLayer.whenCalled('getPreview')
- ]);
- });
+ function waitForInitialPreview(): Promise<any> {
+ return Promise.all([
+ nativeLayer.whenCalled('getInitialSettings'),
+ nativeLayer.whenCalled('getPrinterCapabilities'),
+ nativeLayer.whenCalled('getPreview'),
+ ]);
}
// Tests that hidePreview() is called before print() if a local printer is
@@ -100,11 +99,12 @@
// Wait for the print request.
return nativeLayer.whenCalled('print');
})
- .then(function(printTicket) {
+ .then(function(printTicket: string) {
assertTrue(previewHidden);
// Verify that the printer name is correct.
- assertEquals('FooDevice', JSON.parse(printTicket).deviceName);
+ assertEquals(
+ 'FooDevice', (JSON.parse(printTicket) as PrintTicket).deviceName);
return nativeLayer.whenCalled('dialogClose');
});
});
@@ -122,15 +122,16 @@
// Select Save as PDF destination
const destinationSettings =
- page.shadowRoot.querySelector('print-preview-sidebar')
- .shadowRoot.querySelector(
- 'print-preview-destination-settings');
+ page.shadowRoot!.querySelector('print-preview-sidebar')!
+ .shadowRoot!.querySelector(
+ 'print-preview-destination-settings')!;
const pdfDestination =
- destinationSettings.destinationStore_.destinations().find(
- d => d.id === 'Save as PDF');
+ destinationSettings.getDestinationStoreForTest()
+ .destinations()
+ .find(d => d.id === 'Save as PDF');
assertTrue(!!pdfDestination);
- destinationSettings.destinationStore_.selectDestination(
- pdfDestination);
+ destinationSettings.getDestinationStoreForTest().selectDestination(
+ pdfDestination!);
// Reload preview and wait for print.
return nativeLayer.whenCalled('print');
@@ -139,11 +140,14 @@
assertFalse(previewHidden);
// Verify that the printer name is correct.
- assertEquals('Save as PDF', JSON.parse(printTicket).deviceName);
+ assertEquals(
+ 'Save as PDF',
+ (JSON.parse(printTicket) as PrintTicket).deviceName);
return nativeLayer.whenCalled('dialogClose');
});
});
+ // <if expr="chromeos or lacros">
// Tests that hidePreview() is not called if Save to Drive is selected on
// Chrome OS and the user clicks print while the preview is loading because
// Save to Drive needs to be treated like Save as PDF.
@@ -160,16 +164,18 @@
// Select Save as PDF destination
const destinationSettings =
- page.shadowRoot.querySelector('print-preview-sidebar')
- .shadowRoot.querySelector(
- 'print-preview-destination-settings');
+ page.shadowRoot!.querySelector('print-preview-sidebar')!
+ .shadowRoot!.querySelector(
+ 'print-preview-destination-settings')!;
const driveDestination =
- destinationSettings.destinationStore_.destinations().find(
- d => d.id ===
- GooglePromotedDestinationId.SAVE_TO_DRIVE_CROS);
+ destinationSettings.getDestinationStoreForTest()
+ .destinations()
+ .find(
+ d => d.id ===
+ GooglePromotedDestinationId.SAVE_TO_DRIVE_CROS);
assertTrue(!!driveDestination);
- destinationSettings.destinationStore_.selectDestination(
- driveDestination);
+ destinationSettings.getDestinationStoreForTest()
+ .selectDestination(driveDestination!);
// Reload preview and wait for print.
return nativeLayer.whenCalled('print');
@@ -180,8 +186,9 @@
// Verify that the printer name is correct.
assertEquals(
GooglePromotedDestinationId.SAVE_TO_DRIVE_CROS,
- JSON.parse(printTicket).deviceName);
+ (JSON.parse(printTicket) as PrintTicket).deviceName);
return nativeLayer.whenCalled('dialogClose');
});
});
+ // </if>
});
diff --git a/chrome/test/data/webui/print_preview/print_preview_app_test.js b/chrome/test/data/webui/print_preview/print_preview_app_test.ts
similarity index 69%
rename from chrome/test/data/webui/print_preview/print_preview_app_test.js
rename to chrome/test/data/webui/print_preview/print_preview_app_test.ts
index 7f93eab..211c9817 100644
--- a/chrome/test/data/webui/print_preview/print_preview_app_test.js
+++ b/chrome/test/data/webui/print_preview/print_preview_app_test.ts
@@ -2,10 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import {CloudPrintInterfaceImpl, Destination, DuplexMode, NativeLayerImpl, PluginProxyImpl, PrintPreviewAppElement} from 'chrome://print/print_preview.js';
+import {CloudPrintInterfaceImpl, DuplexMode, NativeInitialSettings, NativeLayerImpl, PluginProxyImpl, PrintPreviewAppElement} from 'chrome://print/print_preview.js';
import {assert} from 'chrome://resources/js/assert.m.js';
import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+
import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
// <if expr="chromeos or lacros">
@@ -17,33 +19,30 @@
import {TestPluginProxy} from './test_plugin_proxy.js';
-window.print_preview_app_test = {};
-print_preview_app_test.suiteName = 'PrintPreviewAppTest';
-/** @enum {string} */
-print_preview_app_test.TestNames = {
- PrintToGoogleDrive: 'print to google drive',
- PrintPresets: 'print presets',
- DestinationsManaged: 'destinations managed',
- HeaderFooterManaged: 'header footer managed',
- CssBackgroundManaged: 'css background managed',
- SheetsManaged: 'sheets managed'
+const print_preview_app_test = {
+ suiteName: 'PrintPreviewAppTest',
+ TestNames: {
+ PrintToGoogleDrive: 'print to google drive',
+ PrintPresets: 'print presets',
+ DestinationsManaged: 'destinations managed',
+ HeaderFooterManaged: 'header footer managed',
+ CssBackgroundManaged: 'css background managed',
+ SheetsManaged: 'sheets managed'
+ },
};
+Object.assign(window, {print_preview_app_test: print_preview_app_test});
+
suite(print_preview_app_test.suiteName, function() {
- /** @type {?PrintPreviewAppElement} */
- let page = null;
+ let page: PrintPreviewAppElement;
- /** @type {?NativeLayer} */
- let nativeLayer = null;
+ let nativeLayer: NativeLayerStub;
- /** @type {?CloudPrintInterface} */
- let cloudPrintInterface = null;
+ let cloudPrintInterface: CloudPrintInterfaceStub;
- /** @type {?TestPluginProxy} */
- let pluginProxy = null;
+ let pluginProxy: TestPluginProxy;
- /** @type {!NativeInitialSettings} */
- const initialSettings = {
+ const initialSettings: NativeInitialSettings = {
isInKioskAutoPrintMode: false,
isInAppKioskMode: false,
thousandsDelimiter: ',',
@@ -59,25 +58,25 @@
pdfPrinterDisabled: false,
destinationsManaged: false,
cloudPrintURL: 'cloudprint URL',
- userAccounts: ['foo@chromium.org'],
+ previewIsFromArc: false,
+ uiLocale: 'en-us',
};
/**
* Set the native layer initial settings and attach the print preview app to
* the DOM.
- * @return {!Promise} Returns a promise that resolves when the 'getPreview'
+ * @return Returns a promise that resolves when the 'getPreview'
* method is called by the preview area contained inside the app.
*/
- const initialize = () => {
+ function initialize(): Promise<void> {
nativeLayer.setInitialSettings(initialSettings);
nativeLayer.setLocalDestinations(
[{deviceName: initialSettings.printerName, printerName: 'FooName'}]);
page = document.createElement('print-preview-app');
document.body.appendChild(page);
return nativeLayer.whenCalled('getPreview');
- };
+ }
- /** @override */
setup(function() {
// Stub out the native layer, the cloud print interface, and the plugin.
document.body.innerHTML = '';
@@ -96,13 +95,17 @@
test(
assert(print_preview_app_test.TestNames.PrintToGoogleDrive), async () => {
await initialize();
+ const sidebar =
+ page.shadowRoot!.querySelector('print-preview-sidebar')!;
+ const destinationSettings = sidebar.shadowRoot!.querySelector(
+ 'print-preview-destination-settings')!;
// Set up the UI to have a cloud printer.
- page.destination_ =
+ destinationSettings.destination =
getCloudDestination('FooCloud', 'FooName', 'foo@chromium.org');
- page.destination_.capabilities = getCddTemplate(page.destination_.id);
+ destinationSettings.destination.capabilities =
+ getCddTemplate(destinationSettings.destination.id)!.capabilities;
// Trigger print.
- const sidebar = page.shadowRoot.querySelector('print-preview-sidebar');
sidebar.dispatchEvent(new CustomEvent(
'print-requested', {composed: true, bubbles: true}));
@@ -123,8 +126,8 @@
const copies = 2;
const duplex = DuplexMode.LONG_EDGE;
webUIListenerCallback('print-preset-options', true, copies, duplex);
- assertEquals(copies, page.getSettingValue('copies'));
- assertTrue(page.getSettingValue('duplex'));
+ assertEquals(copies, page.getSettingValue('copies') as number);
+ assertTrue(page.getSettingValue('duplex') as boolean);
assertFalse(page.getSetting('duplex').setFromUi);
assertFalse(page.getSetting('copies').setFromUi);
});
@@ -134,7 +137,8 @@
async () => {
initialSettings.destinationsManaged = true;
await initialize();
- const sidebar = page.shadowRoot.querySelector('print-preview-sidebar');
+ const sidebar =
+ page.shadowRoot!.querySelector('print-preview-sidebar')!;
assertTrue(sidebar.controlsManaged);
});
@@ -143,7 +147,8 @@
async () => {
initialSettings.policies = {headerFooter: {allowedMode: true}};
await initialize();
- const sidebar = page.shadowRoot.querySelector('print-preview-sidebar');
+ const sidebar =
+ page.shadowRoot!.querySelector('print-preview-sidebar')!;
assertTrue(sidebar.controlsManaged);
});
@@ -152,14 +157,15 @@
async () => {
initialSettings.policies = {cssBackground: {allowedMode: 1}};
await initialize();
- const sidebar = page.shadowRoot.querySelector('print-preview-sidebar');
+ const sidebar =
+ page.shadowRoot!.querySelector('print-preview-sidebar')!;
assertTrue(sidebar.controlsManaged);
});
test(assert(print_preview_app_test.TestNames.SheetsManaged), async () => {
initialSettings.policies = {sheets: {value: 2}};
await initialize();
- const sidebar = page.shadowRoot.querySelector('print-preview-sidebar');
+ const sidebar = page.shadowRoot!.querySelector('print-preview-sidebar')!;
assertTrue(sidebar.controlsManaged);
});
});
diff --git a/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js b/chrome/test/data/webui/print_preview/print_preview_sidebar_test.ts
similarity index 75%
rename from chrome/test/data/webui/print_preview/print_preview_sidebar_test.js
rename to chrome/test/data/webui/print_preview/print_preview_sidebar_test.ts
index c51aabad..e07e4a1 100644
--- a/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js
+++ b/chrome/test/data/webui/print_preview/print_preview_sidebar_test.ts
@@ -4,6 +4,7 @@
import {CloudPrintInterfaceImpl, NativeLayerImpl, PrintPreviewModelElement, PrintPreviewSidebarElement} from 'chrome://print/print_preview.js';
import {assert} from 'chrome://resources/js/assert.m.js';
+import {assertEquals} from 'chrome://webui-test/chai_assert.js';
import {fakeDataBind} from 'chrome://webui-test/test_util.js';
import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
@@ -15,29 +16,26 @@
import {getCddTemplate} from './print_preview_test_utils.js';
-window.print_preview_sidebar_test = {};
-print_preview_sidebar_test.suiteName = 'PrintPreviewSidebarTest';
-/** @enum {string} */
-print_preview_sidebar_test.TestNames = {
- SettingsSectionsVisibilityChange: 'settings sections visibility change',
- SheetCountWithDuplex: 'sheet count with duplex',
- SheetCountWithCopies: 'sheet count with copies',
+const print_preview_sidebar_test = {
+ suiteName: 'PrintPreviewSidebarTest',
+ TestNames: {
+ SettingsSectionsVisibilityChange: 'settings sections visibility change',
+ SheetCountWithDuplex: 'sheet count with duplex',
+ SheetCountWithCopies: 'sheet count with copies',
+ },
};
+Object.assign(window, {print_preview_sidebar_test: print_preview_sidebar_test});
+
suite(print_preview_sidebar_test.suiteName, function() {
- /** @type {?PrintPreviewSidebarElement} */
- let sidebar = null;
+ let sidebar: PrintPreviewSidebarElement;
- /** @type {?PrintPreviewModelElement} */
- let model = null;
+ let model: PrintPreviewModelElement;
- /** @type {?NativeLayer} */
- let nativeLayer = null;
+ let nativeLayer: NativeLayerStub;
- /** @type {CloudPrintInterfaceStub} */
- let cloudPrintInterface = null;
+ let cloudPrintInterface: CloudPrintInterfaceStub;
- /** @override */
setup(function() {
// Stub out the native layer and cloud print interface
nativeLayer = new NativeLayerStub();
@@ -59,7 +57,7 @@
sidebar.pageCount = 1;
fakeDataBind(model, sidebar, 'settings');
document.body.appendChild(sidebar);
- sidebar.init(false, 'FooDevice', null);
+ sidebar.init(false, 'FooDevice', null, false, true);
return nativeLayer.whenCalled('getPrinterCapabilities');
});
@@ -69,14 +67,17 @@
.SettingsSectionsVisibilityChange),
function() {
const moreSettingsElement =
- sidebar.shadowRoot.querySelector('print-preview-more-settings');
+ sidebar.shadowRoot!.querySelector('print-preview-more-settings')!;
moreSettingsElement.$.label.click();
- const camelToKebab = s => s.replace(/([A-Z])/g, '-$1').toLowerCase();
+ function camelToKebab(s: string): string {
+ return s.replace(/([A-Z])/g, '-$1').toLowerCase();
+ }
+
['copies', 'layout', 'color', 'mediaSize', 'margins', 'dpi', 'scaling',
'duplex', 'otherOptions']
.forEach(setting => {
- const element = sidebar.shadowRoot.querySelector(
- `print-preview-${camelToKebab(setting)}-settings`);
+ const element = sidebar.shadowRoot!.querySelector<HTMLElement>(
+ `print-preview-${camelToKebab(setting)}-settings`)!;
// Show, hide and reset.
[true, false, true].forEach(value => {
sidebar.set(`settings.${setting}.available`, value);
@@ -91,7 +92,8 @@
test(
assert(print_preview_sidebar_test.TestNames.SheetCountWithDuplex),
function() {
- const header = sidebar.shadowRoot.querySelector('print-preview-header');
+ const header =
+ sidebar.shadowRoot!.querySelector('print-preview-header')!;
assertEquals(1, header.sheetCount);
sidebar.setSetting('pages', [1, 2, 3]);
assertEquals(3, header.sheetCount);
@@ -106,7 +108,8 @@
test(
assert(print_preview_sidebar_test.TestNames.SheetCountWithCopies),
function() {
- const header = sidebar.shadowRoot.querySelector('print-preview-header');
+ const header =
+ sidebar.shadowRoot!.querySelector('print-preview-header')!;
assertEquals(1, header.sheetCount);
sidebar.setSetting('copies', 4);
assertEquals(4, header.sheetCount);