@opensumi/playwright 2.21.13 → 2.22.0

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 (155) hide show
  1. package/lib/app.d.ts +2 -1
  2. package/lib/app.d.ts.map +1 -1
  3. package/lib/app.js +21 -9
  4. package/lib/app.js.map +1 -1
  5. package/lib/component-editor.d.ts +2 -2
  6. package/lib/debug-view.d.ts +10 -0
  7. package/lib/debug-view.d.ts.map +1 -1
  8. package/lib/debug-view.js +41 -1
  9. package/lib/debug-view.js.map +1 -1
  10. package/lib/diff-editor.d.ts +4 -0
  11. package/lib/diff-editor.d.ts.map +1 -0
  12. package/lib/diff-editor.js +8 -0
  13. package/lib/diff-editor.js.map +1 -0
  14. package/lib/editor.d.ts +6 -5
  15. package/lib/editor.d.ts.map +1 -1
  16. package/lib/editor.js +6 -2
  17. package/lib/editor.js.map +1 -1
  18. package/lib/explorer-view.d.ts +4 -0
  19. package/lib/explorer-view.d.ts.map +1 -1
  20. package/lib/explorer-view.js +36 -10
  21. package/lib/explorer-view.js.map +1 -1
  22. package/lib/filetree-view.d.ts +1 -1
  23. package/lib/filetree-view.js +2 -2
  24. package/lib/filetree-view.js.map +1 -1
  25. package/lib/index.d.ts +2 -1
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +2 -1
  28. package/lib/index.js.map +1 -1
  29. package/lib/menu.d.ts +1 -1
  30. package/lib/opened-editor-view.d.ts +2 -2
  31. package/lib/opened-editor-view.d.ts.map +1 -1
  32. package/lib/opened-editor-view.js +4 -4
  33. package/lib/opened-editor-view.js.map +1 -1
  34. package/lib/outline-view.d.ts +9 -0
  35. package/lib/outline-view.d.ts.map +1 -0
  36. package/lib/outline-view.js +38 -0
  37. package/lib/outline-view.js.map +1 -0
  38. package/lib/output-view.d.ts +10 -0
  39. package/lib/output-view.d.ts.map +1 -0
  40. package/lib/output-view.js +78 -0
  41. package/lib/output-view.js.map +1 -0
  42. package/lib/panel.js +2 -2
  43. package/lib/panel.js.map +1 -1
  44. package/lib/scm-view.d.ts +21 -0
  45. package/lib/scm-view.d.ts.map +1 -0
  46. package/lib/scm-view.js +65 -0
  47. package/lib/scm-view.js.map +1 -0
  48. package/lib/search-view.d.ts +34 -0
  49. package/lib/search-view.d.ts.map +1 -1
  50. package/lib/search-view.js +196 -4
  51. package/lib/search-view.js.map +1 -1
  52. package/lib/source-control-view.d.ts +8 -0
  53. package/lib/source-control-view.d.ts.map +1 -0
  54. package/lib/source-control-view.js +45 -0
  55. package/lib/source-control-view.js.map +1 -0
  56. package/lib/terminal-view.d.ts +10 -0
  57. package/lib/terminal-view.d.ts.map +1 -0
  58. package/lib/terminal-view.js +50 -0
  59. package/lib/terminal-view.js.map +1 -0
  60. package/lib/tests/debug.test.js +49 -0
  61. package/lib/tests/debug.test.js.map +1 -1
  62. package/lib/tests/editor/undoRedo.test.d.ts +2 -0
  63. package/lib/tests/editor/undoRedo.test.d.ts.map +1 -0
  64. package/lib/tests/editor/undoRedo.test.js +52 -0
  65. package/lib/tests/editor/undoRedo.test.js.map +1 -0
  66. package/lib/tests/editor.test.js +0 -2
  67. package/lib/tests/editor.test.js.map +1 -1
  68. package/lib/tests/explorer-view.test.js +129 -5
  69. package/lib/tests/explorer-view.test.js.map +1 -1
  70. package/lib/tests/output.test.d.ts +2 -0
  71. package/lib/tests/output.test.d.ts.map +1 -0
  72. package/lib/tests/output.test.js +76 -0
  73. package/lib/tests/output.test.js.map +1 -0
  74. package/lib/tests/scm.test.js +42 -4
  75. package/lib/tests/scm.test.js.map +1 -1
  76. package/lib/tests/search-view.test.js +191 -8
  77. package/lib/tests/search-view.test.js.map +1 -1
  78. package/lib/tests/settings.test.d.ts +2 -0
  79. package/lib/tests/settings.test.d.ts.map +1 -0
  80. package/lib/tests/settings.test.js +95 -0
  81. package/lib/tests/settings.test.js.map +1 -0
  82. package/lib/text-editor.d.ts +7 -3
  83. package/lib/text-editor.d.ts.map +1 -1
  84. package/lib/text-editor.js +15 -0
  85. package/lib/text-editor.js.map +1 -1
  86. package/lib/tree-node.d.ts +3 -1
  87. package/lib/tree-node.d.ts.map +1 -1
  88. package/lib/tree-node.js +4 -4
  89. package/lib/tree-node.js.map +1 -1
  90. package/lib/utils/key.d.ts +1 -0
  91. package/lib/utils/key.d.ts.map +1 -1
  92. package/lib/utils/key.js +6 -1
  93. package/lib/utils/key.js.map +1 -1
  94. package/lib/view.js +1 -1
  95. package/lib/view.js.map +1 -1
  96. package/package.json +12 -11
  97. package/src/app.ts +148 -0
  98. package/src/component-editor.ts +64 -0
  99. package/src/constans/index.ts +18 -0
  100. package/src/context-menu.ts +27 -0
  101. package/src/debug-view.ts +73 -0
  102. package/src/diff-editor.ts +3 -0
  103. package/src/editor.ts +135 -0
  104. package/src/explorer-view.ts +149 -0
  105. package/src/filetree-view.ts +28 -0
  106. package/src/index.ts +20 -0
  107. package/src/menu-item.ts +40 -0
  108. package/src/menu.ts +69 -0
  109. package/src/menubar.ts +53 -0
  110. package/src/opened-editor-view.ts +28 -0
  111. package/src/outline-view.ts +37 -0
  112. package/src/output-view.ts +76 -0
  113. package/src/panel.ts +50 -0
  114. package/src/quick-command-palette.ts +62 -0
  115. package/src/quick-open-palette.ts +62 -0
  116. package/src/scm-view.ts +72 -0
  117. package/src/search-view.ts +260 -0
  118. package/src/source-control-view.ts +44 -0
  119. package/src/terminal-view.ts +50 -0
  120. package/src/tests/app.test.ts +16 -0
  121. package/src/tests/debug.test.ts +121 -0
  122. package/src/tests/editor/undoRedo.test.ts +55 -0
  123. package/src/tests/editor.test.ts +141 -0
  124. package/src/tests/explorer-view.test.ts +329 -0
  125. package/src/tests/hooks/index.ts +13 -0
  126. package/src/tests/keymaps.test.ts +118 -0
  127. package/src/tests/language.test.ts +55 -0
  128. package/src/tests/output.test.ts +87 -0
  129. package/src/tests/scm.test.ts +84 -0
  130. package/src/tests/search-view.test.ts +239 -0
  131. package/src/tests/settings.test.ts +115 -0
  132. package/src/tests/workspaces/debug/.sumi/launch.json +15 -0
  133. package/src/tests/workspaces/debug/index.js +18 -0
  134. package/src/tests/workspaces/default/editor-undo-redo.text +0 -0
  135. package/src/tests/workspaces/default/editor.js +0 -0
  136. package/src/tests/workspaces/default/editor2.js +87 -0
  137. package/src/tests/workspaces/default/editor3.js +0 -0
  138. package/src/tests/workspaces/default/test/test.js +1 -0
  139. package/src/tests/workspaces/git-workspace/a.js +0 -0
  140. package/src/tests/workspaces/language/definition.ts +12 -0
  141. package/src/tests/workspaces/language/reference.ts +9 -0
  142. package/src/tests/workspaces/search/index.js +5 -0
  143. package/src/tests/workspaces/search/index2.js +1 -0
  144. package/src/text-editor.ts +333 -0
  145. package/src/tree-node.ts +98 -0
  146. package/src/utils/element.ts +35 -0
  147. package/src/utils/index.ts +2 -0
  148. package/src/utils/key.ts +11 -0
  149. package/src/view-base.ts +11 -0
  150. package/src/view.ts +90 -0
  151. package/src/workspace.ts +36 -0
  152. package/lib/terminal.d.ts +0 -7
  153. package/lib/terminal.d.ts.map +0 -1
  154. package/lib/terminal.js +0 -25
  155. package/lib/terminal.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../src/tree-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-node.js","sourceRoot":"","sources":["../src/tree-node.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export declare const keypressWithCmdCtrl: (key: string) => string;
2
+ export declare const keypressWithCmdCtrlAndShift: (key: string) => string;
2
3
  //# sourceMappingURL=key.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/utils/key.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,QAAS,MAAM,WAG9C,CAAC"}
1
+ {"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/utils/key.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,QAAS,MAAM,WAG9C,CAAC;AAEF,eAAO,MAAM,2BAA2B,QAAS,MAAM,WAGtD,CAAC"}
package/lib/utils/key.js CHANGED
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.keypressWithCmdCtrl = void 0;
3
+ exports.keypressWithCmdCtrlAndShift = exports.keypressWithCmdCtrl = void 0;
4
4
  const ide_utils_1 = require("@opensumi/ide-utils");
5
5
  const keypressWithCmdCtrl = (key) => {
6
6
  const modifier = ide_utils_1.isMacintosh ? 'Meta' : ide_utils_1.isWindows ? 'Ctrl' : 'Control';
7
7
  return `${modifier}+${key}`;
8
8
  };
9
9
  exports.keypressWithCmdCtrl = keypressWithCmdCtrl;
10
+ const keypressWithCmdCtrlAndShift = (key) => {
11
+ const modifier = ide_utils_1.isMacintosh ? 'Meta' : ide_utils_1.isWindows ? 'Ctrl' : 'Control';
12
+ return `${modifier}+Shift+${key}`;
13
+ };
14
+ exports.keypressWithCmdCtrlAndShift = keypressWithCmdCtrlAndShift;
10
15
  //# sourceMappingURL=key.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/utils/key.ts"],"names":[],"mappings":";;;AAAA,mDAA6D;AAEtD,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,EAAE;IACjD,MAAM,QAAQ,GAAG,uBAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,OAAO,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;AAC9B,CAAC,CAAC;AAHW,QAAA,mBAAmB,uBAG9B"}
1
+ {"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/utils/key.ts"],"names":[],"mappings":";;;AAAA,mDAA6D;AAEtD,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,EAAE;IACjD,MAAM,QAAQ,GAAG,uBAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,OAAO,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;AAC9B,CAAC,CAAC;AAHW,QAAA,mBAAmB,uBAG9B;AAEK,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAE,EAAE;IACzD,MAAM,QAAQ,GAAG,uBAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,OAAO,GAAG,QAAQ,UAAU,GAAG,EAAE,CAAC;AACpC,CAAC,CAAC;AAHW,QAAA,2BAA2B,+BAGtC"}
package/lib/view.js CHANGED
@@ -28,7 +28,7 @@ class OpenSumiView extends view_base_1.OpenSumiViewBase {
28
28
  return;
29
29
  }
30
30
  await this.app.quickOpenPalette.type('view ');
31
- await this.app.quickOpenPalette.trigger(this.name);
31
+ await this.app.quickOpenPalette.trigger(this.name.toUpperCase());
32
32
  await this.waitForVisible();
33
33
  return this;
34
34
  }
package/lib/view.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":";;;AAGA,mCAA0D;AAC1D,2CAA+C;AAQ/C,MAAa,YAAa,SAAQ,4BAAgB;IAChD,YAAY,GAAgB,EAAmB,IAAsB;QACnE,KAAK,CAAC,GAAG,CAAC,CAAC;QADkC,SAAI,GAAJ,IAAI,CAAkB;IAErE,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,OAAO;SACR;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACzC,MAAM,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,CAAA,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,EAAE,CAAA,CAAC;SACpB;QACD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAA,wBAAgB,EAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAA,wBAAgB,EAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAA,qBAAa,EAAC,IAAI,CAAC,aAAa,EAAE,EAAE,eAAe,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAA,qBAAa,EAAC,IAAI,CAAC,aAAa,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,eAAe;QAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF;AA7ED,oCA6EC"}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@opensumi/playwright",
3
- "version": "2.21.13",
3
+ "version": "2.22.0",
4
4
  "description": "E2E test module for OpenSumi",
5
5
  "files": [
6
- "lib"
6
+ "lib",
7
+ "src"
7
8
  ],
8
9
  "license": "MIT",
9
10
  "main": "lib/index.js",
@@ -16,22 +17,22 @@
16
17
  "url": "git@github.com:opensumi/core.git"
17
18
  },
18
19
  "scripts": {
19
- "prepublishOnly": "npm run build",
20
+ "prepublishOnly": "yarn run build",
20
21
  "build": "tsc --build ../../configs/ts/references/tsconfig.playwright.json && npx playwright install chromium",
21
- "ui-tests": "npm run build && playwright test --config=./configs/playwright.config.ts",
22
- "ui-tests-ci": "npm run build && playwright test --config=./configs/playwright.ci.config.ts",
23
- "ui-tests-headful": "npm run build && playwright test --config=./configs/playwright.headful.config.ts",
22
+ "ui-tests": "yarn run build && playwright test --config=./configs/playwright.config.ts",
23
+ "ui-tests-ci": "yarn run build && playwright test --config=./configs/playwright.ci.config.ts",
24
+ "ui-tests-headful": "yarn run build && playwright test --config=./configs/playwright.headful.config.ts",
24
25
  "ui-tests-report-generate": "allure generate ./allure-results --clean -o allure-results/allure-report",
25
- "ui-tests-report": "npm run build ui-tests-report-generate && allure open allure-results/allure-report"
26
+ "ui-tests-report": "yarn run build ui-tests-report-generate && allure open allure-results/allure-report"
26
27
  },
27
28
  "dependencies": {
28
- "@playwright/test": "1.22.2"
29
+ "@playwright/test": "1.29.1"
29
30
  },
30
31
  "devDependencies": {
31
- "@opensumi/ide-utils": "2.21.13",
32
+ "@opensumi/ide-utils": "2.22.0",
32
33
  "allure-commandline": "^2.13.8",
33
34
  "allure-playwright": "^2.0.0-beta.14",
34
- "typescript": "4.6.4"
35
+ "typescript": "4.9.3"
35
36
  },
36
- "gitHead": "1480afacfef7ef11eae65c5cbbddce416f227fe8"
37
+ "gitHead": "927717e1c60f9cf5f01622fd51085b318a175eeb"
37
38
  }
package/src/app.ts ADDED
@@ -0,0 +1,148 @@
1
+ import { ElementHandle, Page } from '@playwright/test';
2
+
3
+ import { Disposable } from '@opensumi/ide-utils';
4
+
5
+ import { IComponentEditorInfo } from './component-editor';
6
+ import { OpenSumiEditor } from './editor';
7
+ import { OpenSumiExplorerView } from './explorer-view';
8
+ import { OpenSumiMenubar } from './menubar';
9
+ import { OpenSumiPanel } from './panel';
10
+ import { OpenSumiCommandPalette } from './quick-command-palette';
11
+ import { OpenSumiQuickOpenPalette } from './quick-open-palette';
12
+ import { OpenSumiTreeNode } from './tree-node';
13
+ import { OpenSumiWorkspace } from './workspace';
14
+
15
+ export interface AppData {
16
+ loadingSelector: string;
17
+ mainSelector: string;
18
+ }
19
+
20
+ export const DefaultAppData: AppData = {
21
+ loadingSelector: '.loading_indicator',
22
+ mainSelector: '#main',
23
+ };
24
+
25
+ export class OpenSumiApp extends Disposable {
26
+ private _loaded = false;
27
+ private _quickCommandPalette: OpenSumiCommandPalette;
28
+ private _quickOpenPalette: OpenSumiQuickOpenPalette;
29
+ private _menubar: OpenSumiMenubar;
30
+
31
+ static async load(page: Page, workspace: OpenSumiWorkspace): Promise<OpenSumiApp> {
32
+ return this.loadApp(page, workspace, OpenSumiApp);
33
+ }
34
+
35
+ static async loadApp<T extends OpenSumiApp>(
36
+ page: Page,
37
+ workspace: OpenSumiWorkspace,
38
+ appFactory: new (page: Page) => T,
39
+ ): Promise<T> {
40
+ await workspace.initWorksapce();
41
+ const app = new appFactory(page);
42
+ await app.load(workspace);
43
+ return app;
44
+ }
45
+
46
+ public constructor(public page: Page, protected appData = DefaultAppData) {
47
+ super();
48
+ this._quickCommandPalette = new OpenSumiCommandPalette(this);
49
+ this._quickOpenPalette = new OpenSumiQuickOpenPalette(this);
50
+ this._menubar = new OpenSumiMenubar(this);
51
+ }
52
+
53
+ get quickCommandPalette() {
54
+ return this._quickCommandPalette;
55
+ }
56
+
57
+ get quickOpenPalette() {
58
+ return this._quickOpenPalette;
59
+ }
60
+
61
+ get menubar() {
62
+ return this._menubar;
63
+ }
64
+
65
+ protected async load(workspace: OpenSumiWorkspace): Promise<void> {
66
+ this.disposables.push(workspace);
67
+ const now = Date.now();
68
+ await this.loadOrReload(this.page, `/#${workspace.workspace.codeUri.fsPath}`);
69
+ await this.page.waitForSelector(this.appData.loadingSelector, { state: 'detached' });
70
+ const time = Date.now() - now;
71
+ // eslint-disable-next-line no-console
72
+ console.log(`Loading page cost ${time} ms`);
73
+ await this.page.waitForSelector(this.appData.mainSelector);
74
+ await this.waitForInitialized();
75
+ }
76
+
77
+ protected async loadOrReload(page: Page, url = '/') {
78
+ if (!this._loaded) {
79
+ const wasLoadedAlready = await page.isVisible(this.appData.mainSelector);
80
+ await page.goto(url);
81
+ if (wasLoadedAlready) {
82
+ await page.reload();
83
+ }
84
+ this._loaded = true;
85
+ } else {
86
+ await page.reload();
87
+ }
88
+ }
89
+
90
+ async isMainLayoutVisible(): Promise<boolean> {
91
+ const contentPanel = await this.page.$('#main');
92
+ return !!contentPanel && contentPanel.isVisible();
93
+ }
94
+
95
+ async open<T extends OpenSumiPanel>(PanelConstruction: new (app: OpenSumiApp) => T) {
96
+ const panel = new PanelConstruction(this);
97
+ if (await panel.isVisible()) {
98
+ return panel;
99
+ }
100
+ await panel.open();
101
+ return panel;
102
+ }
103
+
104
+ async openEditor<T extends OpenSumiEditor>(
105
+ EditorConstruction: new (app: OpenSumiApp, element?: OpenSumiTreeNode) => T,
106
+ explorer: OpenSumiExplorerView,
107
+ filePath: string,
108
+ preview = true,
109
+ ) {
110
+ const node = await explorer.getFileStatTreeNodeByPath(filePath);
111
+ if (!node || (await node?.isFolder())) {
112
+ throw Error(`File ${filePath} could not be opened on the editor`);
113
+ }
114
+ const editor = new EditorConstruction(this, node);
115
+ await editor.open(preview);
116
+ return editor;
117
+ }
118
+
119
+ // use for component editors
120
+ async openComponentEditor<T extends OpenSumiEditor>(
121
+ EditorConstruction: new (app: OpenSumiApp, info: IComponentEditorInfo) => T,
122
+ path: string,
123
+ name: string,
124
+ containerSelector: string,
125
+ ) {
126
+ const editor = new EditorConstruction(this, { path, name, containerSelector });
127
+ await editor.open();
128
+ return editor;
129
+ }
130
+
131
+ async getDialogButton(value: string): Promise<ElementHandle<SVGElement | HTMLElement> | void> {
132
+ const buttonWrapper = await this.page.$('.kt-dialog-buttonWrap');
133
+ const buttons = await buttonWrapper?.$$('.kt-button');
134
+ if (buttons) {
135
+ for (const button of buttons) {
136
+ const text = await button.textContent();
137
+ if (text === value) {
138
+ return button;
139
+ }
140
+ }
141
+ }
142
+ }
143
+
144
+ async waitForInitialized(): Promise<void> {
145
+ // custom app initialize process.
146
+ // empty by default
147
+ }
148
+ }
@@ -0,0 +1,64 @@
1
+ import { OpenSumiApp } from './app';
2
+ import { OpenSumiContextMenu } from './context-menu';
3
+ import { OpenSumiEditor } from './editor';
4
+ import { isElementVisible } from './utils';
5
+
6
+ export interface IComponentEditorInfo {
7
+ path: string;
8
+ name: string;
9
+ containerSelector: string;
10
+ }
11
+
12
+ export class OpenSumiComponentEditor extends OpenSumiEditor {
13
+ constructor(app: OpenSumiApp, private readonly info: IComponentEditorInfo) {
14
+ super(app);
15
+ }
16
+
17
+ async openTabContextMenu() {
18
+ const view = await this.getTab();
19
+ if (!view) {
20
+ return;
21
+ }
22
+ return OpenSumiContextMenu.open(this.app, async () => view);
23
+ }
24
+
25
+ async close() {
26
+ const contextMenu = await this.openTabContextMenu();
27
+ await contextMenu?.isOpen();
28
+ const close = await contextMenu?.menuItemByName('Close');
29
+ await close?.click();
30
+ }
31
+
32
+ async getTab() {
33
+ const tabsItems = await (await this.getTabElement())?.$$("[class*='kt_editor_tab___']");
34
+
35
+ if (!tabsItems) {
36
+ return;
37
+ }
38
+
39
+ for (const item of tabsItems) {
40
+ const uri = await item.getAttribute('data-uri');
41
+ if (uri?.includes(this.info.path)) {
42
+ return item;
43
+ }
44
+ }
45
+ }
46
+
47
+ async getContainer() {
48
+ return await super.getContainer(this.info.containerSelector);
49
+ }
50
+
51
+ async isVisible() {
52
+ const container = await this.getContainer();
53
+ if (!container) {
54
+ return false;
55
+ }
56
+ return await isElementVisible(Promise.resolve(container));
57
+ }
58
+
59
+ async open() {
60
+ const tab = await this.getTab();
61
+ await tab?.click();
62
+ return this;
63
+ }
64
+ }
@@ -0,0 +1,18 @@
1
+ const VIEW_CONTAINERS_PREFIX = 'opensumi';
2
+
3
+ export namespace OPENSUMI_VIEW_CONTAINERS {
4
+ export const LEFT_TABBAR_PANEL = `${VIEW_CONTAINERS_PREFIX}-left-tabbar-panel`;
5
+ export const LEFT_TABBAR = `${VIEW_CONTAINERS_PREFIX}-left-tabbar`;
6
+ export const RIGHT_TABBAR_PANEL = `${VIEW_CONTAINERS_PREFIX}-right-tabbar-panel`;
7
+ export const RIGHT_TABBAR = `${VIEW_CONTAINERS_PREFIX}-right-tabbar`;
8
+ export const BOTTOM_TABBAR = `${VIEW_CONTAINERS_PREFIX}-bottom-tabbar`;
9
+ export const BOTTOM_TABBAR_PANEL = `${VIEW_CONTAINERS_PREFIX}-bottom-tabbar-panel`;
10
+ export const STATUSBAR = `${VIEW_CONTAINERS_PREFIX}-statusbar`;
11
+ export const MENUBAR = `${VIEW_CONTAINERS_PREFIX}-menubar`;
12
+ export const EDITOR = `${VIEW_CONTAINERS_PREFIX}-editor`;
13
+ export const EDITOR_TABS = `${VIEW_CONTAINERS_PREFIX}-editor-tabs`;
14
+ export const QUICKPICK = `${VIEW_CONTAINERS_PREFIX}-quickpick`;
15
+ export const QUICKPICK_INPUT = `${VIEW_CONTAINERS_PREFIX}-quickpick-input`;
16
+ export const QUICKPICK_TABS = `${VIEW_CONTAINERS_PREFIX}-quickpick-tabs`;
17
+ export const QUICKPICK_ITEM = `${VIEW_CONTAINERS_PREFIX}-quickpick-item`;
18
+ }
@@ -0,0 +1,27 @@
1
+ import { ElementHandle } from '@playwright/test';
2
+
3
+ import { OpenSumiApp } from './app';
4
+ import { OpenSumiMenu } from './menu';
5
+
6
+ export class OpenSumiContextMenu extends OpenSumiMenu {
7
+ public static async openAt(app: OpenSumiApp, x: number, y: number): Promise<OpenSumiContextMenu> {
8
+ await app.page.mouse.move(x, y);
9
+ await app.page.mouse.click(x, y, { button: 'right' });
10
+ return OpenSumiContextMenu.returnWhenVisible(app);
11
+ }
12
+
13
+ public static async open(
14
+ app: OpenSumiApp,
15
+ element: () => Promise<ElementHandle<SVGElement | HTMLElement>>,
16
+ ): Promise<OpenSumiContextMenu> {
17
+ const elementHandle = await element();
18
+ await elementHandle.click({ button: 'right' });
19
+ return OpenSumiContextMenu.returnWhenVisible(app);
20
+ }
21
+
22
+ private static async returnWhenVisible(app: OpenSumiApp): Promise<OpenSumiContextMenu> {
23
+ const menu = new OpenSumiContextMenu(app);
24
+ await menu.waitForVisible();
25
+ return menu;
26
+ }
27
+ }
@@ -0,0 +1,73 @@
1
+ import { OpenSumiApp } from './app';
2
+ import { OpenSumiPanel } from './panel';
3
+
4
+ type DebugToolbarActionType = 'Continue' | 'Step Over' | 'Step Into' | 'Step Out' | 'Restart' | 'Stop';
5
+ export class OpenSumiDebugView extends OpenSumiPanel {
6
+ private selector = {
7
+ toolbarClass: "[class*='debug_configuration_toolbar___']",
8
+ actionStartID: "[id='debug.action.start']",
9
+ };
10
+
11
+ constructor(app: OpenSumiApp) {
12
+ super(app, 'DEBUG');
13
+ }
14
+
15
+ async getDebugToolbar() {
16
+ return this.page.$('[class*="debug_toolbar_wrapper__"]');
17
+ }
18
+
19
+ async start(): Promise<void> {
20
+ const toolbarLocator = this.app.page.locator(this.selector.toolbarClass);
21
+ if (!toolbarLocator) {
22
+ return;
23
+ }
24
+
25
+ const element = await toolbarLocator.elementHandle();
26
+ const startIcon = await element?.$(this.selector.actionStartID);
27
+ await startIcon?.click();
28
+ }
29
+
30
+ async getToobarAction(action: DebugToolbarActionType) {
31
+ const toolbar = await this.getDebugToolbar();
32
+ const buttons = await toolbar?.$$('[class*="debug_action__"]');
33
+ if (!buttons) {
34
+ return;
35
+ }
36
+ for (const button of buttons) {
37
+ const title = await button.getAttribute('title');
38
+ if (title === action) {
39
+ return button;
40
+ }
41
+ }
42
+ }
43
+
44
+ async stop() {
45
+ const action = await this.getToobarAction('Stop');
46
+ await action?.click();
47
+ }
48
+
49
+ async continue() {
50
+ const action = await this.getToobarAction('Continue');
51
+ await action?.click();
52
+ }
53
+
54
+ async restart() {
55
+ const action = await this.getToobarAction('Restart');
56
+ await action?.click();
57
+ }
58
+
59
+ async stepInto() {
60
+ const action = await this.getToobarAction('Step Into');
61
+ await action?.click();
62
+ }
63
+
64
+ async stepOver() {
65
+ const action = await this.getToobarAction('Step Over');
66
+ await action?.click();
67
+ }
68
+
69
+ async stepOut() {
70
+ const action = await this.getToobarAction('Step Out');
71
+ await action?.click();
72
+ }
73
+ }
@@ -0,0 +1,3 @@
1
+ import { OpenSumiTextEditor } from './text-editor';
2
+
3
+ export class OpenSumiDiffEditor extends OpenSumiTextEditor {}
package/src/editor.ts ADDED
@@ -0,0 +1,135 @@
1
+ import { OpenSumiApp } from './app';
2
+ import { OPENSUMI_VIEW_CONTAINERS } from './constans';
3
+ import { OpenSumiTreeNode } from './tree-node';
4
+ import { OpenSumiView } from './view';
5
+
6
+ export class OpenSumiEditor extends OpenSumiView {
7
+ constructor(app: OpenSumiApp, private readonly filestatElement?: OpenSumiTreeNode) {
8
+ super(app, {
9
+ tabSelector: `#${OPENSUMI_VIEW_CONTAINERS.EDITOR_TABS}`,
10
+ viewSelector: `#${OPENSUMI_VIEW_CONTAINERS.EDITOR}`,
11
+ name: 'Editor',
12
+ });
13
+ }
14
+
15
+ async getTab() {
16
+ const path = (await this.filestatElement?.getFsPath()) || '';
17
+ const tabsItems = await (await this.getTabElement())?.$$("[class*='kt_editor_tab___']");
18
+
19
+ if (!tabsItems) {
20
+ return;
21
+ }
22
+
23
+ for (const item of tabsItems) {
24
+ const uri = await item.getAttribute('data-uri');
25
+ if (uri?.includes(path)) {
26
+ return item;
27
+ }
28
+ }
29
+ }
30
+
31
+ async getContainer(selector?: string) {
32
+ if (!selector) {
33
+ return;
34
+ }
35
+ const container = await (await this.getViewElement())?.$(selector);
36
+ return container;
37
+ }
38
+
39
+ async getCurrentTab() {
40
+ return await (await this.getTabElement())?.waitForSelector("[class*='kt_editor_tab_current___']");
41
+ }
42
+
43
+ async open(preview?: boolean) {
44
+ await this.filestatElement?.open(preview);
45
+ // waiting editor render, it maybe fail while opening a large file.
46
+ await this.app.page.waitForTimeout(1000);
47
+ return this;
48
+ }
49
+
50
+ async isPreview() {
51
+ const currentTab = await this.getTab();
52
+ const isPreview = (await currentTab?.getAttribute('class'))?.includes('kt_editor_tab_preview___');
53
+ return !!isPreview;
54
+ }
55
+
56
+ async isDirty() {
57
+ const dirtyIcon = await (await this.getTab())?.$("[class*='dirty___']");
58
+ const className = await dirtyIcon?.getAttribute('class');
59
+ const hidden = className?.includes('hidden__');
60
+ return !hidden;
61
+ }
62
+
63
+ async save() {
64
+ await this.activate();
65
+ if (!(await this.isDirty())) {
66
+ return;
67
+ }
68
+ const dirtyIcon = await (await this.getTab())?.$("[class*='dirty___']");
69
+ await this.app.menubar.trigger('File', 'Save File');
70
+ // waiting for saved
71
+ await dirtyIcon?.waitForElementState('hidden');
72
+ await this.waitForEditorDone();
73
+ }
74
+
75
+ async waitForEditorDone() {
76
+ await this.page.waitForTimeout(200);
77
+ }
78
+
79
+ async close() {
80
+ const currentTab = await this.getTabElement();
81
+ await currentTab?.hover({
82
+ position: {
83
+ x: 10,
84
+ y: 10,
85
+ },
86
+ });
87
+ const closeIcon = await currentTab?.$("[class*='close_tab___']");
88
+ await closeIcon?.click();
89
+ }
90
+
91
+ async saveAndClose() {
92
+ await this.save();
93
+ await this.close();
94
+ }
95
+
96
+ async undo(times = 1) {
97
+ await this.activate();
98
+ for (let i = 0; i < times; i++) {
99
+ await this.app.menubar.trigger('Edit', 'Undo');
100
+ await this.waitForEditorDone();
101
+ }
102
+ }
103
+
104
+ async redo(times = 1) {
105
+ await this.activate();
106
+ for (let i = 0; i < times; i++) {
107
+ await this.app.menubar.trigger('Edit', 'Redo');
108
+ await this.waitForEditorDone();
109
+ }
110
+ }
111
+
112
+ async triggerTitleMenu(name: string) {
113
+ const tab = await this.getTabElement();
114
+ const actions = (await tab?.$$('[class*="iconAction___"]')) || [];
115
+ for (const action of actions) {
116
+ const title = await action.getAttribute('title');
117
+ if (title === name) {
118
+ await action.click();
119
+ break;
120
+ }
121
+ }
122
+ }
123
+
124
+ async triggerTitleMenuById(id: string) {
125
+ const tab = await this.getTabElement();
126
+ const actions = (await tab?.$$('[class*="iconAction___"]')) || [];
127
+ for (const action of actions) {
128
+ const title = await action.getAttribute('id');
129
+ if (title === id) {
130
+ await action.click();
131
+ break;
132
+ }
133
+ }
134
+ }
135
+ }