@theia/playwright 1.34.3 → 1.34.4

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 (124) hide show
  1. package/LICENSE +641 -641
  2. package/README.md +54 -54
  3. package/lib/index.d.ts +25 -25
  4. package/lib/index.js +52 -52
  5. package/lib/tests/fixtures/theia-fixture.d.ts +3 -3
  6. package/lib/tests/fixtures/theia-fixture.js +23 -23
  7. package/lib/tests/theia-app.test.d.ts +1 -1
  8. package/lib/tests/theia-app.test.js +29 -29
  9. package/lib/tests/theia-explorer-view.test.d.ts +1 -1
  10. package/lib/tests/theia-explorer-view.test.js +109 -109
  11. package/lib/tests/theia-main-menu.test.d.ts +1 -1
  12. package/lib/tests/theia-main-menu.test.js +73 -73
  13. package/lib/tests/theia-preference-view.test.d.ts +1 -1
  14. package/lib/tests/theia-preference-view.test.js +99 -99
  15. package/lib/tests/theia-problems-view.test.d.ts +1 -1
  16. package/lib/tests/theia-problems-view.test.js +52 -52
  17. package/lib/tests/theia-quick-command.test.d.ts +1 -1
  18. package/lib/tests/theia-quick-command.test.js +53 -53
  19. package/lib/tests/theia-sample-app.test.d.ts +1 -1
  20. package/lib/tests/theia-sample-app.test.js +80 -80
  21. package/lib/tests/theia-status-bar.test.d.ts +1 -1
  22. package/lib/tests/theia-status-bar.test.js +41 -41
  23. package/lib/tests/theia-text-editor.test.d.ts +1 -1
  24. package/lib/tests/theia-text-editor.test.js +152 -152
  25. package/lib/tests/theia-workspace.test.d.ts +1 -1
  26. package/lib/tests/theia-workspace.test.js +47 -47
  27. package/lib/theia-about-dialog.d.ts +4 -4
  28. package/lib/theia-about-dialog.js +26 -26
  29. package/lib/theia-app.d.ts +43 -43
  30. package/lib/theia-app.js +135 -135
  31. package/lib/theia-context-menu.d.ts +8 -8
  32. package/lib/theia-context-menu.js +37 -37
  33. package/lib/theia-dialog.d.ts +27 -27
  34. package/lib/theia-dialog.js +98 -98
  35. package/lib/theia-editor.d.ts +9 -9
  36. package/lib/theia-editor.js +68 -68
  37. package/lib/theia-explorer-view.d.ts +38 -38
  38. package/lib/theia-explorer-view.js +209 -209
  39. package/lib/theia-main-menu.d.ts +12 -12
  40. package/lib/theia-main-menu.js +53 -53
  41. package/lib/theia-menu-item.d.ts +14 -14
  42. package/lib/theia-menu-item.js +66 -66
  43. package/lib/theia-menu.d.ts +16 -16
  44. package/lib/theia-menu.js +86 -86
  45. package/lib/theia-notification-indicator.d.ts +7 -7
  46. package/lib/theia-notification-indicator.js +44 -44
  47. package/lib/theia-notification-overlay.d.ts +22 -22
  48. package/lib/theia-notification-overlay.js +79 -79
  49. package/lib/theia-page-object.d.ts +7 -7
  50. package/lib/theia-page-object.js +27 -27
  51. package/lib/theia-preference-view.d.ts +76 -76
  52. package/lib/theia-preference-view.js +201 -201
  53. package/lib/theia-problem-indicator.d.ts +8 -8
  54. package/lib/theia-problem-indicator.js +38 -38
  55. package/lib/theia-problem-view.d.ts +5 -5
  56. package/lib/theia-problem-view.js +30 -30
  57. package/lib/theia-quick-command-palette.d.ts +11 -11
  58. package/lib/theia-quick-command-palette.js +73 -73
  59. package/lib/theia-rename-dialog.d.ts +5 -5
  60. package/lib/theia-rename-dialog.js +35 -35
  61. package/lib/theia-status-bar.d.ts +13 -13
  62. package/lib/theia-status-bar.js +39 -39
  63. package/lib/theia-status-indicator.d.ts +10 -10
  64. package/lib/theia-status-indicator.js +48 -48
  65. package/lib/theia-text-editor.d.ts +27 -27
  66. package/lib/theia-text-editor.js +149 -149
  67. package/lib/theia-toggle-bottom-indicator.d.ts +4 -4
  68. package/lib/theia-toggle-bottom-indicator.js +26 -26
  69. package/lib/theia-tree-node.d.ts +16 -16
  70. package/lib/theia-tree-node.js +53 -53
  71. package/lib/theia-view.d.ts +32 -32
  72. package/lib/theia-view.js +151 -151
  73. package/lib/theia-workspace.d.ts +18 -18
  74. package/lib/theia-workspace.js +69 -69
  75. package/lib/util.d.ts +19 -19
  76. package/lib/util.js +93 -93
  77. package/package.json +2 -2
  78. package/src/index.ts +41 -41
  79. package/src/tests/fixtures/theia-fixture.ts +25 -25
  80. package/src/tests/resources/sample-files1/sample.txt +4 -4
  81. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-1.txt +1 -1
  82. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-1/sampleFile1-1-2.txt +1 -1
  83. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-1.txt +1 -1
  84. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder1/sampleFolder1-2/sampleFile1-2-2.txt +1 -1
  85. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-1.txt +1 -1
  86. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-1/sampleFile2-1-2.txt +1 -1
  87. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-1.txt +1 -1
  88. package/src/tests/resources/sample-files1/sampleFolder/sampleFolder2/sampleFolder2-2/sampleFile2-2-2.txt +1 -1
  89. package/src/tests/resources/sample-files2/another-sample.txt +1 -1
  90. package/src/tests/theia-app.test.ts +34 -34
  91. package/src/tests/theia-explorer-view.test.ts +124 -124
  92. package/src/tests/theia-main-menu.test.ts +89 -89
  93. package/src/tests/theia-preference-view.test.ts +118 -118
  94. package/src/tests/theia-problems-view.test.ts +60 -60
  95. package/src/tests/theia-quick-command.test.ts +61 -61
  96. package/src/tests/theia-sample-app.test.ts +92 -92
  97. package/src/tests/theia-status-bar.test.ts +47 -47
  98. package/src/tests/theia-text-editor.test.ts +182 -182
  99. package/src/tests/theia-workspace.test.ts +51 -51
  100. package/src/theia-about-dialog.ts +26 -26
  101. package/src/theia-app.ts +154 -154
  102. package/src/theia-context-menu.ts +42 -42
  103. package/src/theia-dialog.ts +113 -113
  104. package/src/theia-editor.ts +73 -73
  105. package/src/theia-explorer-view.ts +234 -234
  106. package/src/theia-main-menu.ts +54 -54
  107. package/src/theia-menu-item.ts +75 -75
  108. package/src/theia-menu.ts +96 -96
  109. package/src/theia-notification-indicator.ts +44 -44
  110. package/src/theia-notification-overlay.ts +94 -94
  111. package/src/theia-page-object.ts +29 -29
  112. package/src/theia-preference-view.ts +232 -232
  113. package/src/theia-problem-indicator.ts +37 -37
  114. package/src/theia-problem-view.ts +30 -30
  115. package/src/theia-quick-command-palette.ts +75 -75
  116. package/src/theia-rename-dialog.ts +36 -36
  117. package/src/theia-status-bar.ts +44 -44
  118. package/src/theia-status-indicator.ts +50 -50
  119. package/src/theia-text-editor.ts +172 -172
  120. package/src/theia-toggle-bottom-indicator.ts +21 -21
  121. package/src/theia-tree-node.ts +60 -60
  122. package/src/theia-view.ts +178 -178
  123. package/src/theia-workspace.ts +76 -76
  124. package/src/util.ts +91 -91
@@ -1,75 +1,75 @@
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 WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { ElementHandle } from '@playwright/test';
18
-
19
- import { elementContainsClass, textContent } from './util';
20
-
21
- export class TheiaMenuItem {
22
-
23
- constructor(protected element: ElementHandle<SVGElement | HTMLElement>) { }
24
-
25
- protected labelElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement>> {
26
- return this.element.waitForSelector('.p-Menu-itemLabel');
27
- }
28
-
29
- protected shortCutElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement>> {
30
- return this.element.waitForSelector('.p-Menu-itemShortcut');
31
- }
32
-
33
- protected isHidden(): Promise<boolean> {
34
- return elementContainsClass(this.element, 'p-mod-collapsed');
35
- }
36
-
37
- async label(): Promise<string | undefined> {
38
- if (await this.isHidden()) {
39
- return undefined;
40
- }
41
- return textContent(this.labelElementHandle());
42
- }
43
-
44
- async shortCut(): Promise<string | undefined> {
45
- if (await this.isHidden()) {
46
- return undefined;
47
- }
48
- return textContent(this.shortCutElementHandle());
49
- }
50
-
51
- async hasSubmenu(): Promise<boolean> {
52
- if (await this.isHidden()) {
53
- return false;
54
- }
55
- return (await this.element.getAttribute('data-type')) === 'submenu';
56
- }
57
-
58
- async isEnabled(): Promise<boolean> {
59
- const classAttribute = (await this.element.getAttribute('class'));
60
- if (classAttribute === undefined || classAttribute === null) {
61
- return false;
62
- }
63
- return !classAttribute.includes('p-mod-disabled') && !classAttribute.includes('p-mod-collapsed');
64
- }
65
-
66
- async click(): Promise<void> {
67
- return this.element.waitForSelector('.p-Menu-itemLabel')
68
- .then(labelElement => labelElement.click({ position: { x: 10, y: 10 } }));
69
- }
70
-
71
- async hover(): Promise<void> {
72
- return this.element.hover();
73
- }
74
-
75
- }
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 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { ElementHandle } from '@playwright/test';
18
+
19
+ import { elementContainsClass, textContent } from './util';
20
+
21
+ export class TheiaMenuItem {
22
+
23
+ constructor(protected element: ElementHandle<SVGElement | HTMLElement>) { }
24
+
25
+ protected labelElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement>> {
26
+ return this.element.waitForSelector('.p-Menu-itemLabel');
27
+ }
28
+
29
+ protected shortCutElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement>> {
30
+ return this.element.waitForSelector('.p-Menu-itemShortcut');
31
+ }
32
+
33
+ protected isHidden(): Promise<boolean> {
34
+ return elementContainsClass(this.element, 'p-mod-collapsed');
35
+ }
36
+
37
+ async label(): Promise<string | undefined> {
38
+ if (await this.isHidden()) {
39
+ return undefined;
40
+ }
41
+ return textContent(this.labelElementHandle());
42
+ }
43
+
44
+ async shortCut(): Promise<string | undefined> {
45
+ if (await this.isHidden()) {
46
+ return undefined;
47
+ }
48
+ return textContent(this.shortCutElementHandle());
49
+ }
50
+
51
+ async hasSubmenu(): Promise<boolean> {
52
+ if (await this.isHidden()) {
53
+ return false;
54
+ }
55
+ return (await this.element.getAttribute('data-type')) === 'submenu';
56
+ }
57
+
58
+ async isEnabled(): Promise<boolean> {
59
+ const classAttribute = (await this.element.getAttribute('class'));
60
+ if (classAttribute === undefined || classAttribute === null) {
61
+ return false;
62
+ }
63
+ return !classAttribute.includes('p-mod-disabled') && !classAttribute.includes('p-mod-collapsed');
64
+ }
65
+
66
+ async click(): Promise<void> {
67
+ return this.element.waitForSelector('.p-Menu-itemLabel')
68
+ .then(labelElement => labelElement.click({ position: { x: 10, y: 10 } }));
69
+ }
70
+
71
+ async hover(): Promise<void> {
72
+ return this.element.hover();
73
+ }
74
+
75
+ }
package/src/theia-menu.ts CHANGED
@@ -1,96 +1,96 @@
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 WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { ElementHandle } from '@playwright/test';
18
-
19
- import { TheiaMenuItem } from './theia-menu-item';
20
- import { TheiaPageObject } from './theia-page-object';
21
- import { isDefined } from './util';
22
-
23
- export class TheiaMenu extends TheiaPageObject {
24
-
25
- selector = '.p-Menu';
26
-
27
- protected async menuElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
28
- return this.page.$(this.selector);
29
- }
30
-
31
- async waitForVisible(): Promise<void> {
32
- await this.page.waitForSelector(this.selector, { state: 'visible' });
33
- }
34
-
35
- async isOpen(): Promise<boolean> {
36
- const menu = await this.menuElementHandle();
37
- return !!menu && menu.isVisible();
38
- }
39
-
40
- async close(): Promise<void> {
41
- if (!await this.isOpen()) {
42
- return;
43
- }
44
- await this.page.mouse.click(0, 0);
45
- await this.page.waitForSelector(this.selector, { state: 'detached' });
46
- }
47
-
48
- async menuItems(): Promise<TheiaMenuItem[]> {
49
- const menuHandle = await this.menuElementHandle();
50
- if (!menuHandle) {
51
- return [];
52
- }
53
- const items = await menuHandle.$$('.p-Menu-content .p-Menu-item');
54
- return items.map(element => new TheiaMenuItem(element));
55
- }
56
-
57
- async clickMenuItem(name: string): Promise<void> {
58
- return (await this.page.waitForSelector(this.menuItemSelector(name))).click();
59
- }
60
-
61
- async menuItemByName(name: string): Promise<TheiaMenuItem | undefined> {
62
- const menuItems = await this.menuItems();
63
- for (const item of menuItems) {
64
- const label = await item.label();
65
- if (label === name) {
66
- return item;
67
- }
68
- }
69
- return undefined;
70
- }
71
-
72
- async menuItemByNamePath(...names: string[]): Promise<TheiaMenuItem | undefined> {
73
- let item;
74
- for (let index = 0; index < names.length; index++) {
75
- item = await this.page.waitForSelector(this.menuItemSelector(names[index]), { state: 'visible' });
76
- await item.hover();
77
- }
78
-
79
- const menuItemHandle = await item?.$('xpath=..');
80
- if (menuItemHandle) {
81
- return new TheiaMenuItem(menuItemHandle);
82
- }
83
- return undefined;
84
- }
85
-
86
- protected menuItemSelector(label = ''): string {
87
- return `.p-Menu-content .p-Menu-itemLabel >> text=${label}`;
88
- }
89
-
90
- async visibleMenuItems(): Promise<string[]> {
91
- const menuItems = await this.menuItems();
92
- const labels = await Promise.all(menuItems.map(item => item.label()));
93
- return labels.filter(isDefined);
94
- }
95
-
96
- }
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 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { ElementHandle } from '@playwright/test';
18
+
19
+ import { TheiaMenuItem } from './theia-menu-item';
20
+ import { TheiaPageObject } from './theia-page-object';
21
+ import { isDefined } from './util';
22
+
23
+ export class TheiaMenu extends TheiaPageObject {
24
+
25
+ selector = '.p-Menu';
26
+
27
+ protected async menuElementHandle(): Promise<ElementHandle<SVGElement | HTMLElement> | null> {
28
+ return this.page.$(this.selector);
29
+ }
30
+
31
+ async waitForVisible(): Promise<void> {
32
+ await this.page.waitForSelector(this.selector, { state: 'visible' });
33
+ }
34
+
35
+ async isOpen(): Promise<boolean> {
36
+ const menu = await this.menuElementHandle();
37
+ return !!menu && menu.isVisible();
38
+ }
39
+
40
+ async close(): Promise<void> {
41
+ if (!await this.isOpen()) {
42
+ return;
43
+ }
44
+ await this.page.mouse.click(0, 0);
45
+ await this.page.waitForSelector(this.selector, { state: 'detached' });
46
+ }
47
+
48
+ async menuItems(): Promise<TheiaMenuItem[]> {
49
+ const menuHandle = await this.menuElementHandle();
50
+ if (!menuHandle) {
51
+ return [];
52
+ }
53
+ const items = await menuHandle.$$('.p-Menu-content .p-Menu-item');
54
+ return items.map(element => new TheiaMenuItem(element));
55
+ }
56
+
57
+ async clickMenuItem(name: string): Promise<void> {
58
+ return (await this.page.waitForSelector(this.menuItemSelector(name))).click();
59
+ }
60
+
61
+ async menuItemByName(name: string): Promise<TheiaMenuItem | undefined> {
62
+ const menuItems = await this.menuItems();
63
+ for (const item of menuItems) {
64
+ const label = await item.label();
65
+ if (label === name) {
66
+ return item;
67
+ }
68
+ }
69
+ return undefined;
70
+ }
71
+
72
+ async menuItemByNamePath(...names: string[]): Promise<TheiaMenuItem | undefined> {
73
+ let item;
74
+ for (let index = 0; index < names.length; index++) {
75
+ item = await this.page.waitForSelector(this.menuItemSelector(names[index]), { state: 'visible' });
76
+ await item.hover();
77
+ }
78
+
79
+ const menuItemHandle = await item?.$('xpath=..');
80
+ if (menuItemHandle) {
81
+ return new TheiaMenuItem(menuItemHandle);
82
+ }
83
+ return undefined;
84
+ }
85
+
86
+ protected menuItemSelector(label = ''): string {
87
+ return `.p-Menu-content .p-Menu-itemLabel >> text=${label}`;
88
+ }
89
+
90
+ async visibleMenuItems(): Promise<string[]> {
91
+ const menuItems = await this.menuItems();
92
+ const labels = await Promise.all(menuItems.map(item => item.label()));
93
+ return labels.filter(isDefined);
94
+ }
95
+
96
+ }
@@ -1,44 +1,44 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { TheiaStatusIndicator } from './theia-status-indicator';
18
-
19
- const NOTIFICATION_DOT_ICON = 'codicon-bell-dot';
20
-
21
- export class TheiaNotificationIndicator extends TheiaStatusIndicator {
22
- id = 'theia-notification-center';
23
-
24
- async hasNotifications(): Promise<boolean> {
25
- const container = await this.getElementHandle();
26
- const bellWithDot = await container.$(`.${NOTIFICATION_DOT_ICON}`);
27
- return Boolean(bellWithDot?.isVisible());
28
- }
29
-
30
- override async waitForVisible(expectNotifications = false): Promise<void> {
31
- await super.waitForVisible();
32
- if (expectNotifications && !(await this.hasNotifications())) {
33
- throw new Error('No notifications when notifications expected.');
34
- }
35
- }
36
-
37
- async toggleOverlay(): Promise<void> {
38
- const element = await this.getElementHandle();
39
- if (element) {
40
- await element.click();
41
- }
42
- }
43
-
44
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { TheiaStatusIndicator } from './theia-status-indicator';
18
+
19
+ const NOTIFICATION_DOT_ICON = 'codicon-bell-dot';
20
+
21
+ export class TheiaNotificationIndicator extends TheiaStatusIndicator {
22
+ id = 'theia-notification-center';
23
+
24
+ async hasNotifications(): Promise<boolean> {
25
+ const container = await this.getElementHandle();
26
+ const bellWithDot = await container.$(`.${NOTIFICATION_DOT_ICON}`);
27
+ return Boolean(bellWithDot?.isVisible());
28
+ }
29
+
30
+ override async waitForVisible(expectNotifications = false): Promise<void> {
31
+ await super.waitForVisible();
32
+ if (expectNotifications && !(await this.hasNotifications())) {
33
+ throw new Error('No notifications when notifications expected.');
34
+ }
35
+ }
36
+
37
+ async toggleOverlay(): Promise<void> {
38
+ const element = await this.getElementHandle();
39
+ if (element) {
40
+ await element.click();
41
+ }
42
+ }
43
+
44
+ }
@@ -1,94 +1,94 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
3
- //
4
- // This program and the accompanying materials are made available under the
5
- // terms of the Eclipse Public License v. 2.0 which is available at
6
- // http://www.eclipse.org/legal/epl-2.0.
7
- //
8
- // This Source Code may also be made available under the following Secondary
9
- // Licenses when the conditions for such availability set forth in the Eclipse
10
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
- // with the GNU Classpath Exception which is available at
12
- // https://www.gnu.org/software/classpath/license.html.
13
- //
14
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
- // *****************************************************************************
16
-
17
- import { TheiaApp } from './theia-app';
18
- import { TheiaNotificationIndicator } from './theia-notification-indicator';
19
- import { TheiaPageObject } from './theia-page-object';
20
-
21
- export class TheiaNotificationOverlay extends TheiaPageObject {
22
-
23
- protected readonly HEADER_NOTIFICATIONS = 'NOTIFICATIONS';
24
- protected readonly HEADER_NO_NOTIFICATIONS = 'NO NEW NOTIFICATIONS';
25
-
26
- constructor(app: TheiaApp, protected notificationIndicator: TheiaNotificationIndicator) {
27
- super(app);
28
- }
29
-
30
- protected get selector(): string {
31
- return '.theia-notifications-overlay';
32
- }
33
-
34
- protected get containerSelector(): string {
35
- return `${this.selector} .theia-notifications-container.theia-notification-center`;
36
- }
37
-
38
- protected get titleSelector(): string {
39
- return `${this.containerSelector} .theia-notification-center-header-title`;
40
- }
41
-
42
- async isVisible(): Promise<boolean> {
43
- const element = await this.page.$(`${this.containerSelector}.open`);
44
- return element ? element.isVisible() : false;
45
- }
46
-
47
- async waitForVisible(): Promise<void> {
48
- await this.page.waitForSelector(`${this.containerSelector}.open`);
49
- }
50
-
51
- async activate(): Promise<void> {
52
- if (!await this.isVisible()) {
53
- await this.notificationIndicator.toggleOverlay();
54
- }
55
- await this.waitForVisible();
56
- }
57
-
58
- async toggle(): Promise<void> {
59
- await this.app.quickCommandPalette.type('Toggle Notifications');
60
- await this.app.quickCommandPalette.trigger('Notifications: Toggle Notifications');
61
- }
62
-
63
- protected entrySelector(entryText: string): string {
64
- return `${this.containerSelector} .theia-notification-message span:has-text("${entryText}")`;
65
- }
66
-
67
- async waitForEntry(entryText: string): Promise<void> {
68
- await this.activate();
69
- await this.page.waitForSelector(this.entrySelector(entryText));
70
- }
71
-
72
- async waitForEntryDetached(entryText: string): Promise<void> {
73
- await this.activate();
74
- await this.page.waitForSelector(this.entrySelector(entryText), { state: 'detached' });
75
- }
76
-
77
- async isEntryVisible(entryText: string): Promise<boolean> {
78
- await this.activate();
79
- const element = await this.page.$(this.entrySelector(entryText));
80
- return !!element && element.isVisible();
81
- }
82
-
83
- protected get clearAllButtonSelector(): string {
84
- return this.selector + ' .theia-notification-center-header ul > li.codicon.codicon-clear-all';
85
- }
86
-
87
- async clearAllNotifications(): Promise<void> {
88
- await this.activate();
89
- const element = await this.page.waitForSelector(this.clearAllButtonSelector);
90
- await element.click();
91
- await this.notificationIndicator.waitForVisible(false /* expectNotifications */);
92
- }
93
-
94
- }
1
+ // *****************************************************************************
2
+ // Copyright (C) 2021 logi.cals GmbH, EclipseSource and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { TheiaApp } from './theia-app';
18
+ import { TheiaNotificationIndicator } from './theia-notification-indicator';
19
+ import { TheiaPageObject } from './theia-page-object';
20
+
21
+ export class TheiaNotificationOverlay extends TheiaPageObject {
22
+
23
+ protected readonly HEADER_NOTIFICATIONS = 'NOTIFICATIONS';
24
+ protected readonly HEADER_NO_NOTIFICATIONS = 'NO NEW NOTIFICATIONS';
25
+
26
+ constructor(app: TheiaApp, protected notificationIndicator: TheiaNotificationIndicator) {
27
+ super(app);
28
+ }
29
+
30
+ protected get selector(): string {
31
+ return '.theia-notifications-overlay';
32
+ }
33
+
34
+ protected get containerSelector(): string {
35
+ return `${this.selector} .theia-notifications-container.theia-notification-center`;
36
+ }
37
+
38
+ protected get titleSelector(): string {
39
+ return `${this.containerSelector} .theia-notification-center-header-title`;
40
+ }
41
+
42
+ async isVisible(): Promise<boolean> {
43
+ const element = await this.page.$(`${this.containerSelector}.open`);
44
+ return element ? element.isVisible() : false;
45
+ }
46
+
47
+ async waitForVisible(): Promise<void> {
48
+ await this.page.waitForSelector(`${this.containerSelector}.open`);
49
+ }
50
+
51
+ async activate(): Promise<void> {
52
+ if (!await this.isVisible()) {
53
+ await this.notificationIndicator.toggleOverlay();
54
+ }
55
+ await this.waitForVisible();
56
+ }
57
+
58
+ async toggle(): Promise<void> {
59
+ await this.app.quickCommandPalette.type('Toggle Notifications');
60
+ await this.app.quickCommandPalette.trigger('Notifications: Toggle Notifications');
61
+ }
62
+
63
+ protected entrySelector(entryText: string): string {
64
+ return `${this.containerSelector} .theia-notification-message span:has-text("${entryText}")`;
65
+ }
66
+
67
+ async waitForEntry(entryText: string): Promise<void> {
68
+ await this.activate();
69
+ await this.page.waitForSelector(this.entrySelector(entryText));
70
+ }
71
+
72
+ async waitForEntryDetached(entryText: string): Promise<void> {
73
+ await this.activate();
74
+ await this.page.waitForSelector(this.entrySelector(entryText), { state: 'detached' });
75
+ }
76
+
77
+ async isEntryVisible(entryText: string): Promise<boolean> {
78
+ await this.activate();
79
+ const element = await this.page.$(this.entrySelector(entryText));
80
+ return !!element && element.isVisible();
81
+ }
82
+
83
+ protected get clearAllButtonSelector(): string {
84
+ return this.selector + ' .theia-notification-center-header ul > li.codicon.codicon-clear-all';
85
+ }
86
+
87
+ async clearAllNotifications(): Promise<void> {
88
+ await this.activate();
89
+ const element = await this.page.waitForSelector(this.clearAllButtonSelector);
90
+ await element.click();
91
+ await this.notificationIndicator.waitForVisible(false /* expectNotifications */);
92
+ }
93
+
94
+ }