@theia/playwright 1.48.0 → 1.48.1

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 (159) hide show
  1. package/README.md +54 -54
  2. package/lib/index.d.ts +30 -30
  3. package/lib/index.js +48 -48
  4. package/lib/tests/theia-app.test.d.ts +1 -1
  5. package/lib/tests/theia-app.test.js +29 -29
  6. package/lib/tests/theia-application-shell.test.d.ts +1 -1
  7. package/lib/tests/theia-application-shell.test.js +57 -57
  8. package/lib/tests/theia-explorer-view.test.d.ts +1 -1
  9. package/lib/tests/theia-explorer-view.test.js +183 -183
  10. package/lib/tests/theia-getting-started.test.d.ts +1 -1
  11. package/lib/tests/theia-getting-started.test.js +45 -45
  12. package/lib/tests/theia-main-menu.test.d.ts +1 -1
  13. package/lib/tests/theia-main-menu.test.js +111 -111
  14. package/lib/tests/theia-output-view.test.d.ts +1 -1
  15. package/lib/tests/theia-output-view.test.js +78 -78
  16. package/lib/tests/theia-preference-view.test.d.ts +1 -1
  17. package/lib/tests/theia-preference-view.test.js +101 -101
  18. package/lib/tests/theia-problems-view.test.d.ts +1 -1
  19. package/lib/tests/theia-problems-view.test.js +54 -54
  20. package/lib/tests/theia-quick-command.test.d.ts +1 -1
  21. package/lib/tests/theia-quick-command.test.js +69 -69
  22. package/lib/tests/theia-sample-app.test.d.ts +1 -1
  23. package/lib/tests/theia-sample-app.test.js +57 -57
  24. package/lib/tests/theia-status-bar.test.d.ts +1 -1
  25. package/lib/tests/theia-status-bar.test.js +44 -44
  26. package/lib/tests/theia-terminal-view.test.d.ts +1 -1
  27. package/lib/tests/theia-terminal-view.test.js +78 -78
  28. package/lib/tests/theia-text-editor.test.d.ts +1 -1
  29. package/lib/tests/theia-text-editor.test.js +155 -155
  30. package/lib/tests/theia-toolbar.test.d.ts +1 -1
  31. package/lib/tests/theia-toolbar.test.js +61 -61
  32. package/lib/tests/theia-workspace.test.d.ts +1 -1
  33. package/lib/tests/theia-workspace.test.js +72 -72
  34. package/lib/theia-about-dialog.d.ts +4 -4
  35. package/lib/theia-about-dialog.js +26 -26
  36. package/lib/theia-app-loader.d.ts +19 -19
  37. package/lib/theia-app-loader.js +129 -129
  38. package/lib/theia-app.d.ts +50 -50
  39. package/lib/theia-app.js +153 -153
  40. package/lib/theia-context-menu.d.ts +8 -8
  41. package/lib/theia-context-menu.js +37 -37
  42. package/lib/theia-dialog.d.ts +28 -28
  43. package/lib/theia-dialog.js +99 -99
  44. package/lib/theia-editor.d.ts +9 -9
  45. package/lib/theia-editor.js +68 -68
  46. package/lib/theia-explorer-view.d.ts +47 -47
  47. package/lib/theia-explorer-view.js +273 -273
  48. package/lib/theia-main-menu.d.ts +12 -12
  49. package/lib/theia-main-menu.js +53 -53
  50. package/lib/theia-menu-item.d.ts +14 -14
  51. package/lib/theia-menu-item.js +66 -66
  52. package/lib/theia-menu.d.ts +16 -16
  53. package/lib/theia-menu.js +86 -86
  54. package/lib/theia-monaco-editor.d.ts +15 -15
  55. package/lib/theia-monaco-editor.js +75 -75
  56. package/lib/theia-notification-indicator.d.ts +7 -7
  57. package/lib/theia-notification-indicator.js +44 -44
  58. package/lib/theia-notification-overlay.d.ts +22 -22
  59. package/lib/theia-notification-overlay.js +79 -79
  60. package/lib/theia-output-channel.d.ts +24 -24
  61. package/lib/theia-output-channel.js +71 -71
  62. package/lib/theia-output-view.d.ts +9 -9
  63. package/lib/theia-output-view.js +81 -81
  64. package/lib/theia-page-object.d.ts +7 -7
  65. package/lib/theia-page-object.js +27 -27
  66. package/lib/theia-preference-view.d.ts +84 -84
  67. package/lib/theia-preference-view.js +209 -209
  68. package/lib/theia-problem-indicator.d.ts +8 -8
  69. package/lib/theia-problem-indicator.js +38 -38
  70. package/lib/theia-problem-view.d.ts +5 -5
  71. package/lib/theia-problem-view.js +30 -30
  72. package/lib/theia-quick-command-palette.d.ts +12 -12
  73. package/lib/theia-quick-command-palette.js +78 -78
  74. package/lib/theia-rename-dialog.d.ts +5 -5
  75. package/lib/theia-rename-dialog.js +34 -34
  76. package/lib/theia-status-bar.d.ts +13 -13
  77. package/lib/theia-status-bar.js +39 -39
  78. package/lib/theia-status-indicator.d.ts +10 -10
  79. package/lib/theia-status-indicator.js +48 -48
  80. package/lib/theia-terminal.d.ts +13 -13
  81. package/lib/theia-terminal.js +59 -59
  82. package/lib/theia-text-editor.d.ts +26 -26
  83. package/lib/theia-text-editor.js +120 -120
  84. package/lib/theia-toggle-bottom-indicator.d.ts +4 -4
  85. package/lib/theia-toggle-bottom-indicator.js +26 -26
  86. package/lib/theia-toolbar-item.d.ts +10 -10
  87. package/lib/theia-toolbar-item.js +39 -39
  88. package/lib/theia-toolbar.d.ts +19 -19
  89. package/lib/theia-toolbar.js +90 -90
  90. package/lib/theia-tree-node.d.ts +19 -19
  91. package/lib/theia-tree-node.js +72 -72
  92. package/lib/theia-view.d.ts +32 -32
  93. package/lib/theia-view.js +149 -149
  94. package/lib/theia-welcome-view.d.ts +5 -5
  95. package/lib/theia-welcome-view.js +30 -30
  96. package/lib/theia-workspace.d.ts +18 -18
  97. package/lib/theia-workspace.js +69 -69
  98. package/lib/util.d.ts +19 -19
  99. package/lib/util.js +93 -93
  100. package/package.json +2 -2
  101. package/src/index.ts +46 -46
  102. package/src/tests/resources/sample-files1/sample.txt +4 -4
  103. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-1.txt +1 -1
  104. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-2.txt +1 -1
  105. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-1.txt +1 -1
  106. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-2.txt +1 -1
  107. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-1.txt +1 -1
  108. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-2.txt +1 -1
  109. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-1.txt +1 -1
  110. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-2.txt +1 -1
  111. package/src/tests/resources/sample-files2/another-sample.txt +1 -1
  112. package/src/tests/theia-app.test.ts +33 -33
  113. package/src/tests/theia-application-shell.test.ts +67 -67
  114. package/src/tests/theia-explorer-view.test.ts +211 -211
  115. package/src/tests/theia-getting-started.test.ts +50 -50
  116. package/src/tests/theia-main-menu.test.ts +133 -133
  117. package/src/tests/theia-output-view.test.ts +85 -85
  118. package/src/tests/theia-preference-view.test.ts +122 -122
  119. package/src/tests/theia-problems-view.test.ts +64 -64
  120. package/src/tests/theia-quick-command.test.ts +80 -80
  121. package/src/tests/theia-sample-app.test.ts +66 -66
  122. package/src/tests/theia-status-bar.test.ts +52 -52
  123. package/src/tests/theia-terminal-view.test.ts +90 -90
  124. package/src/tests/theia-text-editor.test.ts +187 -187
  125. package/src/tests/theia-toolbar.test.ts +69 -69
  126. package/src/tests/theia-workspace.test.ts +80 -80
  127. package/src/theia-about-dialog.ts +26 -26
  128. package/src/theia-app-loader.ts +167 -167
  129. package/src/theia-app.ts +188 -188
  130. package/src/theia-context-menu.ts +42 -42
  131. package/src/theia-dialog.ts +114 -114
  132. package/src/theia-editor.ts +73 -73
  133. package/src/theia-explorer-view.ts +311 -311
  134. package/src/theia-main-menu.ts +54 -54
  135. package/src/theia-menu-item.ts +75 -75
  136. package/src/theia-menu.ts +96 -96
  137. package/src/theia-monaco-editor.ts +83 -83
  138. package/src/theia-notification-indicator.ts +44 -44
  139. package/src/theia-notification-overlay.ts +94 -94
  140. package/src/theia-output-channel.ts +88 -88
  141. package/src/theia-output-view.ts +87 -87
  142. package/src/theia-page-object.ts +29 -29
  143. package/src/theia-preference-view.ts +240 -240
  144. package/src/theia-problem-indicator.ts +37 -37
  145. package/src/theia-problem-view.ts +30 -30
  146. package/src/theia-quick-command-palette.ts +81 -81
  147. package/src/theia-rename-dialog.ts +35 -35
  148. package/src/theia-status-bar.ts +44 -44
  149. package/src/theia-status-indicator.ts +50 -50
  150. package/src/theia-terminal.ts +69 -69
  151. package/src/theia-text-editor.ts +141 -141
  152. package/src/theia-toggle-bottom-indicator.ts +21 -21
  153. package/src/theia-toolbar-item.ts +41 -41
  154. package/src/theia-toolbar.ts +99 -99
  155. package/src/theia-tree-node.ts +81 -81
  156. package/src/theia-view.ts +177 -177
  157. package/src/theia-welcome-view.ts +31 -31
  158. package/src/theia-workspace.ts +76 -76
  159. 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
+ }