@theia/playwright 1.37.0-next.10 → 1.37.0-next.12

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=theia-terminal-view.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-terminal-view.test.d.ts","sourceRoot":"","sources":["../../src/tests/theia-terminal-view.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2023 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 WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const test_1 = require("@playwright/test");
19
+ const theia_app_1 = require("../theia-app");
20
+ const theia_workspace_1 = require("../theia-workspace");
21
+ const theia_fixture_1 = require("./fixtures/theia-fixture");
22
+ const theia_terminal_1 = require("../theia-terminal");
23
+ let app;
24
+ theia_fixture_1.default.describe('Theia Terminal View', () => {
25
+ theia_fixture_1.default.beforeAll(async () => {
26
+ const ws = new theia_workspace_1.TheiaWorkspace(['src/tests/resources/sample-files1']);
27
+ app = await theia_app_1.TheiaApp.load(theia_fixture_1.page, ws);
28
+ });
29
+ (0, theia_fixture_1.default)('should be possible to open a new terminal', async () => {
30
+ const terminal = await app.openTerminal(theia_terminal_1.TheiaTerminal);
31
+ (0, test_1.expect)(await terminal.isTabVisible()).toBe(true);
32
+ (0, test_1.expect)(await terminal.isDisplayed()).toBe(true);
33
+ (0, test_1.expect)(await terminal.isActive()).toBe(true);
34
+ });
35
+ (0, theia_fixture_1.default)('should be possible to open two terminals, switch among them, and close them', async () => {
36
+ const terminal1 = await app.openTerminal(theia_terminal_1.TheiaTerminal);
37
+ const terminal2 = await app.openTerminal(theia_terminal_1.TheiaTerminal);
38
+ const allTerminals = [terminal1, terminal2];
39
+ // all terminal tabs should be visible
40
+ for (const terminal of allTerminals) {
41
+ (0, test_1.expect)(await terminal.isTabVisible()).toBe(true);
42
+ }
43
+ // activate one terminal after the other and check that only this terminal is active
44
+ for (const terminal of allTerminals) {
45
+ await terminal.activate();
46
+ (0, test_1.expect)(await terminal1.isActive()).toBe(terminal1 === terminal);
47
+ (0, test_1.expect)(await terminal2.isActive()).toBe(terminal2 === terminal);
48
+ }
49
+ // close all terminals
50
+ for (const terminal of allTerminals) {
51
+ await terminal.close();
52
+ }
53
+ // check that all terminals are closed
54
+ for (const terminal of allTerminals) {
55
+ (0, test_1.expect)(await terminal.isTabVisible()).toBe(false);
56
+ }
57
+ });
58
+ (0, theia_fixture_1.default)('should allow to write and read terminal contents', async () => {
59
+ const terminal = await app.openTerminal(theia_terminal_1.TheiaTerminal);
60
+ await terminal.write('hello');
61
+ const contents = await terminal.contents();
62
+ (0, test_1.expect)(contents).toContain('hello');
63
+ });
64
+ (0, theia_fixture_1.default)('should allow to submit a command and read output', async () => {
65
+ const terminal = await app.openTerminal(theia_terminal_1.TheiaTerminal);
66
+ if (process.platform === 'win32') {
67
+ await terminal.submit('dir');
68
+ }
69
+ else {
70
+ await terminal.submit('ls');
71
+ }
72
+ const contents = await terminal.contents();
73
+ (0, test_1.expect)(contents).toContain('sample.txt');
74
+ });
75
+ });
76
+ //# sourceMappingURL=theia-terminal-view.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-terminal-view.test.js","sourceRoot":"","sources":["../../src/tests/theia-terminal-view.test.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { TheiaMenuBar } from './theia-main-menu';
4
4
  import { TheiaPreferenceScope, TheiaPreferenceView } from './theia-preference-view';
5
5
  import { TheiaQuickCommandPalette } from './theia-quick-command-palette';
6
6
  import { TheiaStatusBar } from './theia-status-bar';
7
+ import { TheiaTerminal } from './theia-terminal';
7
8
  import { TheiaView } from './theia-view';
8
9
  import { TheiaWorkspace } from './theia-workspace';
9
10
  export interface TheiaAppData {
@@ -38,6 +39,12 @@ export declare class TheiaApp {
38
39
  activateExistingEditor<T extends TheiaEditor>(filePath: string, editorFactory: {
39
40
  new (filePath: string, app: TheiaApp): T;
40
41
  }): Promise<T>;
42
+ openTerminal<T extends TheiaTerminal>(terminalFactory: {
43
+ new (id: string, app: TheiaApp): T;
44
+ }): Promise<T>;
45
+ protected runAndWaitForNewTabs(command: () => Promise<void>): Promise<string[]>;
46
+ protected waitForNewTabs(tabIds: string[]): Promise<string[]>;
47
+ protected visibleTabIds(): Promise<string[]>;
41
48
  /** Specific Theia apps may add additional conditions to wait for. */
42
49
  waitForInitialized(): Promise<void>;
43
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"theia-app.d.ts","sourceRoot":"","sources":["../src/theia-app.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,YAAY;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAC;AAEF,qBAAa,QAAQ;IAiBS,IAAI,EAAE,IAAI;IAAqC,SAAS,CAAC,OAAO;IAf1F,QAAQ,CAAC,SAAS,iBAA4B;IAC9C,QAAQ,CAAC,mBAAmB,2BAAsC;IAClE,QAAQ,CAAC,OAAO,eAA0B;IACnC,SAAS,EAAE,cAAc,CAAC;WAEpB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;WAItE,OAAO,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;QAAE,KAAI,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,cAAc,GAAG,CAAC,CAAA;KAAE,EAAE,gBAAgB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;gBAMhJ,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,cAAc,EAAY,OAAO,eAAsB;cAKhG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAOrB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9D,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7C,eAAe,CAAC,WAAW,EAAE;QAAE,KAAI,GAAG,EAAE,QAAQ,GAAG,mBAAmB,CAAA;KAAE,EAAE,eAAe,uBAAiC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAUzJ,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,WAAW,EAAE;QAAE,KAAI,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjF,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,KAAI,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,EAChH,UAAU,CAAC,EAAE,MAAM,EAAE,eAAe,UAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAkCtD,sBAAsB,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,KAAI,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAU7I,qEAAqE;IAC/D,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5C"}
1
+ {"version":3,"file":"theia-app.d.ts","sourceRoot":"","sources":["../src/theia-app.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,YAAY;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAC;AAEF,qBAAa,QAAQ;IAiBS,IAAI,EAAE,IAAI;IAAqC,SAAS,CAAC,OAAO;IAf1F,QAAQ,CAAC,SAAS,iBAA4B;IAC9C,QAAQ,CAAC,mBAAmB,2BAAsC;IAClE,QAAQ,CAAC,OAAO,eAA0B;IACnC,SAAS,EAAE,cAAc,CAAC;WAEpB,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;WAItE,OAAO,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;QAAE,KAAI,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,cAAc,GAAG,CAAC,CAAA;KAAE,EAAE,gBAAgB,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;gBAMhJ,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,EAAE,cAAc,EAAY,OAAO,eAAsB;cAKhG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;cAOrB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9D,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7C,eAAe,CAAC,WAAW,EAAE;QAAE,KAAI,GAAG,EAAE,QAAQ,GAAG,mBAAmB,CAAA;KAAE,EAAE,eAAe,uBAAiC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAUzJ,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,WAAW,EAAE;QAAE,KAAI,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAUjF,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,KAAI,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,EAChH,UAAU,CAAC,EAAE,MAAM,EAAE,eAAe,UAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAkCtD,sBAAsB,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE;QAAE,KAAI,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAUvI,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,eAAe,EAAE;QAAE,KAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;cAe/F,oBAAoB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAMrE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAQnD,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMlD,qEAAqE;IAC/D,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5C"}
package/lib/theia-app.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  // *****************************************************************************
3
- // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
3
+ // Copyright (C) 2021-2023 logi.cals GmbH, EclipseSource and others.
4
4
  //
5
5
  // This program and the accompanying materials are made available under the
6
6
  // terms of the Eclipse Public License v. 2.0 which is available at
@@ -128,6 +128,35 @@ class TheiaApp {
128
128
  await editor.waitForVisible();
129
129
  return editor;
130
130
  }
131
+ async openTerminal(terminalFactory) {
132
+ const mainMenu = await this.menuBar.openMenu('Terminal');
133
+ const menuItem = await mainMenu.menuItemByName('New Terminal');
134
+ if (!menuItem) {
135
+ throw Error('Menu item \'New Terminal\' could not be found.');
136
+ }
137
+ const newTabIds = await this.runAndWaitForNewTabs(() => menuItem.click());
138
+ if (newTabIds.length > 1) {
139
+ console.warn('More than one new tab detected after opening the terminal');
140
+ }
141
+ return new terminalFactory(newTabIds[0], this);
142
+ }
143
+ async runAndWaitForNewTabs(command) {
144
+ const tabIdsBefore = await this.visibleTabIds();
145
+ await command();
146
+ return (await this.waitForNewTabs(tabIdsBefore)).filter(item => !tabIdsBefore.includes(item));
147
+ }
148
+ async waitForNewTabs(tabIds) {
149
+ let tabIdsCurrent;
150
+ while ((tabIdsCurrent = (await this.visibleTabIds())).length <= tabIds.length) {
151
+ console.debug('Awaiting a new tab to appear');
152
+ }
153
+ return tabIdsCurrent;
154
+ }
155
+ async visibleTabIds() {
156
+ const tabs = await this.page.$$('.p-TabBar-tab');
157
+ const tabIds = (await Promise.all(tabs.map(tab => tab.getAttribute('id')))).filter(id => !!id);
158
+ return tabIds;
159
+ }
131
160
  /** Specific Theia apps may add additional conditions to wait for. */
132
161
  async waitForInitialized() {
133
162
  // empty by default
@@ -1 +1 @@
1
- {"version":3,"file":"theia-app.js","sourceRoot":"","sources":["../src/theia-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theia-app.js","sourceRoot":"","sources":["../src/theia-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ElementHandle } from '@playwright/test';
2
+ import { TheiaApp } from './theia-app';
3
+ import { TheiaMenu } from './theia-menu';
4
+ import { TheiaView } from './theia-view';
5
+ export declare class TheiaTerminal extends TheiaView {
6
+ constructor(tabId: string, app: TheiaApp);
7
+ submit(text: string): Promise<void>;
8
+ write(text: string): Promise<void>;
9
+ contents(): Promise<string>;
10
+ protected openContextMenu(): Promise<TheiaMenu>;
11
+ protected waitForInputArea(): Promise<ElementHandle<SVGElement | HTMLElement>>;
12
+ protected waitForVisibleView(): Promise<ElementHandle<SVGElement | HTMLElement>>;
13
+ }
14
+ //# sourceMappingURL=theia-terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-terminal.d.ts","sourceRoot":"","sources":["../src/theia-terminal.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,aAAc,SAAQ,SAAS;gBAE5B,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ;IAOlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;cAOjB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC;cAKrC,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;cAKpE,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;CAIzF"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2023 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 WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.TheiaTerminal = void 0;
19
+ const theia_context_menu_1 = require("./theia-context-menu");
20
+ const theia_view_1 = require("./theia-view");
21
+ class TheiaTerminal extends theia_view_1.TheiaView {
22
+ constructor(tabId, app) {
23
+ super({
24
+ tabSelector: `#shell-tab-terminal-${getTerminalId(tabId)}`,
25
+ viewSelector: `#terminal-${getTerminalId(tabId)}`
26
+ }, app);
27
+ }
28
+ async submit(text) {
29
+ await this.write(text);
30
+ const input = await this.waitForInputArea();
31
+ await input.press('Enter');
32
+ }
33
+ async write(text) {
34
+ await this.activate();
35
+ const input = await this.waitForInputArea();
36
+ await input.type(text);
37
+ }
38
+ async contents() {
39
+ await this.activate();
40
+ await (await this.openContextMenu()).clickMenuItem('Select All');
41
+ await (await this.openContextMenu()).clickMenuItem('Copy');
42
+ return this.page.evaluate('navigator.clipboard.readText()');
43
+ }
44
+ async openContextMenu() {
45
+ await this.activate();
46
+ return theia_context_menu_1.TheiaContextMenu.open(this.app, () => this.waitForVisibleView());
47
+ }
48
+ async waitForInputArea() {
49
+ const view = await this.waitForVisibleView();
50
+ return view.waitForSelector('.xterm-helper-textarea');
51
+ }
52
+ async waitForVisibleView() {
53
+ return this.page.waitForSelector(this.viewSelector, { state: 'visible' });
54
+ }
55
+ }
56
+ exports.TheiaTerminal = TheiaTerminal;
57
+ function getTerminalId(tabId) {
58
+ return tabId.substring(tabId.lastIndexOf('-') + 1);
59
+ }
60
+ //# sourceMappingURL=theia-terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-terminal.js","sourceRoot":"","sources":["../src/theia-terminal.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;;;AAIhF,6DAAwD;AAExD,6CAAyC;AAEzC,MAAa,aAAc,SAAQ,sBAAS;IAExC,YAAY,KAAa,EAAE,GAAa;QACpC,KAAK,CAAC;YACF,WAAW,EAAE,uBAAuB,aAAa,CAAC,KAAK,CAAC,EAAE;YAC1D,YAAY,EAAE,aAAa,aAAa,CAAC,KAAK,CAAC,EAAE;SACpD,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACpB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;IAChE,CAAC;IAES,KAAK,CAAC,eAAe;QAC3B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,qCAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC5E,CAAC;IAES,KAAK,CAAC,gBAAgB;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;IAC1D,CAAC;IAES,KAAK,CAAC,kBAAkB;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;CAEJ;AA1CD,sCA0CC;AAED,SAAS,aAAa,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theia/playwright",
3
- "version": "1.37.0-next.10+b56f399da",
3
+ "version": "1.37.0-next.12+4c8f76d16",
4
4
  "description": "System tests for Theia",
5
5
  "license": "EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0",
6
6
  "repository": {
@@ -43,5 +43,5 @@
43
43
  "access": "public"
44
44
  },
45
45
  "main": "lib/index",
46
- "gitHead": "b56f399da8f6956b60c686033cd648496185c1cd"
46
+ "gitHead": "4c8f76d165acc646b28c930eb2e43bcc5b44d347"
47
47
  }
@@ -0,0 +1,85 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2023 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { expect } from '@playwright/test';
18
+ import { TheiaApp } from '../theia-app';
19
+ import { TheiaWorkspace } from '../theia-workspace';
20
+ import test, { page } from './fixtures/theia-fixture';
21
+ import { TheiaTerminal } from '../theia-terminal';
22
+
23
+ let app: TheiaApp;
24
+
25
+ test.describe('Theia Terminal View', () => {
26
+
27
+ test.beforeAll(async () => {
28
+ const ws = new TheiaWorkspace(['src/tests/resources/sample-files1']);
29
+ app = await TheiaApp.load(page, ws);
30
+ });
31
+
32
+ test('should be possible to open a new terminal', async () => {
33
+ const terminal = await app.openTerminal(TheiaTerminal);
34
+ expect(await terminal.isTabVisible()).toBe(true);
35
+ expect(await terminal.isDisplayed()).toBe(true);
36
+ expect(await terminal.isActive()).toBe(true);
37
+ });
38
+
39
+ test('should be possible to open two terminals, switch among them, and close them', async () => {
40
+ const terminal1 = await app.openTerminal(TheiaTerminal);
41
+ const terminal2 = await app.openTerminal(TheiaTerminal);
42
+ const allTerminals = [terminal1, terminal2];
43
+
44
+ // all terminal tabs should be visible
45
+ for (const terminal of allTerminals) {
46
+ expect(await terminal.isTabVisible()).toBe(true);
47
+ }
48
+
49
+ // activate one terminal after the other and check that only this terminal is active
50
+ for (const terminal of allTerminals) {
51
+ await terminal.activate();
52
+ expect(await terminal1.isActive()).toBe(terminal1 === terminal);
53
+ expect(await terminal2.isActive()).toBe(terminal2 === terminal);
54
+ }
55
+
56
+ // close all terminals
57
+ for (const terminal of allTerminals) {
58
+ await terminal.close();
59
+ }
60
+
61
+ // check that all terminals are closed
62
+ for (const terminal of allTerminals) {
63
+ expect(await terminal.isTabVisible()).toBe(false);
64
+ }
65
+ });
66
+
67
+ test('should allow to write and read terminal contents', async () => {
68
+ const terminal = await app.openTerminal(TheiaTerminal);
69
+ await terminal.write('hello');
70
+ const contents = await terminal.contents();
71
+ expect(contents).toContain('hello');
72
+ });
73
+
74
+ test('should allow to submit a command and read output', async () => {
75
+ const terminal = await app.openTerminal(TheiaTerminal);
76
+ if (process.platform === 'win32') {
77
+ await terminal.submit('dir');
78
+ } else {
79
+ await terminal.submit('ls');
80
+ }
81
+ const contents = await terminal.contents();
82
+ expect(contents).toContain('sample.txt');
83
+ });
84
+
85
+ });
package/src/theia-app.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  // *****************************************************************************
2
- // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
2
+ // Copyright (C) 2021-2023 logi.cals GmbH, EclipseSource and others.
3
3
  //
4
4
  // This program and the accompanying materials are made available under the
5
5
  // terms of the Eclipse Public License v. 2.0 which is available at
@@ -21,6 +21,7 @@ import { TheiaMenuBar } from './theia-main-menu';
21
21
  import { TheiaPreferenceScope, TheiaPreferenceView } from './theia-preference-view';
22
22
  import { TheiaQuickCommandPalette } from './theia-quick-command-palette';
23
23
  import { TheiaStatusBar } from './theia-status-bar';
24
+ import { TheiaTerminal } from './theia-terminal';
24
25
  import { TheiaView } from './theia-view';
25
26
  import { TheiaWorkspace } from './theia-workspace';
26
27
 
@@ -147,6 +148,41 @@ export class TheiaApp {
147
148
  return editor;
148
149
  }
149
150
 
151
+ async openTerminal<T extends TheiaTerminal>(terminalFactory: { new(id: string, app: TheiaApp): T }): Promise<T> {
152
+ const mainMenu = await this.menuBar.openMenu('Terminal');
153
+ const menuItem = await mainMenu.menuItemByName('New Terminal');
154
+ if (!menuItem) {
155
+ throw Error('Menu item \'New Terminal\' could not be found.');
156
+ }
157
+
158
+ const newTabIds = await this.runAndWaitForNewTabs(() => menuItem.click());
159
+ if (newTabIds.length > 1) {
160
+ console.warn('More than one new tab detected after opening the terminal');
161
+ }
162
+
163
+ return new terminalFactory(newTabIds[0], this);
164
+ }
165
+
166
+ protected async runAndWaitForNewTabs(command: () => Promise<void>): Promise<string[]> {
167
+ const tabIdsBefore = await this.visibleTabIds();
168
+ await command();
169
+ return (await this.waitForNewTabs(tabIdsBefore)).filter(item => !tabIdsBefore.includes(item));
170
+ }
171
+
172
+ protected async waitForNewTabs(tabIds: string[]): Promise<string[]> {
173
+ let tabIdsCurrent: string[];
174
+ while ((tabIdsCurrent = (await this.visibleTabIds())).length <= tabIds.length) {
175
+ console.debug('Awaiting a new tab to appear');
176
+ }
177
+ return tabIdsCurrent;
178
+ }
179
+
180
+ protected async visibleTabIds(): Promise<string[]> {
181
+ const tabs = await this.page.$$('.p-TabBar-tab');
182
+ const tabIds = (await Promise.all(tabs.map(tab => tab.getAttribute('id')))).filter(id => !!id);
183
+ return tabIds as string[];
184
+ }
185
+
150
186
  /** Specific Theia apps may add additional conditions to wait for. */
151
187
  async waitForInitialized(): Promise<void> {
152
188
  // empty by default
@@ -0,0 +1,69 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2023 EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { ElementHandle } from '@playwright/test';
18
+ import { TheiaApp } from './theia-app';
19
+ import { TheiaContextMenu } from './theia-context-menu';
20
+ import { TheiaMenu } from './theia-menu';
21
+ import { TheiaView } from './theia-view';
22
+
23
+ export class TheiaTerminal extends TheiaView {
24
+
25
+ constructor(tabId: string, app: TheiaApp) {
26
+ super({
27
+ tabSelector: `#shell-tab-terminal-${getTerminalId(tabId)}`,
28
+ viewSelector: `#terminal-${getTerminalId(tabId)}`
29
+ }, app);
30
+ }
31
+
32
+ async submit(text: string): Promise<void> {
33
+ await this.write(text);
34
+ const input = await this.waitForInputArea();
35
+ await input.press('Enter');
36
+ }
37
+
38
+ async write(text: string): Promise<void> {
39
+ await this.activate();
40
+ const input = await this.waitForInputArea();
41
+ await input.type(text);
42
+ }
43
+
44
+ async contents(): Promise<string> {
45
+ await this.activate();
46
+ await (await this.openContextMenu()).clickMenuItem('Select All');
47
+ await (await this.openContextMenu()).clickMenuItem('Copy');
48
+ return this.page.evaluate('navigator.clipboard.readText()');
49
+ }
50
+
51
+ protected async openContextMenu(): Promise<TheiaMenu> {
52
+ await this.activate();
53
+ return TheiaContextMenu.open(this.app, () => this.waitForVisibleView());
54
+ }
55
+
56
+ protected async waitForInputArea(): Promise<ElementHandle<SVGElement | HTMLElement>> {
57
+ const view = await this.waitForVisibleView();
58
+ return view.waitForSelector('.xterm-helper-textarea');
59
+ }
60
+
61
+ protected async waitForVisibleView(): Promise<ElementHandle<SVGElement | HTMLElement>> {
62
+ return this.page.waitForSelector(this.viewSelector, { state: 'visible' });
63
+ }
64
+
65
+ }
66
+
67
+ function getTerminalId(tabId: string): string {
68
+ return tabId.substring(tabId.lastIndexOf('-') + 1);
69
+ }