Enable dependabot for GHA
Provide custom issue template
Stabilize TerminalView.getText() method for VSCode insider Signed-off-by: Dominik Jelinek <djelinek@redhat.com>
Merge pull request #500 from ssbarnea/chore/test Enable dependabot for GHA
Merge pull request #508 from redhat-developer/issue-template Provide custom issue template
Merge pull request #509 from redhat-developer/insider-fix Stabilize TerminalView.getText() method for VSCode insider
Bump actions/upload-artifact from 2 to 3 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 3. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bump actions/setup-node from 1 to 3.5.0 Bumps [actions/setup-node](https://github.com/actions/setup-node) from 1 to 3.5.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v1...v3.5.0) --- updated-dependencies: - dependency-name: actions/setup-node dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Apply min/max feature to API Signed-off-by: Marian Lorinc <mlorinc@redhat.com>
Merge pull request #516 from redhat-developer/dependabot/github_actions/actions/setup-node-3.5.0 Bump actions/setup-node from 1 to 3.5.0
Add Disconnect button click to DebugToolBar Signed-off-by: Marian Lorinc <mlorinc@redhat.com>
Get all visible markers (#502) * renamed getAllMarkers to getAllVisibleMarkers * renamed getAllMarkers to getAllVisibleMarkers * added .skip() to a few tests in bottomBar-test.ts
Update GH actions workflows, add workflow badges to readme (#523) * Update GH actions workflow * Add workflow badges to readme file Signed-off-by: Dominik Jelinek <djelinek@redhat.com>
Upgrade got dependency to 11.8.5 version it avoids having a CVE in transitive dependencies not upgrading to 12.x as it requires more work given API breakage. This could be done in another iteration. fixes #507 Signed-off-by: Aurélien Pupier <apupier@redhat.com>
Upversion page-objects to 3.1.0 Signed-off-by: Dominik Jelinek <djelinek@redhat.com>
Upversion locators to 3.1.0 Signed-off-by: Dominik Jelinek <djelinek@redhat.com>
5.1.0
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: Custom issue template
|
3 |
+
about: Extester issue template to gain most important information
|
4 |
+
title: ''
|
5 |
+
labels: NEW_ISSUE
|
6 |
+
assignees: ''
|
7 |
+
|
8 |
+
---
|
9 |
+
|
10 |
+
> Define issue title **short** and **most specific** to the problem.
|
11 |
+
|
12 |
+
> Tag each new issue with relevant **LABELS** (*bug*, *enhancement*, etc.).
|
13 |
+
|
14 |
+
> Replace all **???** with relevant information.
|
15 |
+
|
16 |
+
## Expected Behavior
|
17 |
+
- ???
|
18 |
+
|
19 |
+
## Actual Behavior
|
20 |
+
- ???
|
21 |
+
|
22 |
+
## Steps to Reproduce the Problem
|
23 |
+
|
24 |
+
1. ???
|
25 |
+
2. ???
|
26 |
+
3. ???
|
27 |
+
|
28 |
+
## Specifications
|
29 |
+
|
30 |
+
- VSCode version: ???
|
31 |
+
- ExTester version: ???
|
32 |
+
- Platform:
|
33 |
+
- [ ] Linux
|
34 |
+
- [ ] macOS
|
35 |
+
- [ ] Windows
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
version: 2
|
3 |
+
updates:
|
4 |
+
- package-ecosystem: "github-actions"
|
5 |
+
directory: "/"
|
6 |
+
schedule:
|
7 |
+
interval: daily
|
8 |
+
open-pull-requests-limit: 3
|
9 |
+
labels:
|
10 |
+
- "skip-changelog"
|
@@ -1,18 +1,20 @@
|
|
1 |
-
name:
|
2 |
|
3 |
on:
|
4 |
schedule:
|
5 |
- cron: "0 0 * * *"
|
|
|
|
|
6 |
workflow_dispatch:
|
7 |
|
8 |
jobs:
|
9 |
test:
|
10 |
runs-on: ubuntu-latest
|
11 |
|
12 |
steps:
|
13 |
-
- uses: actions/checkout@
|
14 |
- name: Setup Node
|
15 |
-
uses: actions/setup-node@
|
16 |
with:
|
17 |
node-version: 16
|
18 |
- name: Setup Dependencies
|
@@ -31,8 +33,8 @@ jobs:
|
|
31 |
Xvfb -ac :99 -screen 0 1920x1080x16 &
|
32 |
npm run ci-test
|
33 |
- name: Upload screenshots
|
34 |
-
uses: actions/upload-artifact@
|
35 |
if: failure()
|
36 |
-
with:
|
37 |
name: screenshots
|
38 |
path: ~/test/**/screenshots/*.png
|
1 |
+
name: Insiders CI
|
2 |
|
3 |
on:
|
4 |
schedule:
|
5 |
- cron: "0 0 * * *"
|
6 |
+
push:
|
7 |
+
branches: [ master ]
|
8 |
workflow_dispatch:
|
9 |
|
10 |
jobs:
|
11 |
test:
|
12 |
runs-on: ubuntu-latest
|
13 |
|
14 |
steps:
|
15 |
+
- uses: actions/checkout@v3
|
16 |
- name: Setup Node
|
17 |
+
uses: actions/setup-node@v3
|
18 |
with:
|
19 |
node-version: 16
|
20 |
- name: Setup Dependencies
|
33 |
Xvfb -ac :99 -screen 0 1920x1080x16 &
|
34 |
npm run ci-test
|
35 |
- name: Upload screenshots
|
36 |
+
uses: actions/upload-artifact@v3
|
37 |
if: failure()
|
38 |
+
with:
|
39 |
name: screenshots
|
40 |
path: ~/test/**/screenshots/*.png
|
@@ -12,14 +12,14 @@ jobs:
|
|
12 |
|
13 |
strategy:
|
14 |
matrix:
|
15 |
-
node: [16]
|
16 |
-
version:
|
17 |
fail-fast: false
|
18 |
|
19 |
steps:
|
20 |
-
- uses: actions/checkout@
|
21 |
- name: Setup Node
|
22 |
-
uses: actions/setup-node@
|
23 |
with:
|
24 |
node-version: ${{ matrix.node }}
|
25 |
- name: Setup Dependencies
|
@@ -38,8 +38,8 @@ jobs:
|
|
38 |
Xvfb -ac :99 -screen 0 1920x1080x16 &
|
39 |
npm run ci-test
|
40 |
- name: Upload screenshots
|
41 |
-
uses: actions/upload-artifact@
|
42 |
if: failure()
|
43 |
-
with:
|
44 |
name: screenshots-${{ matrix.version }}
|
45 |
path: ~/test/**/screenshots/*.png
|
12 |
|
13 |
strategy:
|
14 |
matrix:
|
15 |
+
node: [ 16 ]
|
16 |
+
version: [ min, 1.68.1, 1.69.2, 1.70.2, max ]
|
17 |
fail-fast: false
|
18 |
|
19 |
steps:
|
20 |
+
- uses: actions/checkout@v3
|
21 |
- name: Setup Node
|
22 |
+
uses: actions/setup-node@v3
|
23 |
with:
|
24 |
node-version: ${{ matrix.node }}
|
25 |
- name: Setup Dependencies
|
38 |
Xvfb -ac :99 -screen 0 1920x1080x16 &
|
39 |
npm run ci-test
|
40 |
- name: Upload screenshots
|
41 |
+
uses: actions/upload-artifact@v3
|
42 |
if: failure()
|
43 |
+
with:
|
44 |
name: screenshots-${{ matrix.version }}
|
45 |
path: ~/test/**/screenshots/*.png
|
@@ -12,14 +12,14 @@ jobs:
|
|
12 |
|
13 |
strategy:
|
14 |
matrix:
|
15 |
-
node: [16]
|
16 |
-
version: [max]
|
17 |
fail-fast: false
|
18 |
|
19 |
steps:
|
20 |
-
- uses: actions/checkout@
|
21 |
- name: Setup Node
|
22 |
-
uses: actions/setup-node@
|
23 |
with:
|
24 |
node-version: ${{ matrix.node }}
|
25 |
- name: Setup Dependencies
|
@@ -33,3 +33,9 @@ jobs:
|
|
33 |
env:
|
34 |
CODE_VERSION: ${{ matrix.version }}
|
35 |
run: npm test
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
strategy:
|
14 |
matrix:
|
15 |
+
node: [ 16 ]
|
16 |
+
version: [ max ]
|
17 |
fail-fast: false
|
18 |
|
19 |
steps:
|
20 |
+
- uses: actions/checkout@v3
|
21 |
- name: Setup Node
|
22 |
+
uses: actions/setup-node@v3
|
23 |
with:
|
24 |
node-version: ${{ matrix.node }}
|
25 |
- name: Setup Dependencies
|
33 |
env:
|
34 |
CODE_VERSION: ${{ matrix.version }}
|
35 |
run: npm test
|
36 |
+
- name: Upload screenshots
|
37 |
+
uses: actions/upload-artifact@v3
|
38 |
+
if: failure()
|
39 |
+
with:
|
40 |
+
name: screenshots-${{ matrix.version }}
|
41 |
+
path: ~/test/**/screenshots/*.png
|
@@ -12,14 +12,14 @@ jobs:
|
|
12 |
|
13 |
strategy:
|
14 |
matrix:
|
15 |
-
node: [16]
|
16 |
-
version: [max]
|
17 |
fail-fast: false
|
18 |
|
19 |
steps:
|
20 |
-
- uses: actions/checkout@
|
21 |
- name: Setup Node
|
22 |
-
uses: actions/setup-node@
|
23 |
with:
|
24 |
node-version: ${{ matrix.node }}
|
25 |
- name: Setup Dependencies
|
@@ -32,4 +32,10 @@ jobs:
|
|
32 |
- name: Run Tests
|
33 |
env:
|
34 |
CODE_VERSION: ${{ matrix.version }}
|
35 |
-
run: npm test
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
strategy:
|
14 |
matrix:
|
15 |
+
node: [ 16 ]
|
16 |
+
version: [ max ]
|
17 |
fail-fast: false
|
18 |
|
19 |
steps:
|
20 |
+
- uses: actions/checkout@v3
|
21 |
- name: Setup Node
|
22 |
+
uses: actions/setup-node@v3
|
23 |
with:
|
24 |
node-version: ${{ matrix.node }}
|
25 |
- name: Setup Dependencies
|
32 |
- name: Run Tests
|
33 |
env:
|
34 |
CODE_VERSION: ${{ matrix.version }}
|
35 |
+
run: npm test
|
36 |
+
- name: Upload screenshots
|
37 |
+
uses: actions/upload-artifact@v3
|
38 |
+
if: failure()
|
39 |
+
with:
|
40 |
+
name: screenshots-${{ matrix.version }}
|
41 |
+
path: ~/test/**/screenshots/*.png
|
@@ -1,5 +1,12 @@
|
|
1 |
# Change Log
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
## 5.0.0 (September 19 2022)
|
4 |
- Included support for VSCode 1.70.2, 1.71.2
|
5 |
- Add placeholder min/max values to --code_version option
|
1 |
# Change Log
|
2 |
|
3 |
+
## 5.1.0 (October 26 2022)
|
4 |
+
- Added GitHub Actions badges into package readme file
|
5 |
+
- Added getAllVisibleMarkers instead unstable getAllAMarkers in ProblemsView component
|
6 |
+
- Added Disconnect button click to DebugToolBar component
|
7 |
+
- Applied min/max placeholder feature to API
|
8 |
+
- Fixed TerminalView.getText() method
|
9 |
+
|
10 |
## 5.0.0 (September 19 2022)
|
11 |
- Included support for VSCode 1.70.2, 1.71.2
|
12 |
- Add placeholder min/max values to --code_version option
|
@@ -1,6 +1,10 @@
|
|
1 |
-
|
|
|
2 |
|
3 |
-
|
|
|
|
|
|
|
4 |
|
5 |
VSCode Extension Tester is a package designed to help you run UI tests for your VS Code extensions using [selenium-webdriver](https://www.npmjs.com/package/selenium-webdriver).
|
6 |
|
1 |
+
#### Stable VSCode
|
2 |
+
[](https://github.com/redhat-developer/vscode-extension-tester/actions/workflows/linux.yml) [](https://github.com/redhat-developer/vscode-extension-tester/actions/workflows/mac.yml) [](https://github.com/redhat-developer/vscode-extension-tester/actions/workflows/windows.yml)
|
3 |
|
4 |
+
#### Insider VSCode
|
5 |
+
[](https://github.com/redhat-developer/vscode-extension-tester/actions/workflows/insiders.yml)
|
6 |
+
|
7 |
+
# vscode-extension-tester [](https://badge.fury.io/js/vscode-extension-tester) [](https://github.com/redhat-developer/vscode-extension-tester/blob/master/LICENSE)
|
8 |
|
9 |
VSCode Extension Tester is a package designed to help you run UI tests for your VS Code extensions using [selenium-webdriver](https://www.npmjs.com/package/selenium-webdriver).
|
10 |
|
@@ -51,7 +51,8 @@ const bottomBar = {
|
|
51 |
collapseAll: By.className('collapse-all'),
|
52 |
markerRow: By.className('monaco-list-row'),
|
53 |
rowLabel: 'aria-label',
|
54 |
-
markerTwistie: By.className('monaco-tl-twistie')
|
|
|
55 |
},
|
56 |
TerminalView: {
|
57 |
constructor: By.id('workbench.panel.terminal'),
|
51 |
collapseAll: By.className('collapse-all'),
|
52 |
markerRow: By.className('monaco-list-row'),
|
53 |
rowLabel: 'aria-label',
|
54 |
+
markerTwistie: By.className('monaco-tl-twistie'),
|
55 |
+
changeCount: By.className('monaco-count-badge')
|
56 |
},
|
57 |
TerminalView: {
|
58 |
constructor: By.id('workbench.panel.terminal'),
|
@@ -1,12 +1,12 @@
|
|
1 |
{
|
2 |
"name": "vscode-extension-tester-locators",
|
3 |
-
"version": "3.
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "vscode-extension-tester-locators",
|
9 |
-
"version": "3.
|
10 |
"license": "Apache-2.0",
|
11 |
"devDependencies": {
|
12 |
"@types/node": "^16.11.7",
|
@@ -16,13 +16,13 @@
|
|
16 |
"typescript": "4.4.2"
|
17 |
},
|
18 |
"peerDependencies": {
|
19 |
-
"monaco-page-objects": "^3.
|
20 |
"selenium-webdriver": "^4.2.0"
|
21 |
}
|
22 |
},
|
23 |
"../page-objects": {
|
24 |
"name": "monaco-page-objects",
|
25 |
-
"version": "3.
|
26 |
"dev": true,
|
27 |
"license": "Apache-2.0",
|
28 |
"dependencies": {
|
1 |
{
|
2 |
"name": "vscode-extension-tester-locators",
|
3 |
+
"version": "3.1.0",
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "vscode-extension-tester-locators",
|
9 |
+
"version": "3.1.0",
|
10 |
"license": "Apache-2.0",
|
11 |
"devDependencies": {
|
12 |
"@types/node": "^16.11.7",
|
16 |
"typescript": "4.4.2"
|
17 |
},
|
18 |
"peerDependencies": {
|
19 |
+
"monaco-page-objects": "^3.1.0",
|
20 |
"selenium-webdriver": "^4.2.0"
|
21 |
}
|
22 |
},
|
23 |
"../page-objects": {
|
24 |
"name": "monaco-page-objects",
|
25 |
+
"version": "3.1.0",
|
26 |
"dev": true,
|
27 |
"license": "Apache-2.0",
|
28 |
"dependencies": {
|
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"name": "vscode-extension-tester-locators",
|
3 |
-
"version": "3.
|
4 |
"description": "Pluggable object locators for vscode extension tester",
|
5 |
"main": "out/index.js",
|
6 |
"types": "out/index.d.ts",
|
@@ -36,7 +36,7 @@
|
|
36 |
"typescript": "4.4.2"
|
37 |
},
|
38 |
"peerDependencies": {
|
39 |
-
"monaco-page-objects": "^3.
|
40 |
"selenium-webdriver": "^4.2.0"
|
41 |
}
|
42 |
}
|
1 |
{
|
2 |
"name": "vscode-extension-tester-locators",
|
3 |
+
"version": "3.1.0",
|
4 |
"description": "Pluggable object locators for vscode extension tester",
|
5 |
"main": "out/index.js",
|
6 |
"types": "out/index.d.ts",
|
36 |
"typescript": "4.4.2"
|
37 |
},
|
38 |
"peerDependencies": {
|
39 |
+
"monaco-page-objects": "^3.1.0",
|
40 |
"selenium-webdriver": "^4.2.0"
|
41 |
}
|
42 |
}
|
@@ -1,29 +1,29 @@
|
|
1 |
{
|
2 |
"name": "vscode-extension-tester",
|
3 |
-
"version": "5.
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "vscode-extension-tester",
|
9 |
-
"version": "5.
|
10 |
"license": "Apache-2.0",
|
11 |
"dependencies": {
|
12 |
"@types/selenium-webdriver": "^4.1.1",
|
13 |
"commander": "^8.0.0",
|
14 |
"compare-versions": "^3.6.0",
|
15 |
"fs-extra": "^10.0.0",
|
16 |
"glob": "^7.1.7",
|
17 |
-
"got": "^11.8.
|
18 |
"hpagent": "^0.1.2",
|
19 |
"js-yaml": "^4.1.0",
|
20 |
-
"monaco-page-objects": "^3.
|
21 |
"sanitize-filename": "^1.6.3",
|
22 |
"selenium-webdriver": "^4.2.0",
|
23 |
"targz": "^1.0.1",
|
24 |
"unzip-stream": "^0.3.0",
|
25 |
"vsce": "^2.11.0",
|
26 |
-
"vscode-extension-tester-locators": "^3.
|
27 |
},
|
28 |
"bin": {
|
29 |
"extest": "out/cli.js"
|
@@ -112,17 +112,13 @@
|
|
112 |
"integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==",
|
113 |
"dev": true
|
114 |
},
|
115 |
-
"node_modules/@types/json-buffer": {
|
116 |
-
"version": "3.0.0",
|
117 |
-
"resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
|
118 |
-
"integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ=="
|
119 |
-
},
|
120 |
"node_modules/@types/keyv": {
|
121 |
-
"version": "
|
122 |
-
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-
|
123 |
-
"integrity": "sha512-
|
|
|
124 |
"dependencies": {
|
125 |
-
"
|
126 |
}
|
127 |
},
|
128 |
"node_modules/@types/minimatch": {
|
@@ -655,11 +651,14 @@
|
|
655 |
}
|
656 |
},
|
657 |
"node_modules/clone-response": {
|
658 |
-
"version": "1.0.
|
659 |
-
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.
|
660 |
-
"integrity": "
|
661 |
"dependencies": {
|
662 |
"mimic-response": "^1.0.0"
|
|
|
|
|
|
|
663 |
}
|
664 |
},
|
665 |
"node_modules/code-point-at": {
|
@@ -701,18 +700,6 @@
|
|
701 |
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
|
702 |
"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
|
703 |
},
|
704 |
-
"node_modules/compress-brotli": {
|
705 |
-
"version": "1.3.8",
|
706 |
-
"resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz",
|
707 |
-
"integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==",
|
708 |
-
"dependencies": {
|
709 |
-
"@types/json-buffer": "~3.0.0",
|
710 |
-
"json-buffer": "~3.0.1"
|
711 |
-
},
|
712 |
-
"engines": {
|
713 |
-
"node": ">= 12"
|
714 |
-
}
|
715 |
-
},
|
716 |
"node_modules/concat-map": {
|
717 |
"version": "0.0.1",
|
718 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
@@ -1544,11 +1531,10 @@
|
|
1544 |
}
|
1545 |
},
|
1546 |
"node_modules/keyv": {
|
1547 |
-
"version": "4.
|
1548 |
-
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.
|
1549 |
-
"integrity": "sha512-
|
1550 |
"dependencies": {
|
1551 |
-
"compress-brotli": "^1.3.8",
|
1552 |
"json-buffer": "3.0.1"
|
1553 |
}
|
1554 |
},
|
@@ -1769,9 +1755,9 @@
|
|
1769 |
}
|
1770 |
},
|
1771 |
"node_modules/monaco-page-objects": {
|
1772 |
-
"version": "3.
|
1773 |
-
"resolved": "https://registry.npmjs.org/monaco-page-objects/-/monaco-page-objects-3.
|
1774 |
-
"integrity": "sha512-
|
1775 |
"dependencies": {
|
1776 |
"clipboardy": "^2.3.0",
|
1777 |
"clone-deep": "^4.0.1",
|
@@ -2242,11 +2228,14 @@
|
|
2242 |
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
|
2243 |
},
|
2244 |
"node_modules/responselike": {
|
2245 |
-
"version": "2.0.
|
2246 |
-
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.
|
2247 |
-
"integrity": "sha512-
|
2248 |
"dependencies": {
|
2249 |
"lowercase-keys": "^2.0.0"
|
|
|
|
|
|
|
2250 |
}
|
2251 |
},
|
2252 |
"node_modules/rimraf": {
|
@@ -2770,11 +2759,11 @@
|
|
2770 |
}
|
2771 |
},
|
2772 |
"node_modules/vscode-extension-tester-locators": {
|
2773 |
-
"version": "3.
|
2774 |
-
"resolved": "https://registry.npmjs.org/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.
|
2775 |
-
"integrity": "sha512-
|
2776 |
"peerDependencies": {
|
2777 |
-
"monaco-page-objects": "^3.
|
2778 |
"selenium-webdriver": "^4.2.0"
|
2779 |
}
|
2780 |
},
|
@@ -3106,17 +3095,12 @@
|
|
3106 |
"integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==",
|
3107 |
"dev": true
|
3108 |
},
|
3109 |
-
"@types/json-buffer": {
|
3110 |
-
"version": "3.0.0",
|
3111 |
-
"resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
|
3112 |
-
"integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ=="
|
3113 |
-
},
|
3114 |
"@types/keyv": {
|
3115 |
-
"version": "
|
3116 |
-
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-
|
3117 |
-
"integrity": "sha512-
|
3118 |
"requires": {
|
3119 |
-
"
|
3120 |
}
|
3121 |
},
|
3122 |
"@types/minimatch": {
|
@@ -3515,9 +3499,9 @@
|
|
3515 |
}
|
3516 |
},
|
3517 |
"clone-response": {
|
3518 |
-
"version": "1.0.
|
3519 |
-
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.
|
3520 |
-
"integrity": "
|
3521 |
"requires": {
|
3522 |
"mimic-response": "^1.0.0"
|
3523 |
}
|
@@ -3552,15 +3536,6 @@
|
|
3552 |
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
|
3553 |
"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
|
3554 |
},
|
3555 |
-
"compress-brotli": {
|
3556 |
-
"version": "1.3.8",
|
3557 |
-
"resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz",
|
3558 |
-
"integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==",
|
3559 |
-
"requires": {
|
3560 |
-
"@types/json-buffer": "~3.0.0",
|
3561 |
-
"json-buffer": "~3.0.1"
|
3562 |
-
}
|
3563 |
-
},
|
3564 |
"concat-map": {
|
3565 |
"version": "0.0.1",
|
3566 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
@@ -4163,11 +4138,10 @@
|
|
4163 |
}
|
4164 |
},
|
4165 |
"keyv": {
|
4166 |
-
"version": "4.
|
4167 |
-
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.
|
4168 |
-
"integrity": "sha512-
|
4169 |
"requires": {
|
4170 |
-
"compress-brotli": "^1.3.8",
|
4171 |
"json-buffer": "3.0.1"
|
4172 |
}
|
4173 |
},
|
@@ -4333,9 +4307,9 @@
|
|
4333 |
}
|
4334 |
},
|
4335 |
"monaco-page-objects": {
|
4336 |
-
"version": "3.
|
4337 |
-
"resolved": "https://registry.npmjs.org/monaco-page-objects/-/monaco-page-objects-3.
|
4338 |
-
"integrity": "sha512-
|
4339 |
"requires": {
|
4340 |
"clipboardy": "^2.3.0",
|
4341 |
"clone-deep": "^4.0.1",
|
@@ -4698,9 +4672,9 @@
|
|
4698 |
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
|
4699 |
},
|
4700 |
"responselike": {
|
4701 |
-
"version": "2.0.
|
4702 |
-
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.
|
4703 |
-
"integrity": "sha512-
|
4704 |
"requires": {
|
4705 |
"lowercase-keys": "^2.0.0"
|
4706 |
}
|
@@ -5103,9 +5077,9 @@
|
|
5103 |
}
|
5104 |
},
|
5105 |
"vscode-extension-tester-locators": {
|
5106 |
-
"version": "3.
|
5107 |
-
"resolved": "https://registry.npmjs.org/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.
|
5108 |
-
"integrity": "sha512-
|
5109 |
"requires": {}
|
5110 |
},
|
5111 |
"which": {
|
1 |
{
|
2 |
"name": "vscode-extension-tester",
|
3 |
+
"version": "5.1.0",
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "vscode-extension-tester",
|
9 |
+
"version": "5.1.0",
|
10 |
"license": "Apache-2.0",
|
11 |
"dependencies": {
|
12 |
"@types/selenium-webdriver": "^4.1.1",
|
13 |
"commander": "^8.0.0",
|
14 |
"compare-versions": "^3.6.0",
|
15 |
"fs-extra": "^10.0.0",
|
16 |
"glob": "^7.1.7",
|
17 |
+
"got": "^11.8.5",
|
18 |
"hpagent": "^0.1.2",
|
19 |
"js-yaml": "^4.1.0",
|
20 |
+
"monaco-page-objects": "^3.1.0",
|
21 |
"sanitize-filename": "^1.6.3",
|
22 |
"selenium-webdriver": "^4.2.0",
|
23 |
"targz": "^1.0.1",
|
24 |
"unzip-stream": "^0.3.0",
|
25 |
"vsce": "^2.11.0",
|
26 |
+
"vscode-extension-tester-locators": "^3.1.0"
|
27 |
},
|
28 |
"bin": {
|
29 |
"extest": "out/cli.js"
|
112 |
"integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==",
|
113 |
"dev": true
|
114 |
},
|
|
|
|
|
|
|
|
|
|
|
115 |
"node_modules/@types/keyv": {
|
116 |
+
"version": "4.2.0",
|
117 |
+
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz",
|
118 |
+
"integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==",
|
119 |
+
"deprecated": "This is a stub types definition. keyv provides its own type definitions, so you do not need this installed.",
|
120 |
"dependencies": {
|
121 |
+
"keyv": "*"
|
122 |
}
|
123 |
},
|
124 |
"node_modules/@types/minimatch": {
|
651 |
}
|
652 |
},
|
653 |
"node_modules/clone-response": {
|
654 |
+
"version": "1.0.3",
|
655 |
+
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
|
656 |
+
"integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
|
657 |
"dependencies": {
|
658 |
"mimic-response": "^1.0.0"
|
659 |
+
},
|
660 |
+
"funding": {
|
661 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
662 |
}
|
663 |
},
|
664 |
"node_modules/code-point-at": {
|
700 |
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
|
701 |
"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
|
702 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
703 |
"node_modules/concat-map": {
|
704 |
"version": "0.0.1",
|
705 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
1531 |
}
|
1532 |
},
|
1533 |
"node_modules/keyv": {
|
1534 |
+
"version": "4.5.0",
|
1535 |
+
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz",
|
1536 |
+
"integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==",
|
1537 |
"dependencies": {
|
|
|
1538 |
"json-buffer": "3.0.1"
|
1539 |
}
|
1540 |
},
|
1755 |
}
|
1756 |
},
|
1757 |
"node_modules/monaco-page-objects": {
|
1758 |
+
"version": "3.1.0",
|
1759 |
+
"resolved": "https://registry.npmjs.org/monaco-page-objects/-/monaco-page-objects-3.1.0.tgz",
|
1760 |
+
"integrity": "sha512-B0ylDy9UcCeOkYHoWziimJDcBzgWPJHBrjYzKtBMjEw++Oo3eFJ00RN1XDjgzW6o7+wlG25M/atJ9010QfLoFw==",
|
1761 |
"dependencies": {
|
1762 |
"clipboardy": "^2.3.0",
|
1763 |
"clone-deep": "^4.0.1",
|
2228 |
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
|
2229 |
},
|
2230 |
"node_modules/responselike": {
|
2231 |
+
"version": "2.0.1",
|
2232 |
+
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
|
2233 |
+
"integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
|
2234 |
"dependencies": {
|
2235 |
"lowercase-keys": "^2.0.0"
|
2236 |
+
},
|
2237 |
+
"funding": {
|
2238 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
2239 |
}
|
2240 |
},
|
2241 |
"node_modules/rimraf": {
|
2759 |
}
|
2760 |
},
|
2761 |
"node_modules/vscode-extension-tester-locators": {
|
2762 |
+
"version": "3.1.0",
|
2763 |
+
"resolved": "https://registry.npmjs.org/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.1.0.tgz",
|
2764 |
+
"integrity": "sha512-Q4gfJHnA1Kf6W0UOSE16jvPB+hk0aQ1r9b9bjM311r30hsdHkzBpAYw58YS8ZfzB7AgA4Jum/SM9q4WM2fwedg==",
|
2765 |
"peerDependencies": {
|
2766 |
+
"monaco-page-objects": "^3.1.0",
|
2767 |
"selenium-webdriver": "^4.2.0"
|
2768 |
}
|
2769 |
},
|
3095 |
"integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==",
|
3096 |
"dev": true
|
3097 |
},
|
|
|
|
|
|
|
|
|
|
|
3098 |
"@types/keyv": {
|
3099 |
+
"version": "4.2.0",
|
3100 |
+
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-4.2.0.tgz",
|
3101 |
+
"integrity": "sha512-xoBtGl5R9jeKUhc8ZqeYaRDx04qqJ10yhhXYGmJ4Jr8qKpvMsDQQrNUvF/wUJ4klOtmJeJM+p2Xo3zp9uaC3tw==",
|
3102 |
"requires": {
|
3103 |
+
"keyv": "*"
|
3104 |
}
|
3105 |
},
|
3106 |
"@types/minimatch": {
|
3499 |
}
|
3500 |
},
|
3501 |
"clone-response": {
|
3502 |
+
"version": "1.0.3",
|
3503 |
+
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
|
3504 |
+
"integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
|
3505 |
"requires": {
|
3506 |
"mimic-response": "^1.0.0"
|
3507 |
}
|
3536 |
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
|
3537 |
"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
|
3538 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3539 |
"concat-map": {
|
3540 |
"version": "0.0.1",
|
3541 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
4138 |
}
|
4139 |
},
|
4140 |
"keyv": {
|
4141 |
+
"version": "4.5.0",
|
4142 |
+
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz",
|
4143 |
+
"integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==",
|
4144 |
"requires": {
|
|
|
4145 |
"json-buffer": "3.0.1"
|
4146 |
}
|
4147 |
},
|
4307 |
}
|
4308 |
},
|
4309 |
"monaco-page-objects": {
|
4310 |
+
"version": "3.1.0",
|
4311 |
+
"resolved": "https://registry.npmjs.org/monaco-page-objects/-/monaco-page-objects-3.1.0.tgz",
|
4312 |
+
"integrity": "sha512-B0ylDy9UcCeOkYHoWziimJDcBzgWPJHBrjYzKtBMjEw++Oo3eFJ00RN1XDjgzW6o7+wlG25M/atJ9010QfLoFw==",
|
4313 |
"requires": {
|
4314 |
"clipboardy": "^2.3.0",
|
4315 |
"clone-deep": "^4.0.1",
|
4672 |
"integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
|
4673 |
},
|
4674 |
"responselike": {
|
4675 |
+
"version": "2.0.1",
|
4676 |
+
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
|
4677 |
+
"integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
|
4678 |
"requires": {
|
4679 |
"lowercase-keys": "^2.0.0"
|
4680 |
}
|
5077 |
}
|
5078 |
},
|
5079 |
"vscode-extension-tester-locators": {
|
5080 |
+
"version": "3.1.0",
|
5081 |
+
"resolved": "https://registry.npmjs.org/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.1.0.tgz",
|
5082 |
+
"integrity": "sha512-Q4gfJHnA1Kf6W0UOSE16jvPB+hk0aQ1r9b9bjM311r30hsdHkzBpAYw58YS8ZfzB7AgA4Jum/SM9q4WM2fwedg==",
|
5083 |
"requires": {}
|
5084 |
},
|
5085 |
"which": {
|
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"name": "vscode-extension-tester",
|
3 |
-
"version": "5.
|
4 |
"description": "Webdriver Testing for VSCode Extensions",
|
5 |
"main": "out/extester.js",
|
6 |
"types": "out/extester.d.ts",
|
@@ -56,16 +56,16 @@
|
|
56 |
"compare-versions": "^3.6.0",
|
57 |
"fs-extra": "^10.0.0",
|
58 |
"glob": "^7.1.7",
|
59 |
-
"got": "^11.8.
|
60 |
"hpagent": "^0.1.2",
|
61 |
"js-yaml": "^4.1.0",
|
62 |
-
"monaco-page-objects": "^3.
|
63 |
"sanitize-filename": "^1.6.3",
|
64 |
"selenium-webdriver": "^4.2.0",
|
65 |
"targz": "^1.0.1",
|
66 |
"unzip-stream": "^0.3.0",
|
67 |
"vsce": "^2.11.0",
|
68 |
-
"vscode-extension-tester-locators": "^3.
|
69 |
},
|
70 |
"peerDependencies": {
|
71 |
"mocha": ">=5.2.0"
|
1 |
{
|
2 |
"name": "vscode-extension-tester",
|
3 |
+
"version": "5.1.0",
|
4 |
"description": "Webdriver Testing for VSCode Extensions",
|
5 |
"main": "out/extester.js",
|
6 |
"types": "out/extester.d.ts",
|
56 |
"compare-versions": "^3.6.0",
|
57 |
"fs-extra": "^10.0.0",
|
58 |
"glob": "^7.1.7",
|
59 |
+
"got": "^11.8.5",
|
60 |
"hpagent": "^0.1.2",
|
61 |
"js-yaml": "^4.1.0",
|
62 |
+
"monaco-page-objects": "^3.1.0",
|
63 |
"sanitize-filename": "^1.6.3",
|
64 |
"selenium-webdriver": "^4.2.0",
|
65 |
"targz": "^1.0.1",
|
66 |
"unzip-stream": "^0.3.0",
|
67 |
"vsce": "^2.11.0",
|
68 |
+
"vscode-extension-tester-locators": "^3.1.0"
|
69 |
},
|
70 |
"peerDependencies": {
|
71 |
"mocha": ">=5.2.0"
|
@@ -1,12 +1,12 @@
|
|
1 |
{
|
2 |
"name": "monaco-page-objects",
|
3 |
-
"version": "3.
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "monaco-page-objects",
|
9 |
-
"version": "3.
|
10 |
"license": "Apache-2.0",
|
11 |
"dependencies": {
|
12 |
"clipboardy": "^2.3.0",
|
1 |
{
|
2 |
"name": "monaco-page-objects",
|
3 |
+
"version": "3.1.0",
|
4 |
"lockfileVersion": 2,
|
5 |
"requires": true,
|
6 |
"packages": {
|
7 |
"": {
|
8 |
"name": "monaco-page-objects",
|
9 |
+
"version": "3.1.0",
|
10 |
"license": "Apache-2.0",
|
11 |
"dependencies": {
|
12 |
"clipboardy": "^2.3.0",
|
@@ -1,6 +1,6 @@
|
|
1 |
{
|
2 |
"name": "monaco-page-objects",
|
3 |
-
"version": "3.
|
4 |
"description": "Page Objects for Monaco Editor",
|
5 |
"main": "out/index.js",
|
6 |
"types": "out/index.d.ts",
|
1 |
{
|
2 |
"name": "monaco-page-objects",
|
3 |
+
"version": "3.1.0",
|
4 |
"description": "Page Objects for Monaco Editor",
|
5 |
"main": "out/index.js",
|
6 |
"types": "out/index.d.ts",
|
@@ -13,7 +13,7 @@ export class ProblemsView extends AbstractElement {
|
|
13 |
|
14 |
/**
|
15 |
* Set the filter using the input box on the problems view
|
16 |
-
* @param pattern filter to use,
|
17 |
* @returns Promise resolving when the filter pattern is filled in
|
18 |
*/
|
19 |
async setFilter(pattern: string): Promise<void> {
|
@@ -23,7 +23,7 @@ export class ProblemsView extends AbstractElement {
|
|
23 |
|
24 |
/**
|
25 |
* Clear all filters
|
26 |
-
* @returns Promise resolving to the filter field WebElement
|
27 |
*/
|
28 |
async clearFilter(): Promise<WebElement> {
|
29 |
const filterField = await this.enclosingItem.findElement(ProblemsView.locators.BottomBarPanel.actions)
|
@@ -44,12 +44,22 @@ export class ProblemsView extends AbstractElement {
|
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
* To get all markers regardless of type, use MarkerType.Any
|
49 |
* @param type type of markers to retrieve
|
50 |
* @returns Promise resolving to array of Marker objects
|
51 |
*/
|
52 |
-
async
|
53 |
const markers: Marker[] = [];
|
54 |
const elements = await this.findElements(ProblemsView.locators.ProblemsView.markerRow);
|
55 |
for (const element of elements) {
|
@@ -61,6 +71,14 @@ export class ProblemsView extends AbstractElement {
|
|
61 |
}
|
62 |
return markers;
|
63 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
}
|
65 |
|
66 |
/**
|
@@ -79,7 +97,7 @@ export class Marker extends ElementWithContexMenu {
|
|
79 |
async getType(): Promise<MarkerType> {
|
80 |
const twist = await this.findElement(ProblemsView.locators.ProblemsView.markerTwistie);
|
81 |
if ((await twist.getAttribute('class')).indexOf('collapsible') > -1) {
|
82 |
-
return MarkerType.File;
|
83 |
}
|
84 |
const text = await this.getText();
|
85 |
if (text.startsWith('Error')) {
|
13 |
|
14 |
/**
|
15 |
* Set the filter using the input box on the problems view
|
16 |
+
* @param pattern filter to use, preferably a glob pattern
|
17 |
* @returns Promise resolving when the filter pattern is filled in
|
18 |
*/
|
19 |
async setFilter(pattern: string): Promise<void> {
|
23 |
|
24 |
/**
|
25 |
* Clear all filters
|
26 |
+
* @returns Promise resolving to the filter field WebElement
|
27 |
*/
|
28 |
async clearFilter(): Promise<WebElement> {
|
29 |
const filterField = await this.enclosingItem.findElement(ProblemsView.locators.BottomBarPanel.actions)
|
44 |
}
|
45 |
|
46 |
/**
|
47 |
+
* @deprecated The method should not be used and getAllVisibleMarkers() should be used instead.
|
48 |
+
*/
|
49 |
+
async getAllMarkers(type: MarkerType): Promise<Marker[]> {
|
50 |
+
return this.getAllVisibleMarkers(type);
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Get all visible markers from the problems view with the given type.
|
55 |
+
* Warning: this only returns the markers that are visible, and not the
|
56 |
+
* entire list, so calls to this function may change depending on the
|
57 |
+
* environment in which the tests are running in.
|
58 |
* To get all markers regardless of type, use MarkerType.Any
|
59 |
* @param type type of markers to retrieve
|
60 |
* @returns Promise resolving to array of Marker objects
|
61 |
*/
|
62 |
+
async getAllVisibleMarkers(type: MarkerType): Promise<Marker[]> {
|
63 |
const markers: Marker[] = [];
|
64 |
const elements = await this.findElements(ProblemsView.locators.ProblemsView.markerRow);
|
65 |
for (const element of elements) {
|
71 |
}
|
72 |
return markers;
|
73 |
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Gets the count badge
|
77 |
+
* @returns Promise resolving to the WebElement representing the count badge
|
78 |
+
*/
|
79 |
+
async getCountBadge(): Promise<WebElement> {
|
80 |
+
return await this.findElement(ProblemsView.locators.ProblemsView.changeCount);
|
81 |
+
}
|
82 |
}
|
83 |
|
84 |
/**
|
97 |
async getType(): Promise<MarkerType> {
|
98 |
const twist = await this.findElement(ProblemsView.locators.ProblemsView.markerTwistie);
|
99 |
if ((await twist.getAttribute('class')).indexOf('collapsible') > -1) {
|
100 |
+
return MarkerType.File;
|
101 |
}
|
102 |
const text = await this.getText();
|
103 |
if (text.startsWith('Error')) {
|
@@ -123,7 +123,9 @@ export class TerminalView extends ChannelView {
|
|
123 |
const workbench = new Workbench();
|
124 |
await workbench.executeCommand('terminal select all');
|
125 |
await workbench.getDriver().sleep(500);
|
126 |
-
await
|
|
|
|
|
127 |
await workbench.getDriver().sleep(500);
|
128 |
const text = clipboard.readSync();
|
129 |
clipboard.writeSync('');
|
123 |
const workbench = new Workbench();
|
124 |
await workbench.executeCommand('terminal select all');
|
125 |
await workbench.getDriver().sleep(500);
|
126 |
+
const menu = await this.openContextMenu();
|
127 |
+
await workbench.getDriver().sleep(500);
|
128 |
+
await menu.select('Copy');
|
129 |
await workbench.getDriver().sleep(500);
|
130 |
const text = clipboard.readSync();
|
131 |
clipboard.writeSync('');
|
@@ -44,6 +44,13 @@ export class DebugToolbar extends AbstractElement {
|
|
44 |
await (await this.getButton('continue')).click();
|
45 |
}
|
46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
/**
|
48 |
* Click Pause
|
49 |
*/
|
@@ -89,4 +96,4 @@ export class DebugToolbar extends AbstractElement {
|
|
89 |
private async getButton(name: string): Promise<WebElement> {
|
90 |
return this.findElement(DebugToolbar.locators.DebugToolbar.button(name));
|
91 |
}
|
92 |
-
}
|
44 |
await (await this.getButton('continue')).click();
|
45 |
}
|
46 |
|
47 |
+
/**
|
48 |
+
* Click Disconnect
|
49 |
+
*/
|
50 |
+
async disconnect(): Promise<void> {
|
51 |
+
await (await this.getButton('disconnect')).click();
|
52 |
+
}
|
53 |
+
|
54 |
/**
|
55 |
* Click Pause
|
56 |
*/
|
96 |
private async getButton(name: string): Promise<WebElement> {
|
97 |
return this.findElement(DebugToolbar.locators.DebugToolbar.button(name));
|
98 |
}
|
99 |
+
}
|
@@ -1,5 +1,5 @@
|
|
1 |
import { By } from "selenium-webdriver";
|
2 |
-
import { DeepPartial } from 'ts-essentials';
|
3 |
|
4 |
/**
|
5 |
* Type definitions for all used locators
|
@@ -55,6 +55,7 @@ export interface Locators {
|
|
55 |
markerRow: By
|
56 |
rowLabel: string
|
57 |
markerTwistie: By
|
|
|
58 |
}
|
59 |
TerminalView: {
|
60 |
constructor: By
|
@@ -299,7 +300,7 @@ export interface Locators {
|
|
299 |
ctor: By
|
300 |
button: (title: string) => By
|
301 |
}
|
302 |
-
|
303 |
// Status Bar
|
304 |
StatusBar: {
|
305 |
constructor: By
|
306 |
-
|
1 |
import { By } from "selenium-webdriver";
|
2 |
+
import { DeepPartial } from 'ts-essentials';
|
3 |
|
4 |
/**
|
5 |
* Type definitions for all used locators
|
55 |
markerRow: By
|
56 |
rowLabel: string
|
57 |
markerTwistie: By
|
58 |
+
changeCount: By
|
59 |
}
|
60 |
TerminalView: {
|
61 |
constructor: By
|
300 |
ctor: By
|
301 |
button: (title: string) => By
|
302 |
}
|
303 |
+
|
304 |
// Status Bar
|
305 |
StatusBar: {
|
306 |
constructor: By
|
307 |
+
++ sample-projects/helloworld-sample/LICENSE.md
|
@@ -10,7 +10,7 @@ describe('Bottom Bar Example Tests', () => {
|
|
10 |
// init the bottom bar page object
|
11 |
bottomBar = new BottomBarPanel();
|
12 |
|
13 |
-
// make sure the panel is open
|
14 |
await bottomBar.toggle(true);
|
15 |
});
|
16 |
|
@@ -22,7 +22,7 @@ describe('Bottom Bar Example Tests', () => {
|
|
22 |
// wait condition for problem markers to exist within problems view
|
23 |
async function problemsExist(view: ProblemsView) {
|
24 |
// search for markers regardless of type until some are found
|
25 |
-
const markers = await view.
|
26 |
return markers.length > 0;
|
27 |
}
|
28 |
|
@@ -41,25 +41,27 @@ describe('Bottom Bar Example Tests', () => {
|
|
41 |
await view.getDriver().wait(() => { return problemsExist(view); }, 15000);
|
42 |
});
|
43 |
|
|
|
|
|
44 |
// now we can look at the error markers
|
45 |
-
it('Error markers are displayed', async () => {
|
46 |
// generally, there are 3 marker types (warning, error, and file - file just contains other markers though)
|
47 |
-
// we want to see the errors
|
48 |
-
const errors = await view.
|
49 |
|
50 |
// assert that there are errors (there should be about 8 in the file)
|
51 |
expect(errors.length).is.greaterThan(5);
|
52 |
});
|
53 |
|
54 |
// we can make sure no warnings are present at the same time
|
55 |
-
it('There are no warnings', async () => {
|
56 |
-
const warnings = await view.
|
57 |
expect(warnings).is.empty;
|
58 |
});
|
59 |
|
60 |
// there is also a file marker (out problematic file that contains the errors)
|
61 |
-
it('There is a file marker', async () => {
|
62 |
-
const files = await view.
|
63 |
const file = files[0];
|
64 |
|
65 |
// we can get the text of the marker
|
@@ -71,13 +73,31 @@ describe('Bottom Bar Example Tests', () => {
|
|
71 |
await file.toggleExpand(true);
|
72 |
});
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
// we can also define filtering for problems
|
75 |
it('Filtering works', async () => {
|
76 |
// set filter to something more specific
|
77 |
await view.setFilter('aa');
|
78 |
// wait a bit for the filter to apply
|
79 |
await new Promise(res => setTimeout(res, 1000));
|
80 |
-
const errors = await view.
|
81 |
|
82 |
// now there should be just a single error
|
83 |
expect(errors.length).equals(1);
|
@@ -108,7 +128,7 @@ describe('Bottom Bar Example Tests', () => {
|
|
108 |
it('Clear the output channel', async () => {
|
109 |
await view.clearText();
|
110 |
const text = await view.getText();
|
111 |
-
|
112 |
// now the log is technically empty, it just contains a newline character
|
113 |
expect(text).equals('\n');
|
114 |
});
|
10 |
// init the bottom bar page object
|
11 |
bottomBar = new BottomBarPanel();
|
12 |
|
13 |
+
// make sure the panel is open
|
14 |
await bottomBar.toggle(true);
|
15 |
});
|
16 |
|
22 |
// wait condition for problem markers to exist within problems view
|
23 |
async function problemsExist(view: ProblemsView) {
|
24 |
// search for markers regardless of type until some are found
|
25 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
26 |
return markers.length > 0;
|
27 |
}
|
28 |
|
41 |
await view.getDriver().wait(() => { return problemsExist(view); }, 15000);
|
42 |
});
|
43 |
|
44 |
+
// These tests use getAllVisibleMarkers() and are unreliable and should not be included.
|
45 |
+
//
|
46 |
// now we can look at the error markers
|
47 |
+
it.skip('Error markers are displayed', async () => {
|
48 |
// generally, there are 3 marker types (warning, error, and file - file just contains other markers though)
|
49 |
+
// we want to see the errors
|
50 |
+
const errors = await view.getAllVisibleMarkers(MarkerType.Error);
|
51 |
|
52 |
// assert that there are errors (there should be about 8 in the file)
|
53 |
expect(errors.length).is.greaterThan(5);
|
54 |
});
|
55 |
|
56 |
// we can make sure no warnings are present at the same time
|
57 |
+
it.skip('There are no warnings', async () => {
|
58 |
+
const warnings = await view.getAllVisibleMarkers(MarkerType.Warning);
|
59 |
expect(warnings).is.empty;
|
60 |
});
|
61 |
|
62 |
// there is also a file marker (out problematic file that contains the errors)
|
63 |
+
it.skip('There is a file marker', async () => {
|
64 |
+
const files = await view.getAllVisibleMarkers(MarkerType.File);
|
65 |
const file = files[0];
|
66 |
|
67 |
// we can get the text of the marker
|
73 |
await file.toggleExpand(true);
|
74 |
});
|
75 |
|
76 |
+
it('Markers are displayed', async () => {
|
77 |
+
// Need to throttle this test in order for VS Code to load/display all of the errors
|
78 |
+
// and warnings.
|
79 |
+
await new Promise(res => setTimeout((res), 3000));
|
80 |
+
|
81 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
82 |
+
const badgeElement = await view.getCountBadge();
|
83 |
+
const badgeText = await badgeElement.getText();
|
84 |
+
|
85 |
+
// getAllVisibleMarkers() only returns the **visible** markers, so we can't rely on the count,
|
86 |
+
// but we should be able to rely on at least one appearing.
|
87 |
+
expect(markers.length).is.greaterThan(0);
|
88 |
+
|
89 |
+
// Regardless of how many are visible, the first row contains the summary, and the badge
|
90 |
+
// contains the count.
|
91 |
+
expect(badgeText).equals("19");
|
92 |
+
});
|
93 |
+
|
94 |
// we can also define filtering for problems
|
95 |
it('Filtering works', async () => {
|
96 |
// set filter to something more specific
|
97 |
await view.setFilter('aa');
|
98 |
// wait a bit for the filter to apply
|
99 |
await new Promise(res => setTimeout(res, 1000));
|
100 |
+
const errors = await view.getAllVisibleMarkers(MarkerType.Error);
|
101 |
|
102 |
// now there should be just a single error
|
103 |
expect(errors.length).equals(1);
|
128 |
it('Clear the output channel', async () => {
|
129 |
await view.clearText();
|
130 |
const text = await view.getText();
|
131 |
+
|
132 |
// now the log is technically empty, it just contains a newline character
|
133 |
expect(text).equals('\n');
|
134 |
});
|
@@ -1,7 +1,7 @@
|
|
1 |
#!/usr/bin/env node
|
2 |
|
3 |
import { program } from 'commander';
|
4 |
-
import { ExTester
|
5 |
import { ReleaseQuality } from './util/codeUtil';
|
6 |
const pjson = require('../package.json');
|
7 |
|
@@ -15,8 +15,7 @@ program.command('get-vscode')
|
|
15 |
.option('-t, --type <type>', 'Type of VSCode release (stable/insider)')
|
16 |
.action(withErrors(async (cmd) => {
|
17 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type));
|
18 |
-
|
19 |
-
await extest.downloadCode(version);
|
20 |
}));
|
21 |
|
22 |
program.command('get-chromedriver')
|
@@ -26,8 +25,7 @@ program.command('get-chromedriver')
|
|
26 |
.option('-t, --type <type>', 'Type of VSCode release (stable/insider)')
|
27 |
.action(withErrors(async (cmd) => {
|
28 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type));
|
29 |
-
|
30 |
-
await extest.downloadChromeDriver(version);
|
31 |
}));
|
32 |
|
33 |
program.command('install-vsix')
|
@@ -67,8 +65,7 @@ program.command('setup-tests')
|
|
67 |
.option('-i, --install_dependencies', 'Automatically install extensions your extension depends on', false)
|
68 |
.action(withErrors(async (cmd) => {
|
69 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir);
|
70 |
-
|
71 |
-
await extest.setupRequirements({vscodeVersion, useYarn: cmd.yarn, installDependencies: cmd.install_dependencies});
|
72 |
}));
|
73 |
|
74 |
program.command('run-tests <testFiles>')
|
@@ -85,8 +82,7 @@ program.command('run-tests <testFiles>')
|
|
85 |
.option('-r --open_resource <resources...>', 'Open resources in VS Code. Multiple files and folders can be specified.')
|
86 |
.action(withErrors(async (testFiles, cmd) => {
|
87 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir);
|
88 |
-
|
89 |
-
await extest.runTests(testFiles, {vscodeVersion, settings: cmd.code_settings, cleanup: cmd.uninstall_extension, config: cmd.mocha_config, logLevel: cmd.log_level, offline: cmd.offline, resources: cmd.open_resource ?? []});
|
90 |
}));
|
91 |
|
92 |
program.command('setup-and-run <testFiles>')
|
@@ -105,17 +101,11 @@ program.command('setup-and-run <testFiles>')
|
|
105 |
.option('-r --open_resource <resources...>', 'Open resources in VS Code. Multiple files and folders can be specified.')
|
106 |
.action(withErrors(async (testFiles, cmd) => {
|
107 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir);
|
108 |
-
|
109 |
-
await extest.setupAndRunTests(testFiles, vscodeVersion, {useYarn: cmd.yarn, installDependencies: cmd.install_dependencies}, {settings: cmd.code_settings, cleanup: cmd.uninstall_extension, config: cmd.mocha_config, logLevel: cmd.log_level, resources: cmd.open_resource ?? []});
|
110 |
}));
|
111 |
|
112 |
program.parse(process.argv);
|
113 |
|
114 |
-
function loadCodeVersion(version: string | undefined) {
|
115 |
-
const code_version = process.env.CODE_VERSION ? process.env.CODE_VERSION : version;
|
116 |
-
return code_version && code_version.toLowerCase() === 'max' ? VSCODE_VERSION_MAX : (code_version && code_version.toLowerCase() === 'min' ? VSCODE_VERSION_MIN : code_version);
|
117 |
-
}
|
118 |
-
|
119 |
function withErrors(command: (...args: any[]) => Promise<void>) {
|
120 |
return async (...args: any[]) => {
|
121 |
try {
|
1 |
#!/usr/bin/env node
|
2 |
|
3 |
import { program } from 'commander';
|
4 |
+
import { ExTester } from './extester';
|
5 |
import { ReleaseQuality } from './util/codeUtil';
|
6 |
const pjson = require('../package.json');
|
7 |
|
15 |
.option('-t, --type <type>', 'Type of VSCode release (stable/insider)')
|
16 |
.action(withErrors(async (cmd) => {
|
17 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type));
|
18 |
+
await extest.downloadCode(cmd.code_version);
|
|
|
19 |
}));
|
20 |
|
21 |
program.command('get-chromedriver')
|
25 |
.option('-t, --type <type>', 'Type of VSCode release (stable/insider)')
|
26 |
.action(withErrors(async (cmd) => {
|
27 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type));
|
28 |
+
await extest.downloadChromeDriver(cmd.code_version);
|
|
|
29 |
}));
|
30 |
|
31 |
program.command('install-vsix')
|
65 |
.option('-i, --install_dependencies', 'Automatically install extensions your extension depends on', false)
|
66 |
.action(withErrors(async (cmd) => {
|
67 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir);
|
68 |
+
await extest.setupRequirements({vscodeVersion: cmd.code_version, useYarn: cmd.yarn, installDependencies: cmd.install_dependencies});
|
|
|
69 |
}));
|
70 |
|
71 |
program.command('run-tests <testFiles>')
|
82 |
.option('-r --open_resource <resources...>', 'Open resources in VS Code. Multiple files and folders can be specified.')
|
83 |
.action(withErrors(async (testFiles, cmd) => {
|
84 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir);
|
85 |
+
await extest.runTests(testFiles, {vscodeVersion: cmd.code_version, settings: cmd.code_settings, cleanup: cmd.uninstall_extension, config: cmd.mocha_config, logLevel: cmd.log_level, offline: cmd.offline, resources: cmd.open_resource ?? []});
|
|
|
86 |
}));
|
87 |
|
88 |
program.command('setup-and-run <testFiles>')
|
101 |
.option('-r --open_resource <resources...>', 'Open resources in VS Code. Multiple files and folders can be specified.')
|
102 |
.action(withErrors(async (testFiles, cmd) => {
|
103 |
const extest = new ExTester(cmd.storage, codeStream(cmd.type), cmd.extensions_dir);
|
104 |
+
await extest.setupAndRunTests(testFiles, cmd.code_version, {useYarn: cmd.yarn, installDependencies: cmd.install_dependencies}, {settings: cmd.code_settings, cleanup: cmd.uninstall_extension, config: cmd.mocha_config, logLevel: cmd.log_level, resources: cmd.open_resource ?? []});
|
|
|
105 |
}));
|
106 |
|
107 |
program.parse(process.argv);
|
108 |
|
|
|
|
|
|
|
|
|
|
|
109 |
function withErrors(command: (...args: any[]) => Promise<void>) {
|
110 |
return async (...args: any[]) => {
|
111 |
try {
|
@@ -46,7 +46,7 @@ export class ExTester {
|
|
46 |
* @param version version to download, default latest
|
47 |
*/
|
48 |
async downloadCode(version: string = 'latest'): Promise<void> {
|
49 |
-
return this.code.downloadVSCode(version);
|
50 |
}
|
51 |
|
52 |
/**
|
@@ -89,7 +89,7 @@ export class ExTester {
|
|
89 |
* @param vscodeVersion selected versio nof VSCode, default latest
|
90 |
*/
|
91 |
async downloadChromeDriver(vscodeVersion: string = 'latest'): Promise<void> {
|
92 |
-
const chromiumVersion = await this.code.getChromiumVersion(vscodeVersion);
|
93 |
await this.chrome.downloadChromeDriverForChromiumVersion(chromiumVersion);
|
94 |
}
|
95 |
|
@@ -101,10 +101,12 @@ export class ExTester {
|
|
101 |
*/
|
102 |
async setupRequirements(options: SetupOptions = DEFAULT_SETUP_OPTIONS, offline = false): Promise<void> {
|
103 |
const { useYarn, vscodeVersion, installDependencies } = options;
|
104 |
-
|
|
|
|
|
105 |
if (!offline) {
|
106 |
-
await this.downloadCode(
|
107 |
-
await this.downloadChromeDriver(
|
108 |
} else {
|
109 |
console.log('Attempting Setup in offline mode');
|
110 |
const expectedChromeVersion = (await this.code.checkOfflineRequirements()).split('.')[0];
|
@@ -143,6 +145,22 @@ export class ExTester {
|
|
143 |
* @returns Promise resolving to the mocha process exit code - 0 for no failures, 1 otherwise
|
144 |
*/
|
145 |
async runTests(testFilesPattern: string, runOptions: RunOptions = DEFAULT_RUN_OPTIONS): Promise<number> {
|
|
|
146 |
return this.code.runTests(testFilesPattern, runOptions);
|
147 |
}
|
148 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
* @param version version to download, default latest
|
47 |
*/
|
48 |
async downloadCode(version: string = 'latest'): Promise<void> {
|
49 |
+
return this.code.downloadVSCode(loadCodeVersion(version));
|
50 |
}
|
51 |
|
52 |
/**
|
89 |
* @param vscodeVersion selected versio nof VSCode, default latest
|
90 |
*/
|
91 |
async downloadChromeDriver(vscodeVersion: string = 'latest'): Promise<void> {
|
92 |
+
const chromiumVersion = await this.code.getChromiumVersion(loadCodeVersion(vscodeVersion));
|
93 |
await this.chrome.downloadChromeDriverForChromiumVersion(chromiumVersion);
|
94 |
}
|
95 |
|
101 |
*/
|
102 |
async setupRequirements(options: SetupOptions = DEFAULT_SETUP_OPTIONS, offline = false): Promise<void> {
|
103 |
const { useYarn, vscodeVersion, installDependencies } = options;
|
104 |
+
|
105 |
+
const vscodeParsedVersion = loadCodeVersion(vscodeVersion);
|
106 |
+
console.log(`Downloading VSCode: ${vscodeParsedVersion}`);
|
107 |
if (!offline) {
|
108 |
+
await this.downloadCode(vscodeParsedVersion);
|
109 |
+
await this.downloadChromeDriver(vscodeParsedVersion);
|
110 |
} else {
|
111 |
console.log('Attempting Setup in offline mode');
|
112 |
const expectedChromeVersion = (await this.code.checkOfflineRequirements()).split('.')[0];
|
145 |
* @returns Promise resolving to the mocha process exit code - 0 for no failures, 1 otherwise
|
146 |
*/
|
147 |
async runTests(testFilesPattern: string, runOptions: RunOptions = DEFAULT_RUN_OPTIONS): Promise<number> {
|
148 |
+
runOptions.vscodeVersion = loadCodeVersion(runOptions.vscodeVersion);
|
149 |
return this.code.runTests(testFilesPattern, runOptions);
|
150 |
}
|
151 |
+
}
|
152 |
+
|
153 |
+
export function loadCodeVersion(version: string | undefined): string {
|
154 |
+
const code_version = process.env.CODE_VERSION ? process.env.CODE_VERSION : version;
|
155 |
+
|
156 |
+
if (code_version !== undefined) {
|
157 |
+
if (code_version.toLowerCase() === 'max') {
|
158 |
+
return VSCODE_VERSION_MAX;
|
159 |
+
}
|
160 |
+
if (code_version.toLowerCase() === 'min') {
|
161 |
+
return VSCODE_VERSION_MIN;
|
162 |
+
}
|
163 |
+
return code_version;
|
164 |
+
}
|
165 |
+
return 'latest';
|
166 |
+
}
|
@@ -31,58 +31,58 @@ import { expect } from 'chai';
|
|
31 |
});
|
32 |
|
33 |
it('get all markers works', async () => {
|
34 |
-
const markers = await view.
|
35 |
expect(markers.length).greaterThan(1);
|
36 |
});
|
37 |
|
38 |
it('get warnings works', async () => {
|
39 |
-
const markers = await view.
|
40 |
expect(markers).empty;
|
41 |
});
|
42 |
|
43 |
it('get errors works', async () => {
|
44 |
-
const markers = await view.
|
45 |
expect(markers.length).equals(1);
|
46 |
});
|
47 |
|
48 |
it('get files works', async () => {
|
49 |
-
const markers = await view.
|
50 |
expect(markers.length).equals(1);
|
51 |
});
|
52 |
|
53 |
it('filtering works', async () => {
|
54 |
await view.setFilter('aaaa');
|
55 |
await view.getDriver().sleep(500);
|
56 |
-
const markers = await view.
|
57 |
expect(markers.length).equals(2);
|
58 |
});
|
59 |
|
60 |
describe('Marker', () => {
|
61 |
it('getType works', async () => {
|
62 |
-
const markers = await view.
|
63 |
expect(await markers[0].getType()).equals(MarkerType.Error);
|
64 |
});
|
65 |
|
66 |
it('getText works', async () => {
|
67 |
-
const markers = await view.
|
68 |
expect(await markers[0].getText()).has.string('test-file.ts');
|
69 |
});
|
70 |
|
71 |
it('toggleExpand works', async () => {
|
72 |
-
const marker = (await view.
|
73 |
await marker.toggleExpand(false);
|
74 |
-
let markers = await view.
|
75 |
expect(markers.length).equals(1);
|
76 |
|
77 |
|
78 |
await marker.toggleExpand(true);
|
79 |
-
markers = await view.
|
80 |
expect(markers.length).equals(2);
|
81 |
});
|
82 |
});
|
83 |
});
|
84 |
|
85 |
async function problemsExist(view: ProblemsView) {
|
86 |
-
const markers = await view.
|
87 |
return markers.length > 0;
|
88 |
}
|
31 |
});
|
32 |
|
33 |
it('get all markers works', async () => {
|
34 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
35 |
expect(markers.length).greaterThan(1);
|
36 |
});
|
37 |
|
38 |
it('get warnings works', async () => {
|
39 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Warning);
|
40 |
expect(markers).empty;
|
41 |
});
|
42 |
|
43 |
it('get errors works', async () => {
|
44 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Error);
|
45 |
expect(markers.length).equals(1);
|
46 |
});
|
47 |
|
48 |
it('get files works', async () => {
|
49 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.File);
|
50 |
expect(markers.length).equals(1);
|
51 |
});
|
52 |
|
53 |
it('filtering works', async () => {
|
54 |
await view.setFilter('aaaa');
|
55 |
await view.getDriver().sleep(500);
|
56 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
57 |
expect(markers.length).equals(2);
|
58 |
});
|
59 |
|
60 |
describe('Marker', () => {
|
61 |
it('getType works', async () => {
|
62 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Error);
|
63 |
expect(await markers[0].getType()).equals(MarkerType.Error);
|
64 |
});
|
65 |
|
66 |
it('getText works', async () => {
|
67 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.File);
|
68 |
expect(await markers[0].getText()).has.string('test-file.ts');
|
69 |
});
|
70 |
|
71 |
it('toggleExpand works', async () => {
|
72 |
+
const marker = (await view.getAllVisibleMarkers(MarkerType.File))[0];
|
73 |
await marker.toggleExpand(false);
|
74 |
+
let markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
75 |
expect(markers.length).equals(1);
|
76 |
|
77 |
|
78 |
await marker.toggleExpand(true);
|
79 |
+
markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
80 |
expect(markers.length).equals(2);
|
81 |
});
|
82 |
});
|
83 |
});
|
84 |
|
85 |
async function problemsExist(view: ProblemsView) {
|
86 |
+
const markers = await view.getAllVisibleMarkers(MarkerType.Any);
|
87 |
return markers.length > 0;
|
88 |
}
|
VSCode Extension Tester is a package designed to help you run UI tests for your VS Code extensions using selenium-webdriver.
The first part is to automate all the necessary setup steps to launch webdriver tests:
The second part is to provide an extendable page object API for more convenient test writing.
Simply install it into your extension devDependencies to get started:
npm install --save-dev vscode-extension-tester
Make sure to check out the wiki for detailed instructions.
For the whole API reference, you can generate typedoc by running
npm run doc
The results can then be found in the 'docs' directory.
In the 4.0 update, the ExTester
API was revamped. If you are not using the API to launch your tests, no action is needed here.
The methods setupRequirements
, runTests
and setupAndRunTests
have had their arguments changed from the long telescope list to structured objects.
The new signatures now involve SetupOptions
and RunOptions
objects respectively:
setupRequirements(options: SetupOptions)
runTests(options: RunOptions)
setupAndRunTests(testFilesPattern: string, vscodeVersion: string = 'latest', setupOptions: SetupOptions, runOptions: RunOptions)
(though here the options don't include vscode version)Both interfaces are exported and contain the list of options you would use as arguments in their respective methods. Any argument that used to have a default value is marked as optional in the interfaces.
A few page objects have had slight changes to their API. Others have had their inner workings changed that may influence tests with tight timeouts.
ActionBar
methods getViewControl
and getGlobalAction
are now async, make sure to await themViewControl
and ActionsItem
method getTitle
is now async, make sure to awaitViewControl
and ActionsItem
contructors were changed to take a WebElement
directly, instead of a titleActionBar#getViewControl
or getGlobalAction
instead to get the proper objectExtension Tester runs with all its features on Linux and Windows OSes. MacOS support is limited, due to the title bar and context menus being native only, therefore unavailable for webdriver to handle.
In order to run the tests successfully you will need the following:
Building the native module also requires python and possibly a c/c++ compiler
NOTE: Some Linux (CentOS-based) users have reported their tests getting stuck on launch. This is likely due to a missing dependency on ChromeDriver that runs underneath. If such a scenario occurs, we recommend installing the Chrome browser rpm, since it depends on all the required libraries.
Extension Tester currently supports the latest 5 minor releases of VS Code (subject to change if VS Code 2.x ever comes out).
Additionally, the oldest release of VS Code that can be successfully used with Extension Tester is 1.37.0
. Older versions of VS Code might not work at all.
Versions older than the supported 5 latest releases, but still newer than 1.37.0
will most likely work just fine. However, if they stop working over time, there will be no more fixes to make them work. Unless you'd like to contribute these.
If you'd like to help us get better, we appreciate it!
Check out our Contribution Guide on how to do that.