@theia/playwright 1.48.1 → 1.48.2

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,141 +1,141 @@
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 { ElementHandle } from '@playwright/test';
18
- import { join } from 'path';
19
-
20
- import { TheiaApp } from './theia-app';
21
- import { TheiaEditor } from './theia-editor';
22
- import { normalizeId, OSUtil, urlEncodePath } from './util';
23
- import { TheiaMonacoEditor } from './theia-monaco-editor';
24
-
25
- export class TheiaTextEditor extends TheiaEditor {
26
-
27
- protected monacoEditor: TheiaMonacoEditor;
28
-
29
- constructor(filePath: string, app: TheiaApp) {
30
- // shell-tab-code-editor-opener:file:///c%3A/Users/user/AppData/Local/Temp/cloud-ws-JBUhb6/sample.txt:1
31
- // code-editor-opener:file:///c%3A/Users/user/AppData/Local/Temp/cloud-ws-JBUhb6/sample.txt:1
32
- super({
33
- tabSelector: normalizeId(`#shell-tab-code-editor-opener:file://${urlEncodePath(join(app.workspace.escapedPath, OSUtil.fileSeparator, filePath))}:1`),
34
- viewSelector: normalizeId(`#code-editor-opener:file://${urlEncodePath(join(app.workspace.escapedPath, OSUtil.fileSeparator, filePath))}:1`) + '.theia-editor'
35
- }, app);
36
- this.monacoEditor = new TheiaMonacoEditor(this.viewSelector, app);
37
- }
38
-
39
- async numberOfLines(): Promise<number | undefined> {
40
- await this.activate();
41
- return this.monacoEditor.numberOfLines();
42
- }
43
-
44
- async textContentOfLineByLineNumber(lineNumber: number): Promise<string | undefined> {
45
- return this.monacoEditor.textContentOfLineByLineNumber(lineNumber);
46
- }
47
-
48
- async replaceLineWithLineNumber(text: string, lineNumber: number): Promise<void> {
49
- await this.selectLineWithLineNumber(lineNumber);
50
- await this.typeTextAndHitEnter(text);
51
- }
52
-
53
- protected async typeTextAndHitEnter(text: string): Promise<void> {
54
- await this.page.keyboard.type(text);
55
- await this.page.keyboard.press('Enter');
56
- }
57
-
58
- async selectLineWithLineNumber(lineNumber: number): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
59
- await this.activate();
60
- const lineElement = await this.monacoEditor.lineByLineNumber(lineNumber);
61
- await this.selectLine(lineElement);
62
- return lineElement;
63
- }
64
-
65
- async placeCursorInLineWithLineNumber(lineNumber: number): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
66
- await this.activate();
67
- const lineElement = await this.monacoEditor.lineByLineNumber(lineNumber);
68
- await this.placeCursorInLine(lineElement);
69
- return lineElement;
70
- }
71
-
72
- async deleteLineByLineNumber(lineNumber: number): Promise<void> {
73
- await this.selectLineWithLineNumber(lineNumber);
74
- await this.page.keyboard.press('Backspace');
75
- }
76
-
77
- async textContentOfLineContainingText(text: string): Promise<string | undefined> {
78
- await this.activate();
79
- return this.monacoEditor.textContentOfLineContainingText(text);
80
- }
81
-
82
- async replaceLineContainingText(newText: string, oldText: string): Promise<void> {
83
- await this.selectLineContainingText(oldText);
84
- await this.typeTextAndHitEnter(newText);
85
- }
86
-
87
- async selectLineContainingText(text: string): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
88
- await this.activate();
89
- const lineElement = await this.monacoEditor.lineContainingText(text);
90
- await this.selectLine(lineElement);
91
- return lineElement;
92
- }
93
-
94
- async placeCursorInLineContainingText(text: string): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
95
- await this.activate();
96
- const lineElement = await this.monacoEditor.lineContainingText(text);
97
- await this.placeCursorInLine(lineElement);
98
- return lineElement;
99
- }
100
-
101
- async deleteLineContainingText(text: string): Promise<void> {
102
- await this.selectLineContainingText(text);
103
- await this.page.keyboard.press('Backspace');
104
- }
105
-
106
- async addTextToNewLineAfterLineContainingText(textContainedByExistingLine: string, newText: string): Promise<void> {
107
- const existingLine = await this.monacoEditor.lineContainingText(textContainedByExistingLine);
108
- await this.placeCursorInLine(existingLine);
109
- await this.page.keyboard.press('End');
110
- await this.page.keyboard.press('Enter');
111
- await this.page.keyboard.type(newText);
112
- }
113
-
114
- async addTextToNewLineAfterLineByLineNumber(lineNumber: number, newText: string): Promise<void> {
115
- const existingLine = await this.monacoEditor.lineByLineNumber(lineNumber);
116
- await this.placeCursorInLine(existingLine);
117
- await this.page.keyboard.press('End');
118
- await this.page.keyboard.press('Enter');
119
- await this.page.keyboard.type(newText);
120
- }
121
-
122
- protected async selectLine(lineElement: ElementHandle<SVGElement | HTMLElement> | undefined): Promise<void> {
123
- await lineElement?.click({ clickCount: 3 });
124
- }
125
-
126
- protected async placeCursorInLine(lineElement: ElementHandle<SVGElement | HTMLElement> | undefined): Promise<void> {
127
- await lineElement?.click();
128
- }
129
-
130
- protected async selectedSuggestion(): Promise<ElementHandle<SVGElement | HTMLElement>> {
131
- return this.page.waitForSelector(this.viewSelector + ' .monaco-list-row.show-file-icons.focused');
132
- }
133
-
134
- async getSelectedSuggestionText(): Promise<string> {
135
- const suggestion = await this.selectedSuggestion();
136
- const text = await suggestion.textContent();
137
- if (text === null) { throw new Error('Text content could not be found'); }
138
- return text;
139
- }
140
-
141
- }
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 { ElementHandle } from '@playwright/test';
18
+ import { join } from 'path';
19
+
20
+ import { TheiaApp } from './theia-app';
21
+ import { TheiaEditor } from './theia-editor';
22
+ import { normalizeId, OSUtil, urlEncodePath } from './util';
23
+ import { TheiaMonacoEditor } from './theia-monaco-editor';
24
+
25
+ export class TheiaTextEditor extends TheiaEditor {
26
+
27
+ protected monacoEditor: TheiaMonacoEditor;
28
+
29
+ constructor(filePath: string, app: TheiaApp) {
30
+ // shell-tab-code-editor-opener:file:///c%3A/Users/user/AppData/Local/Temp/cloud-ws-JBUhb6/sample.txt:1
31
+ // code-editor-opener:file:///c%3A/Users/user/AppData/Local/Temp/cloud-ws-JBUhb6/sample.txt:1
32
+ super({
33
+ tabSelector: normalizeId(`#shell-tab-code-editor-opener:file://${urlEncodePath(join(app.workspace.escapedPath, OSUtil.fileSeparator, filePath))}:1`),
34
+ viewSelector: normalizeId(`#code-editor-opener:file://${urlEncodePath(join(app.workspace.escapedPath, OSUtil.fileSeparator, filePath))}:1`) + '.theia-editor'
35
+ }, app);
36
+ this.monacoEditor = new TheiaMonacoEditor(this.viewSelector, app);
37
+ }
38
+
39
+ async numberOfLines(): Promise<number | undefined> {
40
+ await this.activate();
41
+ return this.monacoEditor.numberOfLines();
42
+ }
43
+
44
+ async textContentOfLineByLineNumber(lineNumber: number): Promise<string | undefined> {
45
+ return this.monacoEditor.textContentOfLineByLineNumber(lineNumber);
46
+ }
47
+
48
+ async replaceLineWithLineNumber(text: string, lineNumber: number): Promise<void> {
49
+ await this.selectLineWithLineNumber(lineNumber);
50
+ await this.typeTextAndHitEnter(text);
51
+ }
52
+
53
+ protected async typeTextAndHitEnter(text: string): Promise<void> {
54
+ await this.page.keyboard.type(text);
55
+ await this.page.keyboard.press('Enter');
56
+ }
57
+
58
+ async selectLineWithLineNumber(lineNumber: number): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
59
+ await this.activate();
60
+ const lineElement = await this.monacoEditor.lineByLineNumber(lineNumber);
61
+ await this.selectLine(lineElement);
62
+ return lineElement;
63
+ }
64
+
65
+ async placeCursorInLineWithLineNumber(lineNumber: number): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
66
+ await this.activate();
67
+ const lineElement = await this.monacoEditor.lineByLineNumber(lineNumber);
68
+ await this.placeCursorInLine(lineElement);
69
+ return lineElement;
70
+ }
71
+
72
+ async deleteLineByLineNumber(lineNumber: number): Promise<void> {
73
+ await this.selectLineWithLineNumber(lineNumber);
74
+ await this.page.keyboard.press('Backspace');
75
+ }
76
+
77
+ async textContentOfLineContainingText(text: string): Promise<string | undefined> {
78
+ await this.activate();
79
+ return this.monacoEditor.textContentOfLineContainingText(text);
80
+ }
81
+
82
+ async replaceLineContainingText(newText: string, oldText: string): Promise<void> {
83
+ await this.selectLineContainingText(oldText);
84
+ await this.typeTextAndHitEnter(newText);
85
+ }
86
+
87
+ async selectLineContainingText(text: string): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
88
+ await this.activate();
89
+ const lineElement = await this.monacoEditor.lineContainingText(text);
90
+ await this.selectLine(lineElement);
91
+ return lineElement;
92
+ }
93
+
94
+ async placeCursorInLineContainingText(text: string): Promise<ElementHandle<SVGElement | HTMLElement> | undefined> {
95
+ await this.activate();
96
+ const lineElement = await this.monacoEditor.lineContainingText(text);
97
+ await this.placeCursorInLine(lineElement);
98
+ return lineElement;
99
+ }
100
+
101
+ async deleteLineContainingText(text: string): Promise<void> {
102
+ await this.selectLineContainingText(text);
103
+ await this.page.keyboard.press('Backspace');
104
+ }
105
+
106
+ async addTextToNewLineAfterLineContainingText(textContainedByExistingLine: string, newText: string): Promise<void> {
107
+ const existingLine = await this.monacoEditor.lineContainingText(textContainedByExistingLine);
108
+ await this.placeCursorInLine(existingLine);
109
+ await this.page.keyboard.press('End');
110
+ await this.page.keyboard.press('Enter');
111
+ await this.page.keyboard.type(newText);
112
+ }
113
+
114
+ async addTextToNewLineAfterLineByLineNumber(lineNumber: number, newText: string): Promise<void> {
115
+ const existingLine = await this.monacoEditor.lineByLineNumber(lineNumber);
116
+ await this.placeCursorInLine(existingLine);
117
+ await this.page.keyboard.press('End');
118
+ await this.page.keyboard.press('Enter');
119
+ await this.page.keyboard.type(newText);
120
+ }
121
+
122
+ protected async selectLine(lineElement: ElementHandle<SVGElement | HTMLElement> | undefined): Promise<void> {
123
+ await lineElement?.click({ clickCount: 3 });
124
+ }
125
+
126
+ protected async placeCursorInLine(lineElement: ElementHandle<SVGElement | HTMLElement> | undefined): Promise<void> {
127
+ await lineElement?.click();
128
+ }
129
+
130
+ protected async selectedSuggestion(): Promise<ElementHandle<SVGElement | HTMLElement>> {
131
+ return this.page.waitForSelector(this.viewSelector + ' .monaco-list-row.show-file-icons.focused');
132
+ }
133
+
134
+ async getSelectedSuggestionText(): Promise<string> {
135
+ const suggestion = await this.selectedSuggestion();
136
+ const text = await suggestion.textContent();
137
+ if (text === null) { throw new Error('Text content could not be found'); }
138
+ return text;
139
+ }
140
+
141
+ }
@@ -1,21 +1,21 @@
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
- export class TheiaToggleBottomIndicator extends TheiaStatusIndicator {
20
- id = 'bottom-panel-toggle';
21
- }
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
+ export class TheiaToggleBottomIndicator extends TheiaStatusIndicator {
20
+ id = 'bottom-panel-toggle';
21
+ }
@@ -1,41 +1,41 @@
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 { TheiaApp } from './theia-app';
19
- import { TheiaPageObject } from './theia-page-object';
20
-
21
- export class TheiaToolbarItem extends TheiaPageObject {
22
- constructor(app: TheiaApp, protected element: ElementHandle<SVGElement | HTMLElement>) {
23
- super(app);
24
- }
25
-
26
- async commandId(): Promise<string | null> {
27
- return this.element.getAttribute('id');
28
- }
29
-
30
- async isEnabled(): Promise<boolean> {
31
- const classAttribute = await this.element.getAttribute('class');
32
- if (classAttribute === undefined || classAttribute === null) {
33
- return false;
34
- }
35
- return classAttribute.includes('enabled');
36
- }
37
-
38
- async trigger(): Promise<void> {
39
- await this.element.click();
40
- }
41
- }
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 { TheiaApp } from './theia-app';
19
+ import { TheiaPageObject } from './theia-page-object';
20
+
21
+ export class TheiaToolbarItem extends TheiaPageObject {
22
+ constructor(app: TheiaApp, protected element: ElementHandle<SVGElement | HTMLElement>) {
23
+ super(app);
24
+ }
25
+
26
+ async commandId(): Promise<string | null> {
27
+ return this.element.getAttribute('id');
28
+ }
29
+
30
+ async isEnabled(): Promise<boolean> {
31
+ const classAttribute = await this.element.getAttribute('class');
32
+ if (classAttribute === undefined || classAttribute === null) {
33
+ return false;
34
+ }
35
+ return classAttribute.includes('enabled');
36
+ }
37
+
38
+ async trigger(): Promise<void> {
39
+ await this.element.click();
40
+ }
41
+ }
@@ -1,99 +1,99 @@
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 { TheiaPageObject } from './theia-page-object';
19
- import { TheiaToolbarItem } from './theia-toolbar-item';
20
-
21
- export class TheiaToolbar extends TheiaPageObject {
22
- selector = 'div#main-toolbar.p-TabBar-toolbar';
23
-
24
- protected async toolbarElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
25
- return this.page.$(this.selector);
26
- }
27
-
28
- async waitForVisible(): Promise<void> {
29
- await this.page.waitForSelector(this.selector, { state: 'visible' });
30
- }
31
-
32
- async isShown(): Promise<boolean> {
33
- const statusBar = await this.toolbarElementHandle();
34
- return !!statusBar && statusBar.isVisible();
35
- }
36
-
37
- async show(): Promise<void> {
38
- if (!await this.isShown()) {
39
- await this.toggle();
40
- }
41
- }
42
-
43
- async hide(): Promise<void> {
44
- if (await this.isShown()) {
45
- await this.toggle();
46
- }
47
- }
48
-
49
- async toggle(): Promise<void> {
50
- const isShown = await this.isShown();
51
- const viewMenu = await this.app.menuBar.openMenu('View');
52
- await viewMenu.clickMenuItem('Toggle Toolbar');
53
- isShown ? await this.waitUntilHidden() : await this.waitUntilShown();
54
- }
55
-
56
- async waitUntilHidden(): Promise<void> {
57
- await this.page.waitForSelector(this.selector, { state: 'hidden' });
58
- }
59
-
60
- async waitUntilShown(): Promise<void> {
61
- await this.page.waitForSelector(this.selector, { state: 'visible' });
62
- }
63
-
64
- async toolbarItems(): Promise<TheiaToolbarItem[]> {
65
- const toolbarHandle = await this.toolbarElementHandle();
66
- if (!toolbarHandle) {
67
- return [];
68
- }
69
- const items = await toolbarHandle.$$(this.toolBarItemSelector());
70
- return items.map(element => new TheiaToolbarItem(this.app, element));
71
- }
72
-
73
- async toolbarItemIds(): Promise<string[]> {
74
- const items = await this.toolbarItems();
75
- return this.toCommandIdArray(items);
76
- }
77
-
78
- async toolBarItem(commandId: string): Promise<TheiaToolbarItem | undefined> {
79
- const toolbarHandle = await this.toolbarElementHandle();
80
- if (!toolbarHandle) {
81
- return undefined;
82
- }
83
- const item = await toolbarHandle.$(this.toolBarItemSelector(commandId));
84
- if (item) {
85
- return new TheiaToolbarItem(this.app, item);
86
- }
87
- return undefined;
88
- }
89
-
90
- protected toolBarItemSelector(toolbarItemId = ''): string {
91
- return `div.toolbar-item${toolbarItemId ? `[id="${toolbarItemId}"]` : ''}`;
92
- }
93
-
94
- protected async toCommandIdArray(items: TheiaToolbarItem[]): Promise<string[]> {
95
- const contents = items.map(item => item.commandId());
96
- const resolvedContents = await Promise.all(contents);
97
- return resolvedContents.filter(id => id !== undefined) as string[];
98
- }
99
- }
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 { TheiaPageObject } from './theia-page-object';
19
+ import { TheiaToolbarItem } from './theia-toolbar-item';
20
+
21
+ export class TheiaToolbar extends TheiaPageObject {
22
+ selector = 'div#main-toolbar.p-TabBar-toolbar';
23
+
24
+ protected async toolbarElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
25
+ return this.page.$(this.selector);
26
+ }
27
+
28
+ async waitForVisible(): Promise<void> {
29
+ await this.page.waitForSelector(this.selector, { state: 'visible' });
30
+ }
31
+
32
+ async isShown(): Promise<boolean> {
33
+ const statusBar = await this.toolbarElementHandle();
34
+ return !!statusBar && statusBar.isVisible();
35
+ }
36
+
37
+ async show(): Promise<void> {
38
+ if (!await this.isShown()) {
39
+ await this.toggle();
40
+ }
41
+ }
42
+
43
+ async hide(): Promise<void> {
44
+ if (await this.isShown()) {
45
+ await this.toggle();
46
+ }
47
+ }
48
+
49
+ async toggle(): Promise<void> {
50
+ const isShown = await this.isShown();
51
+ const viewMenu = await this.app.menuBar.openMenu('View');
52
+ await viewMenu.clickMenuItem('Toggle Toolbar');
53
+ isShown ? await this.waitUntilHidden() : await this.waitUntilShown();
54
+ }
55
+
56
+ async waitUntilHidden(): Promise<void> {
57
+ await this.page.waitForSelector(this.selector, { state: 'hidden' });
58
+ }
59
+
60
+ async waitUntilShown(): Promise<void> {
61
+ await this.page.waitForSelector(this.selector, { state: 'visible' });
62
+ }
63
+
64
+ async toolbarItems(): Promise<TheiaToolbarItem[]> {
65
+ const toolbarHandle = await this.toolbarElementHandle();
66
+ if (!toolbarHandle) {
67
+ return [];
68
+ }
69
+ const items = await toolbarHandle.$$(this.toolBarItemSelector());
70
+ return items.map(element => new TheiaToolbarItem(this.app, element));
71
+ }
72
+
73
+ async toolbarItemIds(): Promise<string[]> {
74
+ const items = await this.toolbarItems();
75
+ return this.toCommandIdArray(items);
76
+ }
77
+
78
+ async toolBarItem(commandId: string): Promise<TheiaToolbarItem | undefined> {
79
+ const toolbarHandle = await this.toolbarElementHandle();
80
+ if (!toolbarHandle) {
81
+ return undefined;
82
+ }
83
+ const item = await toolbarHandle.$(this.toolBarItemSelector(commandId));
84
+ if (item) {
85
+ return new TheiaToolbarItem(this.app, item);
86
+ }
87
+ return undefined;
88
+ }
89
+
90
+ protected toolBarItemSelector(toolbarItemId = ''): string {
91
+ return `div.toolbar-item${toolbarItemId ? `[id="${toolbarItemId}"]` : ''}`;
92
+ }
93
+
94
+ protected async toCommandIdArray(items: TheiaToolbarItem[]): Promise<string[]> {
95
+ const contents = items.map(item => item.commandId());
96
+ const resolvedContents = await Promise.all(contents);
97
+ return resolvedContents.filter(id => id !== undefined) as string[];
98
+ }
99
+ }