@theia/playwright 1.48.1 → 1.48.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -54
- package/lib/index.d.ts +30 -30
- package/lib/index.js +48 -48
- package/lib/tests/theia-app.test.d.ts +1 -1
- package/lib/tests/theia-app.test.js +29 -29
- package/lib/tests/theia-application-shell.test.d.ts +1 -1
- package/lib/tests/theia-application-shell.test.js +57 -57
- package/lib/tests/theia-explorer-view.test.d.ts +1 -1
- package/lib/tests/theia-explorer-view.test.js +183 -183
- package/lib/tests/theia-getting-started.test.d.ts +1 -1
- package/lib/tests/theia-getting-started.test.js +45 -45
- package/lib/tests/theia-main-menu.test.d.ts +1 -1
- package/lib/tests/theia-main-menu.test.js +111 -111
- package/lib/tests/theia-output-view.test.d.ts +1 -1
- package/lib/tests/theia-output-view.test.js +78 -78
- package/lib/tests/theia-preference-view.test.d.ts +1 -1
- package/lib/tests/theia-preference-view.test.js +101 -101
- package/lib/tests/theia-problems-view.test.d.ts +1 -1
- package/lib/tests/theia-problems-view.test.js +54 -54
- package/lib/tests/theia-quick-command.test.d.ts +1 -1
- package/lib/tests/theia-quick-command.test.js +69 -69
- package/lib/tests/theia-sample-app.test.d.ts +1 -1
- package/lib/tests/theia-sample-app.test.js +57 -57
- package/lib/tests/theia-status-bar.test.d.ts +1 -1
- package/lib/tests/theia-status-bar.test.js +44 -44
- package/lib/tests/theia-terminal-view.test.d.ts +1 -1
- package/lib/tests/theia-terminal-view.test.js +78 -78
- package/lib/tests/theia-text-editor.test.d.ts +1 -1
- package/lib/tests/theia-text-editor.test.js +155 -155
- package/lib/tests/theia-toolbar.test.d.ts +1 -1
- package/lib/tests/theia-toolbar.test.js +61 -61
- package/lib/tests/theia-workspace.test.d.ts +1 -1
- package/lib/tests/theia-workspace.test.js +72 -72
- package/lib/theia-about-dialog.d.ts +4 -4
- package/lib/theia-about-dialog.js +26 -26
- package/lib/theia-app-loader.d.ts +19 -19
- package/lib/theia-app-loader.js +129 -129
- package/lib/theia-app.d.ts +50 -50
- package/lib/theia-app.js +153 -153
- package/lib/theia-context-menu.d.ts +8 -8
- package/lib/theia-context-menu.js +37 -37
- package/lib/theia-dialog.d.ts +28 -28
- package/lib/theia-dialog.js +99 -99
- package/lib/theia-editor.d.ts +9 -9
- package/lib/theia-editor.js +68 -68
- package/lib/theia-explorer-view.d.ts +47 -47
- package/lib/theia-explorer-view.js +273 -273
- package/lib/theia-main-menu.d.ts +12 -12
- package/lib/theia-main-menu.js +53 -53
- package/lib/theia-menu-item.d.ts +14 -14
- package/lib/theia-menu-item.js +66 -66
- package/lib/theia-menu.d.ts +16 -16
- package/lib/theia-menu.js +86 -86
- package/lib/theia-monaco-editor.d.ts +15 -15
- package/lib/theia-monaco-editor.js +75 -75
- package/lib/theia-notification-indicator.d.ts +7 -7
- package/lib/theia-notification-indicator.js +44 -44
- package/lib/theia-notification-overlay.d.ts +22 -22
- package/lib/theia-notification-overlay.js +79 -79
- package/lib/theia-output-channel.d.ts +24 -24
- package/lib/theia-output-channel.js +71 -71
- package/lib/theia-output-view.d.ts +9 -9
- package/lib/theia-output-view.js +81 -81
- package/lib/theia-page-object.d.ts +7 -7
- package/lib/theia-page-object.js +27 -27
- package/lib/theia-preference-view.d.ts +84 -84
- package/lib/theia-preference-view.js +209 -209
- package/lib/theia-problem-indicator.d.ts +8 -8
- package/lib/theia-problem-indicator.js +38 -38
- package/lib/theia-problem-view.d.ts +5 -5
- package/lib/theia-problem-view.js +30 -30
- package/lib/theia-quick-command-palette.d.ts +12 -12
- package/lib/theia-quick-command-palette.js +78 -78
- package/lib/theia-rename-dialog.d.ts +5 -5
- package/lib/theia-rename-dialog.js +34 -34
- package/lib/theia-status-bar.d.ts +13 -13
- package/lib/theia-status-bar.js +39 -39
- package/lib/theia-status-indicator.d.ts +10 -10
- package/lib/theia-status-indicator.js +48 -48
- package/lib/theia-terminal.d.ts +13 -13
- package/lib/theia-terminal.js +59 -59
- package/lib/theia-text-editor.d.ts +26 -26
- package/lib/theia-text-editor.js +120 -120
- package/lib/theia-toggle-bottom-indicator.d.ts +4 -4
- package/lib/theia-toggle-bottom-indicator.js +26 -26
- package/lib/theia-toolbar-item.d.ts +10 -10
- package/lib/theia-toolbar-item.js +39 -39
- package/lib/theia-toolbar.d.ts +19 -19
- package/lib/theia-toolbar.js +90 -90
- package/lib/theia-tree-node.d.ts +19 -19
- package/lib/theia-tree-node.js +72 -72
- package/lib/theia-view.d.ts +32 -32
- package/lib/theia-view.js +149 -149
- package/lib/theia-welcome-view.d.ts +5 -5
- package/lib/theia-welcome-view.js +30 -30
- package/lib/theia-workspace.d.ts +18 -18
- package/lib/theia-workspace.js +69 -69
- package/lib/util.d.ts +19 -19
- package/lib/util.js +93 -93
- package/package.json +2 -2
- package/src/index.ts +46 -46
- package/src/tests/resources/sample-files1/sample.txt +4 -4
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-1.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-2.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-1.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-2.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-1.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-2.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-1.txt +1 -1
- package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-2.txt +1 -1
- package/src/tests/resources/sample-files2/another-sample.txt +1 -1
- package/src/tests/theia-app.test.ts +33 -33
- package/src/tests/theia-application-shell.test.ts +67 -67
- package/src/tests/theia-explorer-view.test.ts +211 -211
- package/src/tests/theia-getting-started.test.ts +50 -50
- package/src/tests/theia-main-menu.test.ts +133 -133
- package/src/tests/theia-output-view.test.ts +85 -85
- package/src/tests/theia-preference-view.test.ts +122 -122
- package/src/tests/theia-problems-view.test.ts +64 -64
- package/src/tests/theia-quick-command.test.ts +80 -80
- package/src/tests/theia-sample-app.test.ts +66 -66
- package/src/tests/theia-status-bar.test.ts +52 -52
- package/src/tests/theia-terminal-view.test.ts +90 -90
- package/src/tests/theia-text-editor.test.ts +187 -187
- package/src/tests/theia-toolbar.test.ts +69 -69
- package/src/tests/theia-workspace.test.ts +80 -80
- package/src/theia-about-dialog.ts +26 -26
- package/src/theia-app-loader.ts +167 -167
- package/src/theia-app.ts +188 -188
- package/src/theia-context-menu.ts +42 -42
- package/src/theia-dialog.ts +114 -114
- package/src/theia-editor.ts +73 -73
- package/src/theia-explorer-view.ts +311 -311
- package/src/theia-main-menu.ts +54 -54
- package/src/theia-menu-item.ts +75 -75
- package/src/theia-menu.ts +96 -96
- package/src/theia-monaco-editor.ts +83 -83
- package/src/theia-notification-indicator.ts +44 -44
- package/src/theia-notification-overlay.ts +94 -94
- package/src/theia-output-channel.ts +88 -88
- package/src/theia-output-view.ts +87 -87
- package/src/theia-page-object.ts +29 -29
- package/src/theia-preference-view.ts +240 -240
- package/src/theia-problem-indicator.ts +37 -37
- package/src/theia-problem-view.ts +30 -30
- package/src/theia-quick-command-palette.ts +81 -81
- package/src/theia-rename-dialog.ts +35 -35
- package/src/theia-status-bar.ts +44 -44
- package/src/theia-status-indicator.ts +50 -50
- package/src/theia-terminal.ts +69 -69
- package/src/theia-text-editor.ts +141 -141
- package/src/theia-toggle-bottom-indicator.ts +21 -21
- package/src/theia-toolbar-item.ts +41 -41
- package/src/theia-toolbar.ts +99 -99
- package/src/theia-tree-node.ts +81 -81
- package/src/theia-view.ts +177 -177
- package/src/theia-welcome-view.ts +31 -31
- package/src/theia-workspace.ts +76 -76
- package/src/util.ts +91 -91
package/lib/theia-app.js
CHANGED
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2021-2023 logi.cals GmbH, EclipseSource and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.TheiaApp = exports.DefaultTheiaAppData = void 0;
|
|
19
|
-
const theia_explorer_view_1 = require("./theia-explorer-view");
|
|
20
|
-
const theia_main_menu_1 = require("./theia-main-menu");
|
|
21
|
-
const theia_preference_view_1 = require("./theia-preference-view");
|
|
22
|
-
const theia_quick_command_palette_1 = require("./theia-quick-command-palette");
|
|
23
|
-
const theia_status_bar_1 = require("./theia-status-bar");
|
|
24
|
-
;
|
|
25
|
-
exports.DefaultTheiaAppData = {
|
|
26
|
-
loadingSelector: '.theia-preload',
|
|
27
|
-
shellSelector: '.theia-ApplicationShell'
|
|
28
|
-
};
|
|
29
|
-
class TheiaApp {
|
|
30
|
-
constructor(page, workspace, isElectron) {
|
|
31
|
-
this.page = page;
|
|
32
|
-
this.workspace = workspace;
|
|
33
|
-
this.isElectron = isElectron;
|
|
34
|
-
this.appData = exports.DefaultTheiaAppData;
|
|
35
|
-
this.statusBar = this.createStatusBar();
|
|
36
|
-
this.quickCommandPalette = this.createQuickCommandPalette();
|
|
37
|
-
this.menuBar = this.createMenuBar();
|
|
38
|
-
}
|
|
39
|
-
createStatusBar() {
|
|
40
|
-
return new theia_status_bar_1.TheiaStatusBar(this);
|
|
41
|
-
}
|
|
42
|
-
createQuickCommandPalette() {
|
|
43
|
-
return new theia_quick_command_palette_1.TheiaQuickCommandPalette(this);
|
|
44
|
-
}
|
|
45
|
-
createMenuBar() {
|
|
46
|
-
return new theia_main_menu_1.TheiaMenuBar(this);
|
|
47
|
-
}
|
|
48
|
-
async isShellVisible() {
|
|
49
|
-
return this.page.isVisible(this.appData.shellSelector);
|
|
50
|
-
}
|
|
51
|
-
async waitForShellAndInitialized() {
|
|
52
|
-
await this.page.waitForSelector(this.appData.loadingSelector, { state: 'detached' });
|
|
53
|
-
await this.page.waitForSelector(this.appData.shellSelector);
|
|
54
|
-
await this.waitForInitialized();
|
|
55
|
-
}
|
|
56
|
-
async isMainContentPanelVisible() {
|
|
57
|
-
const contentPanel = await this.page.$('#theia-main-content-panel');
|
|
58
|
-
return !!contentPanel && contentPanel.isVisible();
|
|
59
|
-
}
|
|
60
|
-
async openPreferences(viewFactory, preferenceScope = theia_preference_view_1.TheiaPreferenceScope.Workspace) {
|
|
61
|
-
const view = new viewFactory(this);
|
|
62
|
-
if (await view.isTabVisible()) {
|
|
63
|
-
await view.activate();
|
|
64
|
-
return view;
|
|
65
|
-
}
|
|
66
|
-
await view.open(preferenceScope);
|
|
67
|
-
return view;
|
|
68
|
-
}
|
|
69
|
-
async openView(viewFactory) {
|
|
70
|
-
const view = new viewFactory(this);
|
|
71
|
-
if (await view.isTabVisible()) {
|
|
72
|
-
await view.activate();
|
|
73
|
-
return view;
|
|
74
|
-
}
|
|
75
|
-
await view.open();
|
|
76
|
-
return view;
|
|
77
|
-
}
|
|
78
|
-
async openEditor(filePath, editorFactory, editorName, expectFileNodes = true) {
|
|
79
|
-
const explorer = await this.openView(theia_explorer_view_1.TheiaExplorerView);
|
|
80
|
-
if (!explorer) {
|
|
81
|
-
throw Error('TheiaExplorerView could not be opened.');
|
|
82
|
-
}
|
|
83
|
-
if (expectFileNodes) {
|
|
84
|
-
await explorer.waitForVisibleFileNodes();
|
|
85
|
-
const fileStatElements = await explorer.visibleFileStatNodes(theia_explorer_view_1.DOT_FILES_FILTER);
|
|
86
|
-
if (fileStatElements.length < 1) {
|
|
87
|
-
throw Error('TheiaExplorerView is empty.');
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const fileNode = await explorer.fileStatNode(filePath);
|
|
91
|
-
if (!fileNode || !await (fileNode === null || fileNode === void 0 ? void 0 : fileNode.isFile())) {
|
|
92
|
-
throw Error(`Specified path '${filePath}' could not be found or isn't a file.`);
|
|
93
|
-
}
|
|
94
|
-
const editor = new editorFactory(filePath, this);
|
|
95
|
-
const contextMenu = await fileNode.openContextMenu();
|
|
96
|
-
const editorToUse = editorName ? editorName : editor.name ? editor.name : undefined;
|
|
97
|
-
if (editorToUse) {
|
|
98
|
-
const menuItem = await contextMenu.menuItemByNamePath('Open With', editorToUse);
|
|
99
|
-
if (!menuItem) {
|
|
100
|
-
throw Error(`Editor named '${editorName}' could not be found in "Open With" menu.`);
|
|
101
|
-
}
|
|
102
|
-
await menuItem.click();
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
await contextMenu.clickMenuItem('Open');
|
|
106
|
-
}
|
|
107
|
-
await editor.waitForVisible();
|
|
108
|
-
return editor;
|
|
109
|
-
}
|
|
110
|
-
async activateExistingEditor(filePath, editorFactory) {
|
|
111
|
-
const editor = new editorFactory(filePath, this);
|
|
112
|
-
if (!await editor.isTabVisible()) {
|
|
113
|
-
throw new Error(`Could not find opened editor for file ${filePath}`);
|
|
114
|
-
}
|
|
115
|
-
await editor.activate();
|
|
116
|
-
await editor.waitForVisible();
|
|
117
|
-
return editor;
|
|
118
|
-
}
|
|
119
|
-
async openTerminal(terminalFactory) {
|
|
120
|
-
const mainMenu = await this.menuBar.openMenu('Terminal');
|
|
121
|
-
const menuItem = await mainMenu.menuItemByName('New Terminal');
|
|
122
|
-
if (!menuItem) {
|
|
123
|
-
throw Error('Menu item \'New Terminal\' could not be found.');
|
|
124
|
-
}
|
|
125
|
-
const newTabIds = await this.runAndWaitForNewTabs(() => menuItem.click());
|
|
126
|
-
if (newTabIds.length > 1) {
|
|
127
|
-
console.warn('More than one new tab detected after opening the terminal');
|
|
128
|
-
}
|
|
129
|
-
return new terminalFactory(newTabIds[0], this);
|
|
130
|
-
}
|
|
131
|
-
async runAndWaitForNewTabs(command) {
|
|
132
|
-
const tabIdsBefore = await this.visibleTabIds();
|
|
133
|
-
await command();
|
|
134
|
-
return (await this.waitForNewTabs(tabIdsBefore)).filter(item => !tabIdsBefore.includes(item));
|
|
135
|
-
}
|
|
136
|
-
async waitForNewTabs(tabIds) {
|
|
137
|
-
let tabIdsCurrent;
|
|
138
|
-
while ((tabIdsCurrent = (await this.visibleTabIds())).length <= tabIds.length) {
|
|
139
|
-
console.debug('Awaiting a new tab to appear');
|
|
140
|
-
}
|
|
141
|
-
return tabIdsCurrent;
|
|
142
|
-
}
|
|
143
|
-
async visibleTabIds() {
|
|
144
|
-
const tabs = await this.page.$$('.p-TabBar-tab');
|
|
145
|
-
const tabIds = (await Promise.all(tabs.map(tab => tab.getAttribute('id')))).filter(id => !!id);
|
|
146
|
-
return tabIds;
|
|
147
|
-
}
|
|
148
|
-
/** Specific Theia apps may add additional conditions to wait for. */
|
|
149
|
-
async waitForInitialized() {
|
|
150
|
-
// empty by default
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
exports.TheiaApp = TheiaApp;
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2021-2023 logi.cals GmbH, EclipseSource and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.TheiaApp = exports.DefaultTheiaAppData = void 0;
|
|
19
|
+
const theia_explorer_view_1 = require("./theia-explorer-view");
|
|
20
|
+
const theia_main_menu_1 = require("./theia-main-menu");
|
|
21
|
+
const theia_preference_view_1 = require("./theia-preference-view");
|
|
22
|
+
const theia_quick_command_palette_1 = require("./theia-quick-command-palette");
|
|
23
|
+
const theia_status_bar_1 = require("./theia-status-bar");
|
|
24
|
+
;
|
|
25
|
+
exports.DefaultTheiaAppData = {
|
|
26
|
+
loadingSelector: '.theia-preload',
|
|
27
|
+
shellSelector: '.theia-ApplicationShell'
|
|
28
|
+
};
|
|
29
|
+
class TheiaApp {
|
|
30
|
+
constructor(page, workspace, isElectron) {
|
|
31
|
+
this.page = page;
|
|
32
|
+
this.workspace = workspace;
|
|
33
|
+
this.isElectron = isElectron;
|
|
34
|
+
this.appData = exports.DefaultTheiaAppData;
|
|
35
|
+
this.statusBar = this.createStatusBar();
|
|
36
|
+
this.quickCommandPalette = this.createQuickCommandPalette();
|
|
37
|
+
this.menuBar = this.createMenuBar();
|
|
38
|
+
}
|
|
39
|
+
createStatusBar() {
|
|
40
|
+
return new theia_status_bar_1.TheiaStatusBar(this);
|
|
41
|
+
}
|
|
42
|
+
createQuickCommandPalette() {
|
|
43
|
+
return new theia_quick_command_palette_1.TheiaQuickCommandPalette(this);
|
|
44
|
+
}
|
|
45
|
+
createMenuBar() {
|
|
46
|
+
return new theia_main_menu_1.TheiaMenuBar(this);
|
|
47
|
+
}
|
|
48
|
+
async isShellVisible() {
|
|
49
|
+
return this.page.isVisible(this.appData.shellSelector);
|
|
50
|
+
}
|
|
51
|
+
async waitForShellAndInitialized() {
|
|
52
|
+
await this.page.waitForSelector(this.appData.loadingSelector, { state: 'detached' });
|
|
53
|
+
await this.page.waitForSelector(this.appData.shellSelector);
|
|
54
|
+
await this.waitForInitialized();
|
|
55
|
+
}
|
|
56
|
+
async isMainContentPanelVisible() {
|
|
57
|
+
const contentPanel = await this.page.$('#theia-main-content-panel');
|
|
58
|
+
return !!contentPanel && contentPanel.isVisible();
|
|
59
|
+
}
|
|
60
|
+
async openPreferences(viewFactory, preferenceScope = theia_preference_view_1.TheiaPreferenceScope.Workspace) {
|
|
61
|
+
const view = new viewFactory(this);
|
|
62
|
+
if (await view.isTabVisible()) {
|
|
63
|
+
await view.activate();
|
|
64
|
+
return view;
|
|
65
|
+
}
|
|
66
|
+
await view.open(preferenceScope);
|
|
67
|
+
return view;
|
|
68
|
+
}
|
|
69
|
+
async openView(viewFactory) {
|
|
70
|
+
const view = new viewFactory(this);
|
|
71
|
+
if (await view.isTabVisible()) {
|
|
72
|
+
await view.activate();
|
|
73
|
+
return view;
|
|
74
|
+
}
|
|
75
|
+
await view.open();
|
|
76
|
+
return view;
|
|
77
|
+
}
|
|
78
|
+
async openEditor(filePath, editorFactory, editorName, expectFileNodes = true) {
|
|
79
|
+
const explorer = await this.openView(theia_explorer_view_1.TheiaExplorerView);
|
|
80
|
+
if (!explorer) {
|
|
81
|
+
throw Error('TheiaExplorerView could not be opened.');
|
|
82
|
+
}
|
|
83
|
+
if (expectFileNodes) {
|
|
84
|
+
await explorer.waitForVisibleFileNodes();
|
|
85
|
+
const fileStatElements = await explorer.visibleFileStatNodes(theia_explorer_view_1.DOT_FILES_FILTER);
|
|
86
|
+
if (fileStatElements.length < 1) {
|
|
87
|
+
throw Error('TheiaExplorerView is empty.');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const fileNode = await explorer.fileStatNode(filePath);
|
|
91
|
+
if (!fileNode || !await (fileNode === null || fileNode === void 0 ? void 0 : fileNode.isFile())) {
|
|
92
|
+
throw Error(`Specified path '${filePath}' could not be found or isn't a file.`);
|
|
93
|
+
}
|
|
94
|
+
const editor = new editorFactory(filePath, this);
|
|
95
|
+
const contextMenu = await fileNode.openContextMenu();
|
|
96
|
+
const editorToUse = editorName ? editorName : editor.name ? editor.name : undefined;
|
|
97
|
+
if (editorToUse) {
|
|
98
|
+
const menuItem = await contextMenu.menuItemByNamePath('Open With', editorToUse);
|
|
99
|
+
if (!menuItem) {
|
|
100
|
+
throw Error(`Editor named '${editorName}' could not be found in "Open With" menu.`);
|
|
101
|
+
}
|
|
102
|
+
await menuItem.click();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
await contextMenu.clickMenuItem('Open');
|
|
106
|
+
}
|
|
107
|
+
await editor.waitForVisible();
|
|
108
|
+
return editor;
|
|
109
|
+
}
|
|
110
|
+
async activateExistingEditor(filePath, editorFactory) {
|
|
111
|
+
const editor = new editorFactory(filePath, this);
|
|
112
|
+
if (!await editor.isTabVisible()) {
|
|
113
|
+
throw new Error(`Could not find opened editor for file ${filePath}`);
|
|
114
|
+
}
|
|
115
|
+
await editor.activate();
|
|
116
|
+
await editor.waitForVisible();
|
|
117
|
+
return editor;
|
|
118
|
+
}
|
|
119
|
+
async openTerminal(terminalFactory) {
|
|
120
|
+
const mainMenu = await this.menuBar.openMenu('Terminal');
|
|
121
|
+
const menuItem = await mainMenu.menuItemByName('New Terminal');
|
|
122
|
+
if (!menuItem) {
|
|
123
|
+
throw Error('Menu item \'New Terminal\' could not be found.');
|
|
124
|
+
}
|
|
125
|
+
const newTabIds = await this.runAndWaitForNewTabs(() => menuItem.click());
|
|
126
|
+
if (newTabIds.length > 1) {
|
|
127
|
+
console.warn('More than one new tab detected after opening the terminal');
|
|
128
|
+
}
|
|
129
|
+
return new terminalFactory(newTabIds[0], this);
|
|
130
|
+
}
|
|
131
|
+
async runAndWaitForNewTabs(command) {
|
|
132
|
+
const tabIdsBefore = await this.visibleTabIds();
|
|
133
|
+
await command();
|
|
134
|
+
return (await this.waitForNewTabs(tabIdsBefore)).filter(item => !tabIdsBefore.includes(item));
|
|
135
|
+
}
|
|
136
|
+
async waitForNewTabs(tabIds) {
|
|
137
|
+
let tabIdsCurrent;
|
|
138
|
+
while ((tabIdsCurrent = (await this.visibleTabIds())).length <= tabIds.length) {
|
|
139
|
+
console.debug('Awaiting a new tab to appear');
|
|
140
|
+
}
|
|
141
|
+
return tabIdsCurrent;
|
|
142
|
+
}
|
|
143
|
+
async visibleTabIds() {
|
|
144
|
+
const tabs = await this.page.$$('.p-TabBar-tab');
|
|
145
|
+
const tabIds = (await Promise.all(tabs.map(tab => tab.getAttribute('id')))).filter(id => !!id);
|
|
146
|
+
return tabIds;
|
|
147
|
+
}
|
|
148
|
+
/** Specific Theia apps may add additional conditions to wait for. */
|
|
149
|
+
async waitForInitialized() {
|
|
150
|
+
// empty by default
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.TheiaApp = TheiaApp;
|
|
154
154
|
//# sourceMappingURL=theia-app.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ElementHandle } from '@playwright/test';
|
|
2
|
-
import { TheiaApp } from './theia-app';
|
|
3
|
-
import { TheiaMenu } from './theia-menu';
|
|
4
|
-
export declare class TheiaContextMenu extends TheiaMenu {
|
|
5
|
-
static openAt(app: TheiaApp, x: number, y: number): Promise<TheiaContextMenu>;
|
|
6
|
-
static open(app: TheiaApp, element: () => Promise<ElementHandle<SVGElement | HTMLElement>>): Promise<TheiaContextMenu>;
|
|
7
|
-
private static returnWhenVisible;
|
|
8
|
-
}
|
|
1
|
+
import { ElementHandle } from '@playwright/test';
|
|
2
|
+
import { TheiaApp } from './theia-app';
|
|
3
|
+
import { TheiaMenu } from './theia-menu';
|
|
4
|
+
export declare class TheiaContextMenu extends TheiaMenu {
|
|
5
|
+
static openAt(app: TheiaApp, x: number, y: number): Promise<TheiaContextMenu>;
|
|
6
|
+
static open(app: TheiaApp, element: () => Promise<ElementHandle<SVGElement | HTMLElement>>): Promise<TheiaContextMenu>;
|
|
7
|
+
private static returnWhenVisible;
|
|
8
|
+
}
|
|
9
9
|
//# sourceMappingURL=theia-context-menu.d.ts.map
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.TheiaContextMenu = void 0;
|
|
19
|
-
const theia_menu_1 = require("./theia-menu");
|
|
20
|
-
class TheiaContextMenu extends theia_menu_1.TheiaMenu {
|
|
21
|
-
static async openAt(app, x, y) {
|
|
22
|
-
await app.page.mouse.move(x, y);
|
|
23
|
-
await app.page.mouse.click(x, y, { button: 'right' });
|
|
24
|
-
return TheiaContextMenu.returnWhenVisible(app);
|
|
25
|
-
}
|
|
26
|
-
static async open(app, element) {
|
|
27
|
-
const elementHandle = await element();
|
|
28
|
-
await elementHandle.click({ button: 'right' });
|
|
29
|
-
return TheiaContextMenu.returnWhenVisible(app);
|
|
30
|
-
}
|
|
31
|
-
static async returnWhenVisible(app) {
|
|
32
|
-
const menu = new TheiaContextMenu(app);
|
|
33
|
-
await menu.waitForVisible();
|
|
34
|
-
return menu;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
exports.TheiaContextMenu = TheiaContextMenu;
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.TheiaContextMenu = void 0;
|
|
19
|
+
const theia_menu_1 = require("./theia-menu");
|
|
20
|
+
class TheiaContextMenu extends theia_menu_1.TheiaMenu {
|
|
21
|
+
static async openAt(app, x, y) {
|
|
22
|
+
await app.page.mouse.move(x, y);
|
|
23
|
+
await app.page.mouse.click(x, y, { button: 'right' });
|
|
24
|
+
return TheiaContextMenu.returnWhenVisible(app);
|
|
25
|
+
}
|
|
26
|
+
static async open(app, element) {
|
|
27
|
+
const elementHandle = await element();
|
|
28
|
+
await elementHandle.click({ button: 'right' });
|
|
29
|
+
return TheiaContextMenu.returnWhenVisible(app);
|
|
30
|
+
}
|
|
31
|
+
static async returnWhenVisible(app) {
|
|
32
|
+
const menu = new TheiaContextMenu(app);
|
|
33
|
+
await menu.waitForVisible();
|
|
34
|
+
return menu;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.TheiaContextMenu = TheiaContextMenu;
|
|
38
38
|
//# sourceMappingURL=theia-context-menu.js.map
|
package/lib/theia-dialog.d.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { ElementHandle } from '@playwright/test';
|
|
2
|
-
import { TheiaPageObject } from './theia-page-object';
|
|
3
|
-
export declare class TheiaDialog extends TheiaPageObject {
|
|
4
|
-
protected overlaySelector: string;
|
|
5
|
-
protected blockSelector: string;
|
|
6
|
-
protected titleBarSelector: string;
|
|
7
|
-
protected titleSelector: string;
|
|
8
|
-
protected contentSelector: string;
|
|
9
|
-
protected controlSelector: string;
|
|
10
|
-
protected errorSelector: string;
|
|
11
|
-
waitForVisible(): Promise<void>;
|
|
12
|
-
waitForClosed(): Promise<void>;
|
|
13
|
-
isVisible(): Promise<boolean>;
|
|
14
|
-
title(): Promise<string | null>;
|
|
15
|
-
waitUntilTitleIsDisplayed(title: string): Promise<void>;
|
|
16
|
-
protected contentElement(): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
17
|
-
protected buttonElement(label: string): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
18
|
-
protected buttonElementByClass(buttonClass: string): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
19
|
-
protected validationElement(): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
20
|
-
getValidationText(): Promise<string | null>;
|
|
21
|
-
validationResult(): Promise<boolean>;
|
|
22
|
-
close(): Promise<void>;
|
|
23
|
-
clickButton(buttonLabel: string): Promise<void>;
|
|
24
|
-
isButtonDisabled(buttonLabel: string): Promise<boolean>;
|
|
25
|
-
clickMainButton(): Promise<void>;
|
|
26
|
-
clickSecondaryButton(): Promise<void>;
|
|
27
|
-
waitUntilMainButtonIsEnabled(): Promise<void>;
|
|
28
|
-
}
|
|
1
|
+
import { ElementHandle } from '@playwright/test';
|
|
2
|
+
import { TheiaPageObject } from './theia-page-object';
|
|
3
|
+
export declare class TheiaDialog extends TheiaPageObject {
|
|
4
|
+
protected overlaySelector: string;
|
|
5
|
+
protected blockSelector: string;
|
|
6
|
+
protected titleBarSelector: string;
|
|
7
|
+
protected titleSelector: string;
|
|
8
|
+
protected contentSelector: string;
|
|
9
|
+
protected controlSelector: string;
|
|
10
|
+
protected errorSelector: string;
|
|
11
|
+
waitForVisible(): Promise<void>;
|
|
12
|
+
waitForClosed(): Promise<void>;
|
|
13
|
+
isVisible(): Promise<boolean>;
|
|
14
|
+
title(): Promise<string | null>;
|
|
15
|
+
waitUntilTitleIsDisplayed(title: string): Promise<void>;
|
|
16
|
+
protected contentElement(): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
17
|
+
protected buttonElement(label: string): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
18
|
+
protected buttonElementByClass(buttonClass: string): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
19
|
+
protected validationElement(): Promise<ElementHandle<SVGElement | HTMLElement>>;
|
|
20
|
+
getValidationText(): Promise<string | null>;
|
|
21
|
+
validationResult(): Promise<boolean>;
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
clickButton(buttonLabel: string): Promise<void>;
|
|
24
|
+
isButtonDisabled(buttonLabel: string): Promise<boolean>;
|
|
25
|
+
clickMainButton(): Promise<void>;
|
|
26
|
+
clickSecondaryButton(): Promise<void>;
|
|
27
|
+
waitUntilMainButtonIsEnabled(): Promise<void>;
|
|
28
|
+
}
|
|
29
29
|
//# sourceMappingURL=theia-dialog.d.ts.map
|