@theia/playwright 1.67.0-next.56 → 1.67.0-next.59

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 (213) hide show
  1. package/lib/index.d.ts +37 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +55 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/tests/theia-app.test.d.ts +2 -0
  6. package/lib/tests/theia-app.test.d.ts.map +1 -0
  7. package/lib/tests/theia-app.test.js +30 -0
  8. package/lib/tests/theia-app.test.js.map +1 -0
  9. package/lib/tests/theia-application-shell.test.d.ts +2 -0
  10. package/lib/tests/theia-application-shell.test.d.ts.map +1 -0
  11. package/lib/tests/theia-application-shell.test.js +59 -0
  12. package/lib/tests/theia-application-shell.test.js.map +1 -0
  13. package/lib/tests/theia-explorer-view.test.d.ts +2 -0
  14. package/lib/tests/theia-explorer-view.test.d.ts.map +1 -0
  15. package/lib/tests/theia-explorer-view.test.js +186 -0
  16. package/lib/tests/theia-explorer-view.test.js.map +1 -0
  17. package/lib/tests/theia-getting-started.test.d.ts +2 -0
  18. package/lib/tests/theia-getting-started.test.d.ts.map +1 -0
  19. package/lib/tests/theia-getting-started.test.js +46 -0
  20. package/lib/tests/theia-getting-started.test.js.map +1 -0
  21. package/lib/tests/theia-main-menu.test.d.ts +2 -0
  22. package/lib/tests/theia-main-menu.test.d.ts.map +1 -0
  23. package/lib/tests/theia-main-menu.test.js +111 -0
  24. package/lib/tests/theia-main-menu.test.js.map +1 -0
  25. package/lib/tests/theia-notebook-editor.test.d.ts +2 -0
  26. package/lib/tests/theia-notebook-editor.test.d.ts.map +1 -0
  27. package/lib/tests/theia-notebook-editor.test.js +301 -0
  28. package/lib/tests/theia-notebook-editor.test.js.map +1 -0
  29. package/lib/tests/theia-output-view.test.d.ts +2 -0
  30. package/lib/tests/theia-output-view.test.d.ts.map +1 -0
  31. package/lib/tests/theia-output-view.test.js +79 -0
  32. package/lib/tests/theia-output-view.test.js.map +1 -0
  33. package/lib/tests/theia-preference-view.test.d.ts +2 -0
  34. package/lib/tests/theia-preference-view.test.d.ts.map +1 -0
  35. package/lib/tests/theia-preference-view.test.js +102 -0
  36. package/lib/tests/theia-preference-view.test.js.map +1 -0
  37. package/lib/tests/theia-problems-view.test.d.ts +2 -0
  38. package/lib/tests/theia-problems-view.test.d.ts.map +1 -0
  39. package/lib/tests/theia-problems-view.test.js +55 -0
  40. package/lib/tests/theia-problems-view.test.js.map +1 -0
  41. package/lib/tests/theia-quick-command.test.d.ts +2 -0
  42. package/lib/tests/theia-quick-command.test.d.ts.map +1 -0
  43. package/lib/tests/theia-quick-command.test.js +75 -0
  44. package/lib/tests/theia-quick-command.test.js.map +1 -0
  45. package/lib/tests/theia-sample-app.test.d.ts +2 -0
  46. package/lib/tests/theia-sample-app.test.d.ts.map +1 -0
  47. package/lib/tests/theia-sample-app.test.js +58 -0
  48. package/lib/tests/theia-sample-app.test.js.map +1 -0
  49. package/lib/tests/theia-status-bar.test.d.ts +2 -0
  50. package/lib/tests/theia-status-bar.test.d.ts.map +1 -0
  51. package/lib/tests/theia-status-bar.test.js +45 -0
  52. package/lib/tests/theia-status-bar.test.js.map +1 -0
  53. package/lib/tests/theia-terminal-view.test.d.ts +2 -0
  54. package/lib/tests/theia-terminal-view.test.d.ts.map +1 -0
  55. package/lib/tests/theia-terminal-view.test.js +80 -0
  56. package/lib/tests/theia-terminal-view.test.js.map +1 -0
  57. package/lib/tests/theia-text-editor.test.d.ts +2 -0
  58. package/lib/tests/theia-text-editor.test.d.ts.map +1 -0
  59. package/lib/tests/theia-text-editor.test.js +159 -0
  60. package/lib/tests/theia-text-editor.test.js.map +1 -0
  61. package/lib/tests/theia-toolbar.test.d.ts +2 -0
  62. package/lib/tests/theia-toolbar.test.d.ts.map +1 -0
  63. package/lib/tests/theia-toolbar.test.js +62 -0
  64. package/lib/tests/theia-toolbar.test.js.map +1 -0
  65. package/lib/tests/theia-workspace.test.d.ts +2 -0
  66. package/lib/tests/theia-workspace.test.d.ts.map +1 -0
  67. package/lib/tests/theia-workspace.test.js +77 -0
  68. package/lib/tests/theia-workspace.test.js.map +1 -0
  69. package/lib/theia-about-dialog.d.ts +5 -0
  70. package/lib/theia-about-dialog.d.ts.map +1 -0
  71. package/lib/theia-about-dialog.js +27 -0
  72. package/lib/theia-about-dialog.js.map +1 -0
  73. package/lib/theia-app-loader.d.ts +20 -0
  74. package/lib/theia-app-loader.d.ts.map +1 -0
  75. package/lib/theia-app-loader.js +124 -0
  76. package/lib/theia-app-loader.js.map +1 -0
  77. package/lib/theia-app.d.ts +51 -0
  78. package/lib/theia-app.d.ts.map +1 -0
  79. package/lib/theia-app.js +154 -0
  80. package/lib/theia-app.js.map +1 -0
  81. package/lib/theia-context-menu.d.ts +9 -0
  82. package/lib/theia-context-menu.d.ts.map +1 -0
  83. package/lib/theia-context-menu.js +38 -0
  84. package/lib/theia-context-menu.js.map +1 -0
  85. package/lib/theia-dialog.d.ts +29 -0
  86. package/lib/theia-dialog.d.ts.map +1 -0
  87. package/lib/theia-dialog.js +100 -0
  88. package/lib/theia-dialog.js.map +1 -0
  89. package/lib/theia-editor.d.ts +10 -0
  90. package/lib/theia-editor.d.ts.map +1 -0
  91. package/lib/theia-editor.js +69 -0
  92. package/lib/theia-editor.js.map +1 -0
  93. package/lib/theia-explorer-view.d.ts +48 -0
  94. package/lib/theia-explorer-view.d.ts.map +1 -0
  95. package/lib/theia-explorer-view.js +274 -0
  96. package/lib/theia-explorer-view.js.map +1 -0
  97. package/lib/theia-main-menu.d.ts +17 -0
  98. package/lib/theia-main-menu.d.ts.map +1 -0
  99. package/lib/theia-main-menu.js +73 -0
  100. package/lib/theia-main-menu.js.map +1 -0
  101. package/lib/theia-menu-item.d.ts +15 -0
  102. package/lib/theia-menu-item.d.ts.map +1 -0
  103. package/lib/theia-menu-item.js +67 -0
  104. package/lib/theia-menu-item.js.map +1 -0
  105. package/lib/theia-menu.d.ts +17 -0
  106. package/lib/theia-menu.d.ts.map +1 -0
  107. package/lib/theia-menu.js +106 -0
  108. package/lib/theia-menu.js.map +1 -0
  109. package/lib/theia-monaco-editor.d.ts +63 -0
  110. package/lib/theia-monaco-editor.d.ts.map +1 -0
  111. package/lib/theia-monaco-editor.js +155 -0
  112. package/lib/theia-monaco-editor.js.map +1 -0
  113. package/lib/theia-notebook-cell.d.ts +104 -0
  114. package/lib/theia-notebook-cell.d.ts.map +1 -0
  115. package/lib/theia-notebook-cell.js +228 -0
  116. package/lib/theia-notebook-cell.js.map +1 -0
  117. package/lib/theia-notebook-editor.d.ts +50 -0
  118. package/lib/theia-notebook-editor.d.ts.map +1 -0
  119. package/lib/theia-notebook-editor.js +153 -0
  120. package/lib/theia-notebook-editor.js.map +1 -0
  121. package/lib/theia-notebook-toolbar.d.ts +13 -0
  122. package/lib/theia-notebook-toolbar.d.ts.map +1 -0
  123. package/lib/theia-notebook-toolbar.js +47 -0
  124. package/lib/theia-notebook-toolbar.js.map +1 -0
  125. package/lib/theia-notification-indicator.d.ts +8 -0
  126. package/lib/theia-notification-indicator.d.ts.map +1 -0
  127. package/lib/theia-notification-indicator.js +45 -0
  128. package/lib/theia-notification-indicator.js.map +1 -0
  129. package/lib/theia-notification-overlay.d.ts +23 -0
  130. package/lib/theia-notification-overlay.d.ts.map +1 -0
  131. package/lib/theia-notification-overlay.js +80 -0
  132. package/lib/theia-notification-overlay.js.map +1 -0
  133. package/lib/theia-output-channel.d.ts +25 -0
  134. package/lib/theia-output-channel.d.ts.map +1 -0
  135. package/lib/theia-output-channel.js +72 -0
  136. package/lib/theia-output-channel.js.map +1 -0
  137. package/lib/theia-output-view.d.ts +10 -0
  138. package/lib/theia-output-view.d.ts.map +1 -0
  139. package/lib/theia-output-view.js +82 -0
  140. package/lib/theia-output-view.js.map +1 -0
  141. package/lib/theia-page-object.d.ts +8 -0
  142. package/lib/theia-page-object.d.ts.map +1 -0
  143. package/lib/theia-page-object.js +28 -0
  144. package/lib/theia-page-object.js.map +1 -0
  145. package/lib/theia-preference-view.d.ts +91 -0
  146. package/lib/theia-preference-view.d.ts.map +1 -0
  147. package/lib/theia-preference-view.js +224 -0
  148. package/lib/theia-preference-view.js.map +1 -0
  149. package/lib/theia-problem-indicator.d.ts +9 -0
  150. package/lib/theia-problem-indicator.d.ts.map +1 -0
  151. package/lib/theia-problem-indicator.js +39 -0
  152. package/lib/theia-problem-indicator.js.map +1 -0
  153. package/lib/theia-problem-view.d.ts +6 -0
  154. package/lib/theia-problem-view.d.ts.map +1 -0
  155. package/lib/theia-problem-view.js +31 -0
  156. package/lib/theia-problem-view.js.map +1 -0
  157. package/lib/theia-quick-command-palette.d.ts +14 -0
  158. package/lib/theia-quick-command-palette.d.ts.map +1 -0
  159. package/lib/theia-quick-command-palette.js +87 -0
  160. package/lib/theia-quick-command-palette.js.map +1 -0
  161. package/lib/theia-rename-dialog.d.ts +6 -0
  162. package/lib/theia-rename-dialog.d.ts.map +1 -0
  163. package/lib/theia-rename-dialog.js +35 -0
  164. package/lib/theia-rename-dialog.js.map +1 -0
  165. package/lib/theia-status-bar.d.ts +14 -0
  166. package/lib/theia-status-bar.d.ts.map +1 -0
  167. package/lib/theia-status-bar.js +40 -0
  168. package/lib/theia-status-bar.js.map +1 -0
  169. package/lib/theia-status-indicator.d.ts +11 -0
  170. package/lib/theia-status-indicator.d.ts.map +1 -0
  171. package/lib/theia-status-indicator.js +49 -0
  172. package/lib/theia-status-indicator.js.map +1 -0
  173. package/lib/theia-terminal.d.ts +14 -0
  174. package/lib/theia-terminal.d.ts.map +1 -0
  175. package/lib/theia-terminal.js +60 -0
  176. package/lib/theia-terminal.js.map +1 -0
  177. package/lib/theia-text-editor.d.ts +27 -0
  178. package/lib/theia-text-editor.d.ts.map +1 -0
  179. package/lib/theia-text-editor.js +124 -0
  180. package/lib/theia-text-editor.js.map +1 -0
  181. package/lib/theia-toggle-bottom-indicator.d.ts +5 -0
  182. package/lib/theia-toggle-bottom-indicator.d.ts.map +1 -0
  183. package/lib/theia-toggle-bottom-indicator.js +27 -0
  184. package/lib/theia-toggle-bottom-indicator.js.map +1 -0
  185. package/lib/theia-toolbar-item.d.ts +11 -0
  186. package/lib/theia-toolbar-item.d.ts.map +1 -0
  187. package/lib/theia-toolbar-item.js +41 -0
  188. package/lib/theia-toolbar-item.js.map +1 -0
  189. package/lib/theia-toolbar.d.ts +20 -0
  190. package/lib/theia-toolbar.d.ts.map +1 -0
  191. package/lib/theia-toolbar.js +91 -0
  192. package/lib/theia-toolbar.js.map +1 -0
  193. package/lib/theia-tree-node.d.ts +20 -0
  194. package/lib/theia-tree-node.d.ts.map +1 -0
  195. package/lib/theia-tree-node.js +73 -0
  196. package/lib/theia-tree-node.js.map +1 -0
  197. package/lib/theia-view.d.ts +33 -0
  198. package/lib/theia-view.d.ts.map +1 -0
  199. package/lib/theia-view.js +150 -0
  200. package/lib/theia-view.js.map +1 -0
  201. package/lib/theia-welcome-view.d.ts +6 -0
  202. package/lib/theia-welcome-view.d.ts.map +1 -0
  203. package/lib/theia-welcome-view.js +31 -0
  204. package/lib/theia-welcome-view.js.map +1 -0
  205. package/lib/theia-workspace.d.ts +27 -0
  206. package/lib/theia-workspace.d.ts.map +1 -0
  207. package/lib/theia-workspace.js +84 -0
  208. package/lib/theia-workspace.js.map +1 -0
  209. package/lib/util.d.ts +18 -0
  210. package/lib/util.d.ts.map +1 -0
  211. package/lib/util.js +86 -0
  212. package/lib/util.js.map +1 -0
  213. package/package.json +3 -3
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.TheiaContextMenu = void 0;
19
+ const theia_menu_1 = require("./theia-menu");
20
+ class TheiaContextMenu extends theia_menu_1.TheiaMenu {
21
+ static async openAt(app, x, y) {
22
+ await app.page.mouse.move(x, y);
23
+ await app.page.mouse.click(x, y, { button: 'right' });
24
+ return TheiaContextMenu.returnWhenVisible(app);
25
+ }
26
+ static async open(app, element) {
27
+ const elementHandle = await element();
28
+ await elementHandle.click({ button: 'right' });
29
+ return TheiaContextMenu.returnWhenVisible(app);
30
+ }
31
+ static async returnWhenVisible(app) {
32
+ const menu = new TheiaContextMenu(app);
33
+ await menu.waitForVisible();
34
+ return menu;
35
+ }
36
+ }
37
+ exports.TheiaContextMenu = TheiaContextMenu;
38
+ //# sourceMappingURL=theia-context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-context-menu.js","sourceRoot":"","sources":["../src/theia-context-menu.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAKhF,6CAAyC;AAEzC,MAAa,gBAAiB,SAAQ,sBAAS;IAEpC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAa,EAAE,CAAS,EAAE,CAAS;QAC1D,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAa,EAAE,OAA+D;QACnG,MAAM,aAAa,GAAG,MAAM,OAAO,EAAE,CAAC;QACtC,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAa;QAChD,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;CAEJ;AApBD,4CAoBC"}
@@ -0,0 +1,29 @@
1
+ import { ElementHandle } from '@playwright/test';
2
+ import { TheiaPageObject } from './theia-page-object';
3
+ export declare class TheiaDialog extends TheiaPageObject {
4
+ protected overlaySelector: string;
5
+ protected blockSelector: string;
6
+ protected titleBarSelector: string;
7
+ protected titleSelector: string;
8
+ protected contentSelector: string;
9
+ protected controlSelector: string;
10
+ protected errorSelector: string;
11
+ waitForVisible(): Promise<void>;
12
+ waitForClosed(): Promise<void>;
13
+ isVisible(): Promise<boolean>;
14
+ title(): Promise<string | null>;
15
+ waitUntilTitleIsDisplayed(title: string): Promise<void>;
16
+ protected contentElement(): Promise<ElementHandle<SVGElement | HTMLElement>>;
17
+ protected buttonElement(label: string): Promise<ElementHandle<SVGElement | HTMLElement>>;
18
+ protected buttonElementByClass(buttonClass: string): Promise<ElementHandle<SVGElement | HTMLElement>>;
19
+ protected validationElement(): Promise<ElementHandle<SVGElement | HTMLElement>>;
20
+ getValidationText(): Promise<string | null>;
21
+ validationResult(): Promise<boolean>;
22
+ close(): Promise<void>;
23
+ clickButton(buttonLabel: string): Promise<void>;
24
+ isButtonDisabled(buttonLabel: string): Promise<boolean>;
25
+ clickMainButton(): Promise<void>;
26
+ clickSecondaryButton(): Promise<void>;
27
+ waitUntilMainButtonIsEnabled(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=theia-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-dialog.d.ts","sourceRoot":"","sources":["../src/theia-dialog.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,qBAAa,WAAY,SAAQ,eAAe;IAE5C,SAAS,CAAC,eAAe,SAAyB;IAClD,SAAS,CAAC,aAAa,SAA0C;IACjE,SAAS,CAAC,gBAAgB,SAAwC;IAClE,SAAS,CAAC,aAAa,SAAoC;IAC3D,SAAS,CAAC,eAAe,SAAgD;IACzE,SAAS,CAAC,eAAe,SAA0C;IACnE,SAAS,CAAC,aAAa,SAA0C;IAE3D,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7B,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK/B,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAO7C,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;cAIlE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;cAI9E,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;cAI3F,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;IAI/E,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAKpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;CAOtD"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.TheiaDialog = void 0;
19
+ const theia_page_object_1 = require("./theia-page-object");
20
+ class TheiaDialog extends theia_page_object_1.TheiaPageObject {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.overlaySelector = '#theia-dialog-shell';
24
+ this.blockSelector = this.overlaySelector + ' .dialogBlock';
25
+ this.titleBarSelector = this.blockSelector + ' .dialogTitle';
26
+ this.titleSelector = this.titleBarSelector + ' > div';
27
+ this.contentSelector = this.blockSelector + ' .dialogContent > div';
28
+ this.controlSelector = this.blockSelector + ' .dialogControl';
29
+ this.errorSelector = this.blockSelector + ' .dialogContent';
30
+ }
31
+ async waitForVisible() {
32
+ await this.page.waitForSelector(`${this.blockSelector}`, { state: 'visible' });
33
+ }
34
+ async waitForClosed() {
35
+ await this.page.waitForSelector(`${this.blockSelector}`, { state: 'detached' });
36
+ }
37
+ async isVisible() {
38
+ const pouDialogElement = await this.page.$(this.blockSelector);
39
+ return pouDialogElement ? pouDialogElement.isVisible() : false;
40
+ }
41
+ async title() {
42
+ const titleElement = await this.page.waitForSelector(`${this.titleSelector}`);
43
+ return titleElement.textContent();
44
+ }
45
+ async waitUntilTitleIsDisplayed(title) {
46
+ await this.page.waitForFunction(predicate => {
47
+ const element = document.querySelector(predicate.titleSelector);
48
+ return !!element && element.textContent === predicate.expectedTitle;
49
+ }, { titleSelector: this.titleSelector, expectedTitle: title });
50
+ }
51
+ async contentElement() {
52
+ return this.page.waitForSelector(this.contentSelector);
53
+ }
54
+ async buttonElement(label) {
55
+ return this.page.waitForSelector(`${this.controlSelector} button:has-text("${label}")`);
56
+ }
57
+ async buttonElementByClass(buttonClass) {
58
+ return this.page.waitForSelector(`${this.controlSelector} button${buttonClass}`);
59
+ }
60
+ async validationElement() {
61
+ return this.page.waitForSelector(`${this.errorSelector} div.error`, { state: 'attached' });
62
+ }
63
+ async getValidationText() {
64
+ const element = await this.validationElement();
65
+ return element.textContent();
66
+ }
67
+ async validationResult() {
68
+ const validationText = await this.getValidationText();
69
+ return validationText !== '' ? false : true;
70
+ }
71
+ async close() {
72
+ const closeButton = await this.page.waitForSelector(`${this.titleBarSelector} i.closeButton`);
73
+ await closeButton.click();
74
+ await this.waitForClosed();
75
+ }
76
+ async clickButton(buttonLabel) {
77
+ const buttonElement = await this.buttonElement(buttonLabel);
78
+ await buttonElement.click();
79
+ }
80
+ async isButtonDisabled(buttonLabel) {
81
+ const buttonElement = await this.buttonElement(buttonLabel);
82
+ return buttonElement.isDisabled();
83
+ }
84
+ async clickMainButton() {
85
+ const buttonElement = await this.buttonElementByClass('.theia-button.main');
86
+ await buttonElement.click();
87
+ }
88
+ async clickSecondaryButton() {
89
+ const buttonElement = await this.buttonElementByClass('.theia-button.secondary');
90
+ await buttonElement.click();
91
+ }
92
+ async waitUntilMainButtonIsEnabled() {
93
+ await this.page.waitForFunction(predicate => {
94
+ const button = document.querySelector(predicate.buttonSelector);
95
+ return !!button && !button.disabled;
96
+ }, { buttonSelector: `${this.controlSelector} > button.theia-button.main` });
97
+ }
98
+ }
99
+ exports.TheiaDialog = TheiaDialog;
100
+ //# sourceMappingURL=theia-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-dialog.js","sourceRoot":"","sources":["../src/theia-dialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { TheiaView } from './theia-view';
2
+ export declare abstract class TheiaEditor extends TheiaView {
3
+ isDirty(): Promise<boolean>;
4
+ save(): Promise<void>;
5
+ closeWithoutSave(): Promise<void>;
6
+ saveAndClose(): Promise<void>;
7
+ undo(times?: number): Promise<void>;
8
+ redo(times?: number): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=theia-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-editor.d.ts","sourceRoot":"","sources":["../src/theia-editor.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,8BAAsB,WAAY,SAAQ,SAAS;IAEzC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B,IAAI,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9B,IAAI,CAAC,KAAK,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAUvC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.TheiaEditor = void 0;
19
+ const theia_dialog_1 = require("./theia-dialog");
20
+ const theia_view_1 = require("./theia-view");
21
+ const util_1 = require("./util");
22
+ class TheiaEditor extends theia_view_1.TheiaView {
23
+ async isDirty() {
24
+ return await this.isTabVisible() && (0, util_1.containsClass)(this.tabElement(), 'theia-mod-dirty');
25
+ }
26
+ async save() {
27
+ await this.activate();
28
+ if (!await this.isDirty()) {
29
+ return;
30
+ }
31
+ const fileMenu = await this.app.menuBar.openMenu('File');
32
+ const saveItem = await fileMenu.menuItemByName('Save');
33
+ await (saveItem === null || saveItem === void 0 ? void 0 : saveItem.click());
34
+ await this.page.waitForSelector(this.tabSelector + '.theia-mod-dirty', { state: 'detached' });
35
+ }
36
+ async closeWithoutSave() {
37
+ if (!await this.isDirty()) {
38
+ return super.close(true);
39
+ }
40
+ await super.close(false);
41
+ const saveDialog = new theia_dialog_1.TheiaDialog(this.app);
42
+ await saveDialog.clickButton('Don\'t save');
43
+ await super.waitUntilClosed();
44
+ }
45
+ async saveAndClose() {
46
+ await this.save();
47
+ await this.close();
48
+ }
49
+ async undo(times = 1) {
50
+ await this.activate();
51
+ for (let i = 0; i < times; i++) {
52
+ const editMenu = await this.app.menuBar.openMenu('Edit');
53
+ const undoItem = await editMenu.menuItemByName('Undo');
54
+ await (undoItem === null || undoItem === void 0 ? void 0 : undoItem.click());
55
+ await this.app.page.waitForTimeout(200);
56
+ }
57
+ }
58
+ async redo(times = 1) {
59
+ await this.activate();
60
+ for (let i = 0; i < times; i++) {
61
+ const editMenu = await this.app.menuBar.openMenu('Edit');
62
+ const undoItem = await editMenu.menuItemByName('Redo');
63
+ await (undoItem === null || undoItem === void 0 ? void 0 : undoItem.click());
64
+ await this.app.page.waitForTimeout(200);
65
+ }
66
+ }
67
+ }
68
+ exports.TheiaEditor = TheiaEditor;
69
+ //# sourceMappingURL=theia-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-editor.js","sourceRoot":"","sources":["../src/theia-editor.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,iDAA6C;AAC7C,6CAAyC;AACzC,iCAAuC;AAEvC,MAAsB,WAAY,SAAQ,sBAAS;IAE/C,KAAK,CAAC,OAAO;QACT,OAAO,MAAM,IAAI,CAAC,YAAY,EAAE,IAAI,IAAA,oBAAa,EAAC,IAAI,CAAC,UAAU,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE,CAAA,CAAC;QACxB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,GAAG,kBAAkB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;QAChB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE,CAAA,CAAC;YACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;QAChB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE,CAAA,CAAC;YACxB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;CAEJ;AApDD,kCAoDC"}
@@ -0,0 +1,48 @@
1
+ import { ElementHandle } from '@playwright/test';
2
+ import { TheiaApp } from './theia-app';
3
+ import { TheiaMenuItem } from './theia-menu-item';
4
+ import { TheiaTreeNode } from './theia-tree-node';
5
+ import { TheiaView } from './theia-view';
6
+ export declare class TheiaExplorerFileStatNode extends TheiaTreeNode {
7
+ protected elementHandle: ElementHandle<SVGElement | HTMLElement>;
8
+ protected explorerView: TheiaExplorerView;
9
+ constructor(elementHandle: ElementHandle<SVGElement | HTMLElement>, explorerView: TheiaExplorerView);
10
+ absolutePath(): Promise<string | null>;
11
+ isFile(): Promise<boolean>;
12
+ isFolder(): Promise<boolean>;
13
+ getMenuItemByNamePath(names: string[], nodeSegmentLabel?: string): Promise<TheiaMenuItem>;
14
+ }
15
+ export type TheiaExplorerFileStatNodePredicate = (node: TheiaExplorerFileStatNode) => Promise<boolean>;
16
+ export declare const DOT_FILES_FILTER: TheiaExplorerFileStatNodePredicate;
17
+ export declare class TheiaExplorerView extends TheiaView {
18
+ constructor(app: TheiaApp);
19
+ activate(): Promise<void>;
20
+ refresh(): Promise<void>;
21
+ collapseAll(): Promise<void>;
22
+ protected clickButton(id: string): Promise<void>;
23
+ visibleFileStatNodes(filterPredicate?: TheiaExplorerFileStatNodePredicate): Promise<TheiaExplorerFileStatNode[]>;
24
+ getFileStatNodeByLabel(label: string, compact?: boolean): Promise<TheiaExplorerFileStatNode>;
25
+ fileStatNode(filePath: string, compact?: boolean): Promise<TheiaExplorerFileStatNode | undefined>;
26
+ protected fileStatNodeBySegments(...pathFragments: string[]): Promise<TheiaExplorerFileStatNode | undefined>;
27
+ protected compactFileStatNode(path: string): Promise<TheiaExplorerFileStatNode | undefined>;
28
+ selectTreeNode(filePath: string): Promise<void>;
29
+ isTreeNodeSelected(filePath: string): Promise<boolean>;
30
+ protected treeNodeSelector(filePath: string): string;
31
+ protected treeNodeId(filePath: string): string;
32
+ clickContextMenuItem(file: string, path: string[], nodeSegmentLabel?: string): Promise<void>;
33
+ protected existsNode(path: string, isDirectory: boolean, compact?: boolean): Promise<boolean>;
34
+ existsFileNode(path: string): Promise<boolean>;
35
+ existsDirectoryNode(path: string, compact?: boolean): Promise<boolean>;
36
+ waitForTreeNodeVisible(path: string): Promise<void>;
37
+ getNumberOfVisibleNodes(): Promise<number>;
38
+ deleteNode(path: string, confirm?: boolean, nodeSegmentLabel?: string): Promise<void>;
39
+ renameNode(path: string, newName: string, confirm?: boolean, nodeSegmentLabel?: string): Promise<void>;
40
+ waitForVisible(): Promise<void>;
41
+ /**
42
+ * Waits until some non-dot file nodes are visible
43
+ */
44
+ waitForVisibleFileNodes(): Promise<void>;
45
+ waitForFileNodesToIncrease(numberBefore: number): Promise<void>;
46
+ waitForFileNodesToDecrease(numberBefore: number): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=theia-explorer-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-explorer-view.d.ts","sourceRoot":"","sources":["../src/theia-explorer-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.TheiaExplorerView = exports.DOT_FILES_FILTER = exports.TheiaExplorerFileStatNode = void 0;
19
+ const theia_dialog_1 = require("./theia-dialog");
20
+ const theia_rename_dialog_1 = require("./theia-rename-dialog");
21
+ const theia_tree_node_1 = require("./theia-tree-node");
22
+ const theia_view_1 = require("./theia-view");
23
+ const util_1 = require("./util");
24
+ const TheiaExplorerViewData = {
25
+ tabSelector: '#shell-tab-explorer-view-container',
26
+ viewSelector: '#explorer-view-container--files',
27
+ viewName: 'Explorer'
28
+ };
29
+ class TheiaExplorerFileStatNode extends theia_tree_node_1.TheiaTreeNode {
30
+ constructor(elementHandle, explorerView) {
31
+ super(elementHandle, explorerView.app);
32
+ this.elementHandle = elementHandle;
33
+ this.explorerView = explorerView;
34
+ }
35
+ async absolutePath() {
36
+ return this.elementHandle.getAttribute('title');
37
+ }
38
+ async isFile() {
39
+ return !await this.isFolder();
40
+ }
41
+ async isFolder() {
42
+ return (0, util_1.elementContainsClass)(this.elementHandle, 'theia-DirNode');
43
+ }
44
+ async getMenuItemByNamePath(names, nodeSegmentLabel) {
45
+ const contextMenu = nodeSegmentLabel ? await this.openContextMenuOnSegment(nodeSegmentLabel) : await this.openContextMenu();
46
+ const menuItem = await contextMenu.menuItemByNamePath(...names);
47
+ if (!menuItem) {
48
+ throw Error('MenuItem could not be retrieved by path');
49
+ }
50
+ return menuItem;
51
+ }
52
+ }
53
+ exports.TheiaExplorerFileStatNode = TheiaExplorerFileStatNode;
54
+ const DOT_FILES_FILTER = async (node) => {
55
+ const label = await node.label();
56
+ return label ? !label.startsWith('.') : true;
57
+ };
58
+ exports.DOT_FILES_FILTER = DOT_FILES_FILTER;
59
+ class TheiaExplorerView extends theia_view_1.TheiaView {
60
+ constructor(app) {
61
+ super(TheiaExplorerViewData, app);
62
+ }
63
+ async activate() {
64
+ await super.activate();
65
+ const viewElement = await this.viewElement();
66
+ await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.waitForSelector('.theia-TreeContainer'));
67
+ }
68
+ async refresh() {
69
+ await this.clickButton('navigator.refresh');
70
+ }
71
+ async collapseAll() {
72
+ await this.clickButton('navigator.collapse.all');
73
+ }
74
+ async clickButton(id) {
75
+ await this.activate();
76
+ const viewElement = await this.viewElement();
77
+ await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.hover());
78
+ const button = await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.waitForSelector(`#${(0, util_1.normalizeId)(id)}`));
79
+ await (button === null || button === void 0 ? void 0 : button.click());
80
+ }
81
+ async visibleFileStatNodes(filterPredicate = (_ => Promise.resolve(true))) {
82
+ const viewElement = await this.viewElement();
83
+ const handles = await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.$$('.theia-FileStatNode'));
84
+ if (handles) {
85
+ const nodes = handles.map(handle => new TheiaExplorerFileStatNode(handle, this));
86
+ const filteredNodes = [];
87
+ for (const node of nodes) {
88
+ if ((await filterPredicate(node)) === true) {
89
+ filteredNodes.push(node);
90
+ }
91
+ }
92
+ return filteredNodes;
93
+ }
94
+ return [];
95
+ }
96
+ async getFileStatNodeByLabel(label, compact = false) {
97
+ const file = await this.fileStatNode(label, compact);
98
+ if (!file) {
99
+ throw Error('File stat node could not be retrieved by path fragments');
100
+ }
101
+ return file;
102
+ }
103
+ async fileStatNode(filePath, compact = false) {
104
+ return compact ? this.compactFileStatNode(filePath) : this.fileStatNodeBySegments(...filePath.split('/'));
105
+ }
106
+ async fileStatNodeBySegments(...pathFragments) {
107
+ await super.activate();
108
+ const viewElement = await this.viewElement();
109
+ let currentTreeNode = undefined;
110
+ let fragmentsSoFar = '';
111
+ for (let index = 0; index < pathFragments.length; index++) {
112
+ const fragment = pathFragments[index];
113
+ fragmentsSoFar += index !== 0 ? '/' : '';
114
+ fragmentsSoFar += fragment;
115
+ const selector = this.treeNodeSelector(fragmentsSoFar);
116
+ const nextTreeNode = await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.waitForSelector(selector, { state: 'visible' }));
117
+ if (!nextTreeNode) {
118
+ throw new Error(`Tree node '${selector}' not found in explorer`);
119
+ }
120
+ currentTreeNode = new TheiaExplorerFileStatNode(nextTreeNode, this);
121
+ if (index < pathFragments.length - 1 && await currentTreeNode.isCollapsed()) {
122
+ await currentTreeNode.expand();
123
+ }
124
+ }
125
+ return currentTreeNode;
126
+ }
127
+ async compactFileStatNode(path) {
128
+ // default setting `explorer.compactFolders=true` renders folders in a compact form - single child folders will be compressed in a combined tree element
129
+ await super.activate();
130
+ const viewElement = await this.viewElement();
131
+ // check if first segment folder needs to be expanded first (if folder has never been expanded, it will not show the compact folder structure)
132
+ await this.waitForVisibleFileNodes();
133
+ const firstSegment = path.split('/')[0];
134
+ const selector = this.treeNodeSelector(firstSegment);
135
+ const folderElement = await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.$(selector));
136
+ if (folderElement && await folderElement.isVisible()) {
137
+ const folderNode = await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.waitForSelector(selector, { state: 'visible' }));
138
+ if (!folderNode) {
139
+ throw new Error(`Tree node '${selector}' not found in explorer`);
140
+ }
141
+ const folderFileStatNode = new TheiaExplorerFileStatNode(folderNode, this);
142
+ if (await folderFileStatNode.isCollapsed()) {
143
+ await folderFileStatNode.expand();
144
+ }
145
+ }
146
+ // now get tree node via the full path
147
+ const fullPathSelector = this.treeNodeSelector(path);
148
+ const treeNode = await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.waitForSelector(fullPathSelector, { state: 'visible' }));
149
+ if (!treeNode) {
150
+ throw new Error(`Tree node '${fullPathSelector}' not found in explorer`);
151
+ }
152
+ return new TheiaExplorerFileStatNode(treeNode, this);
153
+ }
154
+ async selectTreeNode(filePath) {
155
+ await this.activate();
156
+ const treeNode = await this.page.waitForSelector(this.treeNodeSelector(filePath));
157
+ if (await this.isTreeNodeSelected(filePath)) {
158
+ await treeNode.focus();
159
+ }
160
+ else {
161
+ await treeNode.click({ modifiers: [util_1.OSUtil.isMacOS ? 'Meta' : 'Control'] });
162
+ // make sure the click has been acted-upon before returning
163
+ while (!await this.isTreeNodeSelected(filePath)) {
164
+ console.debug('Waiting for clicked tree node to be selected: ' + filePath);
165
+ }
166
+ }
167
+ await this.page.waitForSelector(this.treeNodeSelector(filePath) + '.theia-mod-selected');
168
+ }
169
+ async isTreeNodeSelected(filePath) {
170
+ const treeNode = await this.page.waitForSelector(this.treeNodeSelector(filePath));
171
+ return (0, util_1.elementContainsClass)(treeNode, 'theia-mod-selected');
172
+ }
173
+ treeNodeSelector(filePath) {
174
+ return `.theia-FileStatNode:has(#${(0, util_1.normalizeId)(this.treeNodeId(filePath))})`;
175
+ }
176
+ treeNodeId(filePath) {
177
+ const workspacePath = this.app.workspace.pathAsPathComponent;
178
+ const nodeId = `${workspacePath}:${workspacePath}/${filePath}`;
179
+ if (util_1.OSUtil.isWindows) {
180
+ return nodeId.replace('\\', '/');
181
+ }
182
+ return nodeId;
183
+ }
184
+ async clickContextMenuItem(file, path, nodeSegmentLabel) {
185
+ await this.activate();
186
+ const fileStatNode = await this.fileStatNode(file, !!nodeSegmentLabel);
187
+ if (!fileStatNode) {
188
+ throw Error('File stat node could not be retrieved by path fragments');
189
+ }
190
+ const menuItem = await fileStatNode.getMenuItemByNamePath(path, nodeSegmentLabel);
191
+ await menuItem.click();
192
+ }
193
+ async existsNode(path, isDirectory, compact = false) {
194
+ const fileStatNode = await this.fileStatNode(path, compact);
195
+ if (!fileStatNode) {
196
+ return false;
197
+ }
198
+ if (isDirectory) {
199
+ if (!await fileStatNode.isFolder()) {
200
+ throw Error(`FileStatNode for '${path}' is not a directory!`);
201
+ }
202
+ }
203
+ else {
204
+ if (!await fileStatNode.isFile()) {
205
+ throw Error(`FileStatNode for '${path}' is not a file!`);
206
+ }
207
+ }
208
+ return true;
209
+ }
210
+ async existsFileNode(path) {
211
+ return this.existsNode(path, false);
212
+ }
213
+ async existsDirectoryNode(path, compact = false) {
214
+ return this.existsNode(path, true, compact);
215
+ }
216
+ async waitForTreeNodeVisible(path) {
217
+ // wait for tree node to be visible, e.g. after triggering create
218
+ const viewElement = await this.viewElement();
219
+ await (viewElement === null || viewElement === void 0 ? void 0 : viewElement.waitForSelector(this.treeNodeSelector(path), { state: 'visible' }));
220
+ }
221
+ async getNumberOfVisibleNodes() {
222
+ await this.activate();
223
+ await this.refresh();
224
+ const fileStatElements = await this.visibleFileStatNodes(exports.DOT_FILES_FILTER);
225
+ return fileStatElements.length;
226
+ }
227
+ async deleteNode(path, confirm = true, nodeSegmentLabel) {
228
+ await this.activate();
229
+ await this.clickContextMenuItem(path, ['Delete'], nodeSegmentLabel);
230
+ const confirmDialog = new theia_dialog_1.TheiaDialog(this.app);
231
+ await confirmDialog.waitForVisible();
232
+ confirm ? await confirmDialog.clickMainButton() : await confirmDialog.clickSecondaryButton();
233
+ await confirmDialog.waitForClosed();
234
+ }
235
+ async renameNode(path, newName, confirm = true, nodeSegmentLabel) {
236
+ await this.activate();
237
+ await this.clickContextMenuItem(path, ['Rename'], nodeSegmentLabel);
238
+ const renameDialog = new theia_rename_dialog_1.TheiaRenameDialog(this.app);
239
+ await renameDialog.waitForVisible();
240
+ await renameDialog.enterNewName(newName);
241
+ await renameDialog.waitUntilMainButtonIsEnabled();
242
+ confirm ? await renameDialog.confirm() : await renameDialog.close();
243
+ await renameDialog.waitForClosed();
244
+ await this.refresh();
245
+ }
246
+ async waitForVisible() {
247
+ await super.waitForVisible();
248
+ await this.page.waitForSelector(this.tabSelector, { state: 'visible' });
249
+ }
250
+ /**
251
+ * Waits until some non-dot file nodes are visible
252
+ */
253
+ async waitForVisibleFileNodes() {
254
+ while ((await this.visibleFileStatNodes(exports.DOT_FILES_FILTER)).length === 0) {
255
+ console.debug('Awaiting for tree nodes to appear');
256
+ }
257
+ }
258
+ async waitForFileNodesToIncrease(numberBefore) {
259
+ const fileStatNodesSelector = `${this.viewSelector} .theia-FileStatNode`;
260
+ await this.page.waitForFunction((predicate) => {
261
+ const elements = document.querySelectorAll(predicate.selector);
262
+ return !!elements && elements.length > predicate.numberBefore;
263
+ }, { selector: fileStatNodesSelector, numberBefore });
264
+ }
265
+ async waitForFileNodesToDecrease(numberBefore) {
266
+ const fileStatNodesSelector = `${this.viewSelector} .theia-FileStatNode`;
267
+ await this.page.waitForFunction((predicate) => {
268
+ const elements = document.querySelectorAll(predicate.selector);
269
+ return !!elements && elements.length < predicate.numberBefore;
270
+ }, { selector: fileStatNodesSelector, numberBefore });
271
+ }
272
+ }
273
+ exports.TheiaExplorerView = TheiaExplorerView;
274
+ //# sourceMappingURL=theia-explorer-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theia-explorer-view.js","sourceRoot":"","sources":["../src/theia-explorer-view.ts"],"names":[],"mappings":"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"}