@theia/playwright 1.45.0 → 1.46.0-next.72

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.
Files changed (164) hide show
  1. package/README.md +54 -54
  2. package/lib/index.d.ts +30 -30
  3. package/lib/index.js +57 -57
  4. package/lib/tests/fixtures/theia-fixture.d.ts +4 -0
  5. package/lib/tests/fixtures/theia-fixture.d.ts.map +1 -0
  6. package/lib/tests/fixtures/theia-fixture.js +24 -0
  7. package/lib/tests/fixtures/theia-fixture.js.map +1 -0
  8. package/lib/tests/theia-app.test.d.ts +1 -1
  9. package/lib/tests/theia-app.test.js +29 -29
  10. package/lib/tests/theia-application-shell.test.d.ts +2 -0
  11. package/lib/tests/theia-application-shell.test.d.ts.map +1 -0
  12. package/lib/tests/theia-application-shell.test.js +58 -0
  13. package/lib/tests/theia-application-shell.test.js.map +1 -0
  14. package/lib/tests/theia-explorer-view.test.d.ts +1 -1
  15. package/lib/tests/theia-explorer-view.test.js +183 -183
  16. package/lib/tests/theia-main-menu.test.d.ts +1 -1
  17. package/lib/tests/theia-main-menu.test.js +92 -92
  18. package/lib/tests/theia-output-view.test.d.ts +1 -1
  19. package/lib/tests/theia-output-view.test.js +78 -78
  20. package/lib/tests/theia-preference-view.test.d.ts +1 -1
  21. package/lib/tests/theia-preference-view.test.js +101 -101
  22. package/lib/tests/theia-problems-view.test.d.ts +1 -1
  23. package/lib/tests/theia-problems-view.test.js +54 -54
  24. package/lib/tests/theia-quick-command.test.d.ts +1 -1
  25. package/lib/tests/theia-quick-command.test.js +69 -69
  26. package/lib/tests/theia-sample-app.test.d.ts +1 -1
  27. package/lib/tests/theia-sample-app.test.js +57 -57
  28. package/lib/tests/theia-status-bar.test.d.ts +1 -1
  29. package/lib/tests/theia-status-bar.test.js +44 -44
  30. package/lib/tests/theia-terminal-view.test.d.ts +1 -1
  31. package/lib/tests/theia-terminal-view.test.js +78 -78
  32. package/lib/tests/theia-text-editor.test.d.ts +1 -1
  33. package/lib/tests/theia-text-editor.test.js +155 -155
  34. package/lib/tests/theia-toolbar.test.d.ts +1 -1
  35. package/lib/tests/theia-toolbar.test.js +61 -61
  36. package/lib/tests/theia-workspace.test.d.ts +1 -1
  37. package/lib/tests/theia-workspace.test.js +72 -72
  38. package/lib/theia-about-dialog.d.ts +4 -4
  39. package/lib/theia-about-dialog.js +26 -26
  40. package/lib/theia-app-loader.d.ts +19 -19
  41. package/lib/theia-app-loader.js +129 -129
  42. package/lib/theia-app.d.ts +50 -50
  43. package/lib/theia-app.js +153 -153
  44. package/lib/theia-context-menu.d.ts +8 -8
  45. package/lib/theia-context-menu.js +37 -37
  46. package/lib/theia-dialog.d.ts +28 -28
  47. package/lib/theia-dialog.js +99 -99
  48. package/lib/theia-editor.d.ts +9 -9
  49. package/lib/theia-editor.js +68 -68
  50. package/lib/theia-explorer-view.d.ts +47 -47
  51. package/lib/theia-explorer-view.js +273 -273
  52. package/lib/theia-main-menu.d.ts +12 -12
  53. package/lib/theia-main-menu.js +53 -53
  54. package/lib/theia-menu-item.d.ts +14 -14
  55. package/lib/theia-menu-item.js +66 -66
  56. package/lib/theia-menu.d.ts +16 -16
  57. package/lib/theia-menu.js +86 -86
  58. package/lib/theia-monaco-editor.d.ts +15 -15
  59. package/lib/theia-monaco-editor.js +75 -75
  60. package/lib/theia-notification-indicator.d.ts +7 -7
  61. package/lib/theia-notification-indicator.js +44 -44
  62. package/lib/theia-notification-overlay.d.ts +22 -22
  63. package/lib/theia-notification-overlay.js +79 -79
  64. package/lib/theia-output-channel.d.ts +24 -24
  65. package/lib/theia-output-channel.js +71 -71
  66. package/lib/theia-output-view.d.ts +9 -9
  67. package/lib/theia-output-view.js +81 -81
  68. package/lib/theia-page-object.d.ts +7 -7
  69. package/lib/theia-page-object.js +27 -27
  70. package/lib/theia-preference-view.d.ts +84 -84
  71. package/lib/theia-preference-view.js +209 -209
  72. package/lib/theia-problem-indicator.d.ts +8 -8
  73. package/lib/theia-problem-indicator.js +38 -38
  74. package/lib/theia-problem-view.d.ts +5 -5
  75. package/lib/theia-problem-view.js +30 -30
  76. package/lib/theia-quick-command-palette.d.ts +12 -12
  77. package/lib/theia-quick-command-palette.js +80 -80
  78. package/lib/theia-rename-dialog.d.ts +5 -5
  79. package/lib/theia-rename-dialog.js +35 -35
  80. package/lib/theia-status-bar.d.ts +13 -13
  81. package/lib/theia-status-bar.js +39 -39
  82. package/lib/theia-status-indicator.d.ts +10 -10
  83. package/lib/theia-status-indicator.js +48 -48
  84. package/lib/theia-terminal.d.ts +13 -13
  85. package/lib/theia-terminal.js +59 -59
  86. package/lib/theia-text-editor.d.ts +26 -26
  87. package/lib/theia-text-editor.js +120 -120
  88. package/lib/theia-toggle-bottom-indicator.d.ts +4 -4
  89. package/lib/theia-toggle-bottom-indicator.js +26 -26
  90. package/lib/theia-toolbar-item.d.ts +10 -10
  91. package/lib/theia-toolbar-item.js +39 -39
  92. package/lib/theia-toolbar.d.ts +19 -19
  93. package/lib/theia-toolbar.js +90 -90
  94. package/lib/theia-tree-node.d.ts +19 -19
  95. package/lib/theia-tree-node.js +72 -72
  96. package/lib/theia-view.d.ts +32 -32
  97. package/lib/theia-view.js +149 -149
  98. package/lib/theia-welcome-view.d.ts +6 -0
  99. package/lib/theia-welcome-view.d.ts.map +1 -0
  100. package/lib/theia-welcome-view.js +31 -0
  101. package/lib/theia-welcome-view.js.map +1 -0
  102. package/lib/theia-workspace.d.ts +18 -18
  103. package/lib/theia-workspace.js +69 -69
  104. package/lib/util.d.ts +19 -19
  105. package/lib/util.js +93 -93
  106. package/package.json +2 -2
  107. package/src/index.ts +46 -46
  108. package/src/tests/resources/sample-files1/sample.txt +4 -4
  109. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-1.txt +1 -1
  110. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-2.txt +1 -1
  111. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-1.txt +1 -1
  112. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-2.txt +1 -1
  113. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-1.txt +1 -1
  114. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-2.txt +1 -1
  115. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-1.txt +1 -1
  116. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-2.txt +1 -1
  117. package/src/tests/resources/sample-files2/another-sample.txt +1 -1
  118. package/src/tests/theia-app.test.ts +33 -33
  119. package/src/tests/theia-application-shell.test.ts +67 -0
  120. package/src/tests/theia-explorer-view.test.ts +211 -211
  121. package/src/tests/theia-main-menu.test.ts +112 -112
  122. package/src/tests/theia-output-view.test.ts +85 -85
  123. package/src/tests/theia-preference-view.test.ts +122 -122
  124. package/src/tests/theia-problems-view.test.ts +64 -64
  125. package/src/tests/theia-quick-command.test.ts +80 -80
  126. package/src/tests/theia-sample-app.test.ts +66 -66
  127. package/src/tests/theia-status-bar.test.ts +52 -52
  128. package/src/tests/theia-terminal-view.test.ts +90 -90
  129. package/src/tests/theia-text-editor.test.ts +187 -187
  130. package/src/tests/theia-toolbar.test.ts +69 -69
  131. package/src/tests/theia-workspace.test.ts +80 -80
  132. package/src/theia-about-dialog.ts +26 -26
  133. package/src/theia-app-loader.ts +167 -167
  134. package/src/theia-app.ts +188 -188
  135. package/src/theia-context-menu.ts +42 -42
  136. package/src/theia-dialog.ts +114 -114
  137. package/src/theia-editor.ts +73 -73
  138. package/src/theia-explorer-view.ts +311 -311
  139. package/src/theia-main-menu.ts +54 -54
  140. package/src/theia-menu-item.ts +75 -75
  141. package/src/theia-menu.ts +96 -96
  142. package/src/theia-monaco-editor.ts +83 -83
  143. package/src/theia-notification-indicator.ts +44 -44
  144. package/src/theia-notification-overlay.ts +94 -94
  145. package/src/theia-output-channel.ts +88 -88
  146. package/src/theia-output-view.ts +87 -87
  147. package/src/theia-page-object.ts +29 -29
  148. package/src/theia-preference-view.ts +240 -240
  149. package/src/theia-problem-indicator.ts +37 -37
  150. package/src/theia-problem-view.ts +30 -30
  151. package/src/theia-quick-command-palette.ts +83 -83
  152. package/src/theia-rename-dialog.ts +36 -36
  153. package/src/theia-status-bar.ts +44 -44
  154. package/src/theia-status-indicator.ts +50 -50
  155. package/src/theia-terminal.ts +69 -69
  156. package/src/theia-text-editor.ts +141 -141
  157. package/src/theia-toggle-bottom-indicator.ts +21 -21
  158. package/src/theia-toolbar-item.ts +41 -41
  159. package/src/theia-toolbar.ts +99 -99
  160. package/src/theia-tree-node.ts +81 -81
  161. package/src/theia-view.ts +177 -177
  162. package/src/theia-welcome-view.ts +31 -0
  163. package/src/theia-workspace.ts +76 -76
  164. package/src/util.ts +91 -91
@@ -1,44 +1,44 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2021 logi.cals GmbH, 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-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { TheiaStatusIndicator } from './theia-status-indicator';
18
-
19
- const NOTIFICATION_DOT_ICON = 'codicon-bell-dot';
20
-
21
- export class TheiaNotificationIndicator extends TheiaStatusIndicator {
22
- id = 'theia-notification-center';
23
-
24
- async hasNotifications(): Promise<boolean> {
25
- const container = await this.getElementHandle();
26
- const bellWithDot = await container.$(`.${NOTIFICATION_DOT_ICON}`);
27
- return Boolean(bellWithDot?.isVisible());
28
- }
29
-
30
- override async waitForVisible(expectNotifications = false): Promise<void> {
31
- await super.waitForVisible();
32
- if (expectNotifications && !(await this.hasNotifications())) {
33
- throw new Error('No notifications when notifications expected.');
34
- }
35
- }
36
-
37
- async toggleOverlay(): Promise<void> {
38
- const element = await this.getElementHandle();
39
- if (element) {
40
- await element.click();
41
- }
42
- }
43
-
44
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2021 logi.cals GmbH, 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-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { TheiaStatusIndicator } from './theia-status-indicator';
18
+
19
+ const NOTIFICATION_DOT_ICON = 'codicon-bell-dot';
20
+
21
+ export class TheiaNotificationIndicator extends TheiaStatusIndicator {
22
+ id = 'theia-notification-center';
23
+
24
+ async hasNotifications(): Promise<boolean> {
25
+ const container = await this.getElementHandle();
26
+ const bellWithDot = await container.$(`.${NOTIFICATION_DOT_ICON}`);
27
+ return Boolean(bellWithDot?.isVisible());
28
+ }
29
+
30
+ override async waitForVisible(expectNotifications = false): Promise<void> {
31
+ await super.waitForVisible();
32
+ if (expectNotifications && !(await this.hasNotifications())) {
33
+ throw new Error('No notifications when notifications expected.');
34
+ }
35
+ }
36
+
37
+ async toggleOverlay(): Promise<void> {
38
+ const element = await this.getElementHandle();
39
+ if (element) {
40
+ await element.click();
41
+ }
42
+ }
43
+
44
+ }
@@ -1,94 +1,94 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2021 logi.cals GmbH, 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-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { TheiaApp } from './theia-app';
18
- import { TheiaNotificationIndicator } from './theia-notification-indicator';
19
- import { TheiaPageObject } from './theia-page-object';
20
-
21
- export class TheiaNotificationOverlay extends TheiaPageObject {
22
-
23
- protected readonly HEADER_NOTIFICATIONS = 'NOTIFICATIONS';
24
- protected readonly HEADER_NO_NOTIFICATIONS = 'NO NEW NOTIFICATIONS';
25
-
26
- constructor(app: TheiaApp, protected notificationIndicator: TheiaNotificationIndicator) {
27
- super(app);
28
- }
29
-
30
- protected get selector(): string {
31
- return '.theia-notifications-overlay';
32
- }
33
-
34
- protected get containerSelector(): string {
35
- return `${this.selector} .theia-notifications-container.theia-notification-center`;
36
- }
37
-
38
- protected get titleSelector(): string {
39
- return `${this.containerSelector} .theia-notification-center-header-title`;
40
- }
41
-
42
- async isVisible(): Promise<boolean> {
43
- const element = await this.page.$(`${this.containerSelector}.open`);
44
- return element ? element.isVisible() : false;
45
- }
46
-
47
- async waitForVisible(): Promise<void> {
48
- await this.page.waitForSelector(`${this.containerSelector}.open`);
49
- }
50
-
51
- async activate(): Promise<void> {
52
- if (!await this.isVisible()) {
53
- await this.notificationIndicator.toggleOverlay();
54
- }
55
- await this.waitForVisible();
56
- }
57
-
58
- async toggle(): Promise<void> {
59
- await this.app.quickCommandPalette.type('Toggle Notifications');
60
- await this.app.quickCommandPalette.trigger('Notifications: Toggle Notifications');
61
- }
62
-
63
- protected entrySelector(entryText: string): string {
64
- return `${this.containerSelector} .theia-notification-message span:has-text("${entryText}")`;
65
- }
66
-
67
- async waitForEntry(entryText: string): Promise<void> {
68
- await this.activate();
69
- await this.page.waitForSelector(this.entrySelector(entryText));
70
- }
71
-
72
- async waitForEntryDetached(entryText: string): Promise<void> {
73
- await this.activate();
74
- await this.page.waitForSelector(this.entrySelector(entryText), { state: 'detached' });
75
- }
76
-
77
- async isEntryVisible(entryText: string): Promise<boolean> {
78
- await this.activate();
79
- const element = await this.page.$(this.entrySelector(entryText));
80
- return !!element && element.isVisible();
81
- }
82
-
83
- protected get clearAllButtonSelector(): string {
84
- return this.selector + ' .theia-notification-center-header ul > li.codicon.codicon-clear-all';
85
- }
86
-
87
- async clearAllNotifications(): Promise<void> {
88
- await this.activate();
89
- const element = await this.page.waitForSelector(this.clearAllButtonSelector);
90
- await element.click();
91
- await this.notificationIndicator.waitForVisible(false /* expectNotifications */);
92
- }
93
-
94
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2021 logi.cals GmbH, 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-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { TheiaApp } from './theia-app';
18
+ import { TheiaNotificationIndicator } from './theia-notification-indicator';
19
+ import { TheiaPageObject } from './theia-page-object';
20
+
21
+ export class TheiaNotificationOverlay extends TheiaPageObject {
22
+
23
+ protected readonly HEADER_NOTIFICATIONS = 'NOTIFICATIONS';
24
+ protected readonly HEADER_NO_NOTIFICATIONS = 'NO NEW NOTIFICATIONS';
25
+
26
+ constructor(app: TheiaApp, protected notificationIndicator: TheiaNotificationIndicator) {
27
+ super(app);
28
+ }
29
+
30
+ protected get selector(): string {
31
+ return '.theia-notifications-overlay';
32
+ }
33
+
34
+ protected get containerSelector(): string {
35
+ return `${this.selector} .theia-notifications-container.theia-notification-center`;
36
+ }
37
+
38
+ protected get titleSelector(): string {
39
+ return `${this.containerSelector} .theia-notification-center-header-title`;
40
+ }
41
+
42
+ async isVisible(): Promise<boolean> {
43
+ const element = await this.page.$(`${this.containerSelector}.open`);
44
+ return element ? element.isVisible() : false;
45
+ }
46
+
47
+ async waitForVisible(): Promise<void> {
48
+ await this.page.waitForSelector(`${this.containerSelector}.open`);
49
+ }
50
+
51
+ async activate(): Promise<void> {
52
+ if (!await this.isVisible()) {
53
+ await this.notificationIndicator.toggleOverlay();
54
+ }
55
+ await this.waitForVisible();
56
+ }
57
+
58
+ async toggle(): Promise<void> {
59
+ await this.app.quickCommandPalette.type('Toggle Notifications');
60
+ await this.app.quickCommandPalette.trigger('Notifications: Toggle Notifications');
61
+ }
62
+
63
+ protected entrySelector(entryText: string): string {
64
+ return `${this.containerSelector} .theia-notification-message span:has-text("${entryText}")`;
65
+ }
66
+
67
+ async waitForEntry(entryText: string): Promise<void> {
68
+ await this.activate();
69
+ await this.page.waitForSelector(this.entrySelector(entryText));
70
+ }
71
+
72
+ async waitForEntryDetached(entryText: string): Promise<void> {
73
+ await this.activate();
74
+ await this.page.waitForSelector(this.entrySelector(entryText), { state: 'detached' });
75
+ }
76
+
77
+ async isEntryVisible(entryText: string): Promise<boolean> {
78
+ await this.activate();
79
+ const element = await this.page.$(this.entrySelector(entryText));
80
+ return !!element && element.isVisible();
81
+ }
82
+
83
+ protected get clearAllButtonSelector(): string {
84
+ return this.selector + ' .theia-notification-center-header ul > li.codicon.codicon-clear-all';
85
+ }
86
+
87
+ async clearAllNotifications(): Promise<void> {
88
+ await this.activate();
89
+ const element = await this.page.waitForSelector(this.clearAllButtonSelector);
90
+ await element.click();
91
+ await this.notificationIndicator.waitForVisible(false /* expectNotifications */);
92
+ }
93
+
94
+ }
@@ -1,88 +1,88 @@
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-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { ElementHandle } from '@playwright/test';
18
- import { TheiaOutputView } from './theia-output-view';
19
- import { TheiaPageObject } from './theia-page-object';
20
- import { isElementVisible } from './util';
21
- import { TheiaMonacoEditor } from './theia-monaco-editor';
22
-
23
- export interface TheiaOutputViewChannelData {
24
- viewSelector: string;
25
- dataUri: string;
26
- channelName: string;
27
- }
28
-
29
- export class TheiaOutputViewChannel extends TheiaPageObject {
30
-
31
- protected monacoEditor: TheiaMonacoEditor;
32
-
33
- constructor(protected readonly data: TheiaOutputViewChannelData, protected readonly outputView: TheiaOutputView) {
34
- super(outputView.app);
35
- this.monacoEditor = new TheiaMonacoEditor(this.viewSelector, outputView.app);
36
- }
37
-
38
- protected get viewSelector(): string {
39
- return this.data.viewSelector;
40
- }
41
-
42
- protected get dataUri(): string | undefined {
43
- return this.data.dataUri;
44
- }
45
-
46
- protected get channelName(): string | undefined {
47
- return this.data.channelName;
48
- }
49
-
50
- async waitForVisible(): Promise<void> {
51
- await this.page.waitForSelector(this.viewSelector, { state: 'visible' });
52
- }
53
-
54
- async isDisplayed(): Promise<boolean> {
55
- return isElementVisible(this.viewElement());
56
- }
57
-
58
- protected viewElement(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
59
- return this.page.$(this.viewSelector);
60
- }
61
-
62
- async numberOfLines(): Promise<number | undefined> {
63
- await this.waitForVisible();
64
- return this.monacoEditor.numberOfLines();
65
- }
66
-
67
- async maxSeverityOfLineByLineNumber(lineNumber: number): Promise<'error' | 'warning' | 'info'> {
68
- await this.waitForVisible();
69
- const lineElement = await this.monacoEditor.lineByLineNumber(lineNumber);
70
- const contents = await lineElement?.$$('span > span.mtk1');
71
- if (!contents || contents.length < 1) {
72
- throw new Error(`Could not find contents of line number ${lineNumber}!`);
73
- }
74
- const severityClassNames = await Promise.all(contents.map(
75
- async content => (await content.getAttribute('class'))?.split(' ')[1]));
76
-
77
- if (severityClassNames.includes('theia-output-error')) {
78
- return 'error';
79
- } else if (severityClassNames.includes('theia-output-warning')) {
80
- return 'warning';
81
- }
82
- return 'info';
83
- }
84
-
85
- async textContentOfLineByLineNumber(lineNumber: number): Promise<string | undefined> {
86
- return this.monacoEditor.textContentOfLineByLineNumber(lineNumber);
87
- }
88
- }
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-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { ElementHandle } from '@playwright/test';
18
+ import { TheiaOutputView } from './theia-output-view';
19
+ import { TheiaPageObject } from './theia-page-object';
20
+ import { isElementVisible } from './util';
21
+ import { TheiaMonacoEditor } from './theia-monaco-editor';
22
+
23
+ export interface TheiaOutputViewChannelData {
24
+ viewSelector: string;
25
+ dataUri: string;
26
+ channelName: string;
27
+ }
28
+
29
+ export class TheiaOutputViewChannel extends TheiaPageObject {
30
+
31
+ protected monacoEditor: TheiaMonacoEditor;
32
+
33
+ constructor(protected readonly data: TheiaOutputViewChannelData, protected readonly outputView: TheiaOutputView) {
34
+ super(outputView.app);
35
+ this.monacoEditor = new TheiaMonacoEditor(this.viewSelector, outputView.app);
36
+ }
37
+
38
+ protected get viewSelector(): string {
39
+ return this.data.viewSelector;
40
+ }
41
+
42
+ protected get dataUri(): string | undefined {
43
+ return this.data.dataUri;
44
+ }
45
+
46
+ protected get channelName(): string | undefined {
47
+ return this.data.channelName;
48
+ }
49
+
50
+ async waitForVisible(): Promise<void> {
51
+ await this.page.waitForSelector(this.viewSelector, { state: 'visible' });
52
+ }
53
+
54
+ async isDisplayed(): Promise<boolean> {
55
+ return isElementVisible(this.viewElement());
56
+ }
57
+
58
+ protected viewElement(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
59
+ return this.page.$(this.viewSelector);
60
+ }
61
+
62
+ async numberOfLines(): Promise<number | undefined> {
63
+ await this.waitForVisible();
64
+ return this.monacoEditor.numberOfLines();
65
+ }
66
+
67
+ async maxSeverityOfLineByLineNumber(lineNumber: number): Promise<'error' | 'warning' | 'info'> {
68
+ await this.waitForVisible();
69
+ const lineElement = await this.monacoEditor.lineByLineNumber(lineNumber);
70
+ const contents = await lineElement?.$$('span > span.mtk1');
71
+ if (!contents || contents.length < 1) {
72
+ throw new Error(`Could not find contents of line number ${lineNumber}!`);
73
+ }
74
+ const severityClassNames = await Promise.all(contents.map(
75
+ async content => (await content.getAttribute('class'))?.split(' ')[1]));
76
+
77
+ if (severityClassNames.includes('theia-output-error')) {
78
+ return 'error';
79
+ } else if (severityClassNames.includes('theia-output-warning')) {
80
+ return 'warning';
81
+ }
82
+ return 'info';
83
+ }
84
+
85
+ async textContentOfLineByLineNumber(lineNumber: number): Promise<string | undefined> {
86
+ return this.monacoEditor.textContentOfLineByLineNumber(lineNumber);
87
+ }
88
+ }
@@ -1,87 +1,87 @@
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-only WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { TheiaApp } from './theia-app';
18
- import { TheiaOutputViewChannel } from './theia-output-channel';
19
- import { TheiaView } from './theia-view';
20
- import { normalizeId } from './util';
21
-
22
- const TheiaOutputViewData = {
23
- tabSelector: '#shell-tab-outputView',
24
- viewSelector: '#outputView',
25
- viewName: 'Output'
26
- };
27
-
28
- export class TheiaOutputView extends TheiaView {
29
- constructor(app: TheiaApp) {
30
- super(TheiaOutputViewData, app);
31
- }
32
-
33
- async isOutputChannelSelected(outputChannelName: string): Promise<boolean> {
34
- await this.activate();
35
- const contentPanel = await this.page.$('#theia-bottom-content-panel');
36
- if (contentPanel && (await contentPanel.isVisible())) {
37
- const channelList = await contentPanel.$('#outputChannelList');
38
- const selectedChannel = await channelList?.$('div.theia-select-component-label');
39
- if (selectedChannel && (await selectedChannel.textContent()) === outputChannelName) {
40
- return true;
41
- }
42
- }
43
- return false;
44
- }
45
-
46
- async getOutputChannel(outputChannelName: string): Promise<TheiaOutputViewChannel | undefined> {
47
- await this.activate();
48
- const channel = new TheiaOutputViewChannel(
49
- {
50
- viewSelector: 'div.p-Widget.theia-editor.p-DockPanel-widget > div.monaco-editor',
51
- dataUri: normalizeId(`output:/${encodeURIComponent(outputChannelName)}`),
52
- channelName: outputChannelName
53
- },
54
- this
55
- );
56
- await channel.waitForVisible();
57
- if (await channel.isDisplayed()) {
58
- return channel;
59
- }
60
- return undefined;
61
- }
62
-
63
- async selectOutputChannel(outputChannelName: string): Promise<boolean> {
64
- await this.activate();
65
- const contentPanel = await this.page.$('#theia-bottom-content-panel');
66
- if (contentPanel && (await contentPanel.isVisible())) {
67
- const channelSelectComponent = await contentPanel.$('#outputChannelList');
68
- if (!channelSelectComponent) {
69
- throw Error('Output Channel List not visible.');
70
- }
71
- // open output channel list component
72
- await channelSelectComponent.click();
73
- const channelContainer = await this.page.waitForSelector('#select-component-container > div.theia-select-component-dropdown');
74
- if (!channelContainer) {
75
- throw Error('Output Channel List could not be opened.');
76
- }
77
- const channels = await channelContainer.$$('div.theia-select-component-option-value');
78
- for (const channel of channels) {
79
- if (await channel.textContent() === outputChannelName) {
80
- await channel.click();
81
- }
82
- }
83
- return this.isOutputChannelSelected(outputChannelName);
84
- }
85
- return false;
86
- }
87
- }
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-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { TheiaApp } from './theia-app';
18
+ import { TheiaOutputViewChannel } from './theia-output-channel';
19
+ import { TheiaView } from './theia-view';
20
+ import { normalizeId } from './util';
21
+
22
+ const TheiaOutputViewData = {
23
+ tabSelector: '#shell-tab-outputView',
24
+ viewSelector: '#outputView',
25
+ viewName: 'Output'
26
+ };
27
+
28
+ export class TheiaOutputView extends TheiaView {
29
+ constructor(app: TheiaApp) {
30
+ super(TheiaOutputViewData, app);
31
+ }
32
+
33
+ async isOutputChannelSelected(outputChannelName: string): Promise<boolean> {
34
+ await this.activate();
35
+ const contentPanel = await this.page.$('#theia-bottom-content-panel');
36
+ if (contentPanel && (await contentPanel.isVisible())) {
37
+ const channelList = await contentPanel.$('#outputChannelList');
38
+ const selectedChannel = await channelList?.$('div.theia-select-component-label');
39
+ if (selectedChannel && (await selectedChannel.textContent()) === outputChannelName) {
40
+ return true;
41
+ }
42
+ }
43
+ return false;
44
+ }
45
+
46
+ async getOutputChannel(outputChannelName: string): Promise<TheiaOutputViewChannel | undefined> {
47
+ await this.activate();
48
+ const channel = new TheiaOutputViewChannel(
49
+ {
50
+ viewSelector: 'div.p-Widget.theia-editor.p-DockPanel-widget > div.monaco-editor',
51
+ dataUri: normalizeId(`output:/${encodeURIComponent(outputChannelName)}`),
52
+ channelName: outputChannelName
53
+ },
54
+ this
55
+ );
56
+ await channel.waitForVisible();
57
+ if (await channel.isDisplayed()) {
58
+ return channel;
59
+ }
60
+ return undefined;
61
+ }
62
+
63
+ async selectOutputChannel(outputChannelName: string): Promise<boolean> {
64
+ await this.activate();
65
+ const contentPanel = await this.page.$('#theia-bottom-content-panel');
66
+ if (contentPanel && (await contentPanel.isVisible())) {
67
+ const channelSelectComponent = await contentPanel.$('#outputChannelList');
68
+ if (!channelSelectComponent) {
69
+ throw Error('Output Channel List not visible.');
70
+ }
71
+ // open output channel list component
72
+ await channelSelectComponent.click();
73
+ const channelContainer = await this.page.waitForSelector('#select-component-container > div.theia-select-component-dropdown');
74
+ if (!channelContainer) {
75
+ throw Error('Output Channel List could not be opened.');
76
+ }
77
+ const channels = await channelContainer.$$('div.theia-select-component-option-value');
78
+ for (const channel of channels) {
79
+ if (await channel.textContent() === outputChannelName) {
80
+ await channel.click();
81
+ }
82
+ }
83
+ return this.isOutputChannelSelected(outputChannelName);
84
+ }
85
+ return false;
86
+ }
87
+ }