@ohos-ports/web-test-runner 1.0.0-beta.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.
- package/README.md +65 -0
- package/dist/TestRunnerStartError.d.ts +3 -0
- package/dist/TestRunnerStartError.d.ts.map +1 -0
- package/dist/TestRunnerStartError.js +7 -0
- package/dist/TestRunnerStartError.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -0
- package/dist/config/TestRunnerConfig.d.ts +10 -0
- package/dist/config/TestRunnerConfig.d.ts.map +1 -0
- package/dist/config/TestRunnerConfig.js +3 -0
- package/dist/config/TestRunnerConfig.js.map +1 -0
- package/dist/config/collectGroupConfigs.d.ts +3 -0
- package/dist/config/collectGroupConfigs.d.ts.map +1 -0
- package/dist/config/collectGroupConfigs.js +43 -0
- package/dist/config/collectGroupConfigs.js.map +1 -0
- package/dist/config/loadLauncher.d.ts +3 -0
- package/dist/config/loadLauncher.d.ts.map +1 -0
- package/dist/config/loadLauncher.js +43 -0
- package/dist/config/loadLauncher.js.map +1 -0
- package/dist/config/mergeConfigs.d.ts +3 -0
- package/dist/config/mergeConfigs.d.ts.map +1 -0
- package/dist/config/mergeConfigs.js +26 -0
- package/dist/config/mergeConfigs.js.map +1 -0
- package/dist/config/parseConfig.d.ts +9 -0
- package/dist/config/parseConfig.d.ts.map +1 -0
- package/dist/config/parseConfig.js +216 -0
- package/dist/config/parseConfig.js.map +1 -0
- package/dist/config/readCliArgs.d.ts +15 -0
- package/dist/config/readCliArgs.d.ts.map +1 -0
- package/dist/config/readCliArgs.js +148 -0
- package/dist/config/readCliArgs.js.map +1 -0
- package/dist/config/readFileConfig.d.ts +18 -0
- package/dist/config/readFileConfig.d.ts.map +1 -0
- package/dist/config/readFileConfig.js +22 -0
- package/dist/config/readFileConfig.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/TestRunnerLogger.d.ts +15 -0
- package/dist/logger/TestRunnerLogger.d.ts.map +1 -0
- package/dist/logger/TestRunnerLogger.js +48 -0
- package/dist/logger/TestRunnerLogger.js.map +1 -0
- package/dist/reporter/defaultReporter.d.ts +7 -0
- package/dist/reporter/defaultReporter.d.ts.map +1 -0
- package/dist/reporter/defaultReporter.js +51 -0
- package/dist/reporter/defaultReporter.js.map +1 -0
- package/dist/reporter/dotReporter.d.ts +4 -0
- package/dist/reporter/dotReporter.d.ts.map +1 -0
- package/dist/reporter/dotReporter.js +53 -0
- package/dist/reporter/dotReporter.js.map +1 -0
- package/dist/reporter/getCodeCoverage.d.ts +3 -0
- package/dist/reporter/getCodeCoverage.d.ts.map +1 -0
- package/dist/reporter/getCodeCoverage.js +36 -0
- package/dist/reporter/getCodeCoverage.js.map +1 -0
- package/dist/reporter/getTestProgress.d.ts +16 -0
- package/dist/reporter/getTestProgress.d.ts.map +1 -0
- package/dist/reporter/getTestProgress.js +105 -0
- package/dist/reporter/getTestProgress.js.map +1 -0
- package/dist/reporter/renderProgressBar.d.ts +2 -0
- package/dist/reporter/renderProgressBar.d.ts.map +1 -0
- package/dist/reporter/renderProgressBar.js +23 -0
- package/dist/reporter/renderProgressBar.js.map +1 -0
- package/dist/reporter/reportBrowserLogs.d.ts +3 -0
- package/dist/reporter/reportBrowserLogs.d.ts.map +1 -0
- package/dist/reporter/reportBrowserLogs.js +61 -0
- package/dist/reporter/reportBrowserLogs.js.map +1 -0
- package/dist/reporter/reportRequest404s.d.ts +3 -0
- package/dist/reporter/reportRequest404s.d.ts.map +1 -0
- package/dist/reporter/reportRequest404s.js +54 -0
- package/dist/reporter/reportRequest404s.js.map +1 -0
- package/dist/reporter/reportTestFileErrors.d.ts +3 -0
- package/dist/reporter/reportTestFileErrors.d.ts.map +1 -0
- package/dist/reporter/reportTestFileErrors.js +52 -0
- package/dist/reporter/reportTestFileErrors.js.map +1 -0
- package/dist/reporter/reportTestFileResults.d.ts +3 -0
- package/dist/reporter/reportTestFileResults.d.ts.map +1 -0
- package/dist/reporter/reportTestFileResults.js +25 -0
- package/dist/reporter/reportTestFileResults.js.map +1 -0
- package/dist/reporter/reportTestsErrors.d.ts +4 -0
- package/dist/reporter/reportTestsErrors.d.ts.map +1 -0
- package/dist/reporter/reportTestsErrors.js +129 -0
- package/dist/reporter/reportTestsErrors.js.map +1 -0
- package/dist/reporter/summaryReporter.d.ts +10 -0
- package/dist/reporter/summaryReporter.d.ts.map +1 -0
- package/dist/reporter/summaryReporter.js +73 -0
- package/dist/reporter/summaryReporter.js.map +1 -0
- package/dist/reporter/utils/getFailedOnBrowsers.d.ts +2 -0
- package/dist/reporter/utils/getFailedOnBrowsers.d.ts.map +1 -0
- package/dist/reporter/utils/getFailedOnBrowsers.js +13 -0
- package/dist/reporter/utils/getFailedOnBrowsers.js.map +1 -0
- package/dist/reporter/utils/getFlattenedTestResults.d.ts +3 -0
- package/dist/reporter/utils/getFlattenedTestResults.d.ts.map +1 -0
- package/dist/reporter/utils/getFlattenedTestResults.js +21 -0
- package/dist/reporter/utils/getFlattenedTestResults.js.map +1 -0
- package/dist/reporter/utils/getPassedFailedSkippedCount.d.ts +7 -0
- package/dist/reporter/utils/getPassedFailedSkippedCount.d.ts.map +1 -0
- package/dist/reporter/utils/getPassedFailedSkippedCount.js +30 -0
- package/dist/reporter/utils/getPassedFailedSkippedCount.js.map +1 -0
- package/dist/reporter/utils/toBrowserPath.d.ts +2 -0
- package/dist/reporter/utils/toBrowserPath.d.ts.map +1 -0
- package/dist/reporter/utils/toBrowserPath.js +11 -0
- package/dist/reporter/utils/toBrowserPath.js.map +1 -0
- package/dist/reporter/utils/toFilePath.d.ts +6 -0
- package/dist/reporter/utils/toFilePath.d.ts.map +1 -0
- package/dist/reporter/utils/toFilePath.js +15 -0
- package/dist/reporter/utils/toFilePath.js.map +1 -0
- package/dist/startTestRunner.d.ts +33 -0
- package/dist/startTestRunner.d.ts.map +1 -0
- package/dist/startTestRunner.js +61 -0
- package/dist/startTestRunner.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.mjs +38 -0
- package/package.json +107 -0
- package/scripts/ohos-postinstall-sign.js +117 -0
- package/src/TestRunnerStartError.ts +1 -0
- package/src/bin.ts +4 -0
- package/src/config/TestRunnerConfig.ts +14 -0
- package/src/config/collectGroupConfigs.ts +50 -0
- package/src/config/loadLauncher.ts +48 -0
- package/src/config/mergeConfigs.ts +26 -0
- package/src/config/parseConfig.ts +286 -0
- package/src/config/readCliArgs.ts +187 -0
- package/src/config/readFileConfig.ts +35 -0
- package/src/index.ts +11 -0
- package/src/logger/TestRunnerLogger.ts +54 -0
- package/src/reporter/defaultReporter.ts +78 -0
- package/src/reporter/dotReporter.ts +65 -0
- package/src/reporter/getCodeCoverage.ts +54 -0
- package/src/reporter/getTestProgress.ts +181 -0
- package/src/reporter/renderProgressBar.ts +27 -0
- package/src/reporter/reportBrowserLogs.ts +64 -0
- package/src/reporter/reportRequest404s.ts +55 -0
- package/src/reporter/reportTestFileErrors.ts +70 -0
- package/src/reporter/reportTestFileResults.ts +33 -0
- package/src/reporter/reportTestsErrors.ts +110 -0
- package/src/reporter/summaryReporter.ts +123 -0
- package/src/reporter/utils/getFailedOnBrowsers.ts +10 -0
- package/src/reporter/utils/getFlattenedTestResults.ts +24 -0
- package/src/reporter/utils/getPassedFailedSkippedCount.ts +31 -0
- package/src/reporter/utils/toBrowserPath.ts +5 -0
- package/src/reporter/utils/toFilePath.ts +9 -0
- package/src/startTestRunner.ts +101 -0
- package/web-test-runner.config.mjs +8 -0
package/README.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Web Test Runner
|
|
2
|
+
|
|
3
|
+
Test runner for web applications.
|
|
4
|
+
|
|
5
|
+
👉 Headless browsers with [Puppeteer](browsers/puppeteer.md), [Playwright](browsers/playwright.md), or [Selenium](browsers/selenium.md). <br>
|
|
6
|
+
🚧 Reports logs, 404s, and errors from the browser. <br>
|
|
7
|
+
🔍 Debug opens a real browser window with devtools.<br>
|
|
8
|
+
📦 Mock es modules using [Import Maps](./writing-tests/mocking.md).<br>
|
|
9
|
+
🔧 Exposes browser properties like viewport size and dark mode.<br>
|
|
10
|
+
⏱ Runs tests in parallel and isolation.<br>
|
|
11
|
+
👀 Interactive watch mode.<br>
|
|
12
|
+
🏃 Fast development by rerunning only changed tests.<br>
|
|
13
|
+
🚀 Powered by [esbuild](/docs/dev-server/plugins/esbuild.md) and [rollup plugins](/docs/dev-server/plugins/rollup.md)
|
|
14
|
+
|
|
15
|
+
See [our website](https://modern-web.dev/docs/test-runner/overview/) for full documentation.
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
Install the web test runner:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
npm i --save-dev @web/test-runner
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Basic commands
|
|
26
|
+
|
|
27
|
+
Do a single test run:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
web-test-runner test/**/*.test.js --node-resolve
|
|
31
|
+
wtr test/**/*.test.js --node-resolve
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Run in watch mode, reloading on file changes:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
web-test-runner test/**/*.test.js --node-resolve --watch
|
|
38
|
+
wtr test/**/*.test.js --node-resolve --watch
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Run with code coverage profiling (this is slower):
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
web-test-runner test/**/*.test.js --node-resolve --coverage
|
|
45
|
+
wtr test/**/*.test.js --node-resolve --coverage
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Transform JS to a compatible syntax based on user agent:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
web-test-runner test/**/*.test.js --node-resolve --esbuild-target auto
|
|
52
|
+
wtr test/**/*.test.js --node-resolve --esbuild-target auto
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Guide
|
|
56
|
+
|
|
57
|
+
Check out this [step by step guide](../../docs/guides/test-runner/getting-started.md) to get started.
|
|
58
|
+
|
|
59
|
+
## Example projects
|
|
60
|
+
|
|
61
|
+
Check out the <a href="https://github.com/modernweb-dev/example-projects" target="_blank" rel="noopener noreferrer">example projects</a> for a fully integrated setup.
|
|
62
|
+
|
|
63
|
+
## Documentation
|
|
64
|
+
|
|
65
|
+
See [our website](https://modern-web.dev/docs/test-runner/overview/) for full documentation.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunnerStartError.d.ts","sourceRoot":"","sources":["../src/TestRunnerStartError.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;CAAG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestRunnerStartError = void 0;
|
|
4
|
+
class TestRunnerStartError extends Error {
|
|
5
|
+
}
|
|
6
|
+
exports.TestRunnerStartError = TestRunnerStartError;
|
|
7
|
+
//# sourceMappingURL=TestRunnerStartError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunnerStartError.js","sourceRoot":"","sources":["../src/TestRunnerStartError.ts"],"names":[],"mappings":";;;AAAA,MAAa,oBAAqB,SAAQ,KAAK;CAAG;AAAlD,oDAAkD"}
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
|
package/dist/bin.js
ADDED
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,6DAAuD;AAEvD,IAAA,oCAAe,GAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type RollupNodeResolveOptions } from '@web/dev-server';
|
|
2
|
+
import { type TestFramework, type TestRunnerCoreConfig, type TestRunnerGroupConfig } from '@web/test-runner-core';
|
|
3
|
+
export interface TestRunnerConfig extends Omit<TestRunnerCoreConfig, 'testFramework'> {
|
|
4
|
+
groups?: string | string[] | TestRunnerGroupConfig[];
|
|
5
|
+
nodeResolve?: boolean | RollupNodeResolveOptions;
|
|
6
|
+
preserveSymlinks?: boolean;
|
|
7
|
+
esbuildTarget?: string | string[];
|
|
8
|
+
testFramework?: Partial<TestFramework>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=TestRunnerConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunnerConfig.d.ts","sourceRoot":"","sources":["../../src/config/TestRunnerConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC;IACnF,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACrD,WAAW,CAAC,EAAE,OAAO,GAAG,wBAAwB,CAAC;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunnerConfig.js","sourceRoot":"","sources":["../../src/config/TestRunnerConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectGroupConfigs.d.ts","sourceRoot":"","sources":["../../src/config/collectGroupConfigs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAoBnE,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,oCA4B3D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.collectGroupConfigs = collectGroupConfigs;
|
|
7
|
+
const config_loader_1 = require("@web/config-loader");
|
|
8
|
+
const globby_1 = __importDefault(require("globby"));
|
|
9
|
+
const TestRunnerStartError_js_1 = require("../TestRunnerStartError.js");
|
|
10
|
+
function validateGroupConfig(configFilePath, config) {
|
|
11
|
+
if (config.browsers != null && !Array.isArray(config.browsers)) {
|
|
12
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Group config at ${configFilePath} has invalid browsers option. It should be an array.`);
|
|
13
|
+
}
|
|
14
|
+
if (config.files != null && !(typeof config.files === 'string' || Array.isArray(config.files))) {
|
|
15
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Group config at ${configFilePath} has an invalid files option. It should be a string or an array.`);
|
|
16
|
+
}
|
|
17
|
+
return { name: configFilePath, configFilePath, ...config };
|
|
18
|
+
}
|
|
19
|
+
async function collectGroupConfigs(patterns) {
|
|
20
|
+
const groupConfigFiles = new Set();
|
|
21
|
+
const groupConfigs = [];
|
|
22
|
+
for (const pattern of patterns) {
|
|
23
|
+
const filePaths = globby_1.default.sync(pattern, { absolute: true });
|
|
24
|
+
for (const filePath of filePaths) {
|
|
25
|
+
groupConfigFiles.add(filePath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const groupConfigFile of groupConfigFiles) {
|
|
29
|
+
try {
|
|
30
|
+
const maybeGroupConfig = (await (0, config_loader_1.readConfig)('', groupConfigFile));
|
|
31
|
+
const groupConfig = validateGroupConfig(groupConfigFile, maybeGroupConfig);
|
|
32
|
+
groupConfigs.push(groupConfig);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
if (error instanceof config_loader_1.ConfigLoaderError) {
|
|
36
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(error.message);
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return groupConfigs;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=collectGroupConfigs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectGroupConfigs.js","sourceRoot":"","sources":["../../src/config/collectGroupConfigs.ts"],"names":[],"mappings":";;;;;AAqBA,kDA4BC;AAjDD,sDAAmE;AAEnE,oDAA4B;AAC5B,wEAAkE;AAElE,SAAS,mBAAmB,CAAC,cAAsB,EAAE,MAAsC;IACzF,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,8CAAoB,CAC5B,mBAAmB,cAAc,sDAAsD,CACxF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,8CAAoB,CAC5B,mBAAmB,cAAc,kEAAkE,CACpG,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,EAA2B,CAAC;AACtF,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,QAAkB;IAC1D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,MAAM,YAAY,GAA4B,EAAE,CAAC;IAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,gBAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAA,0BAAU,EACxC,EAAE,EACF,eAAe,CAChB,CAAmC,CAAC;YACrC,MAAM,WAAW,GAAG,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;YAC3E,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,iCAAiB,EAAE,CAAC;gBACvC,MAAM,IAAI,8CAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadLauncher.d.ts","sourceRoot":"","sources":["../../src/config/loadLauncher.ts"],"names":[],"mappings":"AAqBA,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAM,EAAe,SAYhE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,GAAE,MAAM,EAAiB,SAYnE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.puppeteerLauncher = puppeteerLauncher;
|
|
4
|
+
exports.playwrightLauncher = playwrightLauncher;
|
|
5
|
+
const TestRunnerStartError_js_1 = require("../TestRunnerStartError.js");
|
|
6
|
+
const puppeteerBrowsers = ['chrome', 'firefox'];
|
|
7
|
+
const playwrightBrowsers = ['chromium', 'firefox', 'webkit'];
|
|
8
|
+
function loadLauncher(name) {
|
|
9
|
+
const pkg = `@web/test-runner-${name}`;
|
|
10
|
+
try {
|
|
11
|
+
const path = require.resolve(pkg, { paths: [__dirname, process.cwd()] });
|
|
12
|
+
return require(path);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error.code === 'MODULE_NOT_FOUND') {
|
|
16
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`You need to add ${pkg} as a dependency of your project to use the --${name} flag.`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function puppeteerLauncher(browsers = ['chrome']) {
|
|
24
|
+
for (const browser of browsers) {
|
|
25
|
+
if (!puppeteerBrowsers.includes(browser)) {
|
|
26
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Unknown puppeteer browser: ${browser}. ` +
|
|
27
|
+
`Supported browsers: ${puppeteerBrowsers.join(', ')}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const launcher = loadLauncher('puppeteer').puppeteerLauncher;
|
|
31
|
+
return browsers.map(product => launcher({ launchOptions: { product } }));
|
|
32
|
+
}
|
|
33
|
+
function playwrightLauncher(browsers = ['chromium']) {
|
|
34
|
+
for (const browser of browsers) {
|
|
35
|
+
if (!playwrightBrowsers.includes(browser)) {
|
|
36
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Unknown playwright browser: ${browser}. ` +
|
|
37
|
+
`Supported browsers: ${playwrightBrowsers.join(', ')}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const launcher = loadLauncher('playwright').playwrightLauncher;
|
|
41
|
+
return browsers.map(product => launcher({ product }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=loadLauncher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadLauncher.js","sourceRoot":"","sources":["../../src/config/loadLauncher.ts"],"names":[],"mappings":";;AAqBA,8CAYC;AAED,gDAYC;AA/CD,wEAAkE;AAElE,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAChD,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE7D,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACjE,MAAM,IAAI,8CAAoB,CAC5B,mBAAmB,GAAG,iDAAiD,IAAI,QAAQ,CACpF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAqB,CAAC,QAAQ,CAAC;IAC/D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,8CAAoB,CAC5B,8BAA8B,OAAO,IAAI;gBACvC,uBAAuB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,iBAAiB,CAAC;IAC7D,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,kBAAkB,CAAC,WAAqB,CAAC,UAAU,CAAC;IAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,8CAAoB,CAC5B,+BAA+B,OAAO,IAAI;gBACxC,uBAAuB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,kBAAkB,CAAC;IAC/D,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeConfigs.d.ts","sourceRoot":"","sources":["../../src/config/mergeConfigs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,GAoBxD,OAAO,CAAC,gBAAgB,CAAC,CAChD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeConfigs = mergeConfigs;
|
|
4
|
+
const arrayKeys = ['plugins', 'middleware'];
|
|
5
|
+
function mergeConfigs(...configs) {
|
|
6
|
+
const finalConfig = {
|
|
7
|
+
plugins: [],
|
|
8
|
+
middleware: [],
|
|
9
|
+
};
|
|
10
|
+
for (const config of configs) {
|
|
11
|
+
if (config) {
|
|
12
|
+
for (const [key, value] of Object.entries(config)) {
|
|
13
|
+
if (arrayKeys.includes(key)) {
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
finalConfig[key].push(...value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
finalConfig[key] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return finalConfig;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=mergeConfigs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeConfigs.js","sourceRoot":"","sources":["../../src/config/mergeConfigs.ts"],"names":[],"mappings":";;AAIA,oCAqBC;AAvBD,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAE5C,SAAgB,YAAY,CAAC,GAAG,OAAgD;IAC9E,MAAM,WAAW,GAAQ;QACvB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAwC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type TestRunnerCoreConfig, type TestRunnerGroupConfig } from '@web/test-runner-core';
|
|
2
|
+
import { type TestRunnerConfig } from './TestRunnerConfig.js';
|
|
3
|
+
import { type TestRunnerCliArgs } from './readCliArgs.js';
|
|
4
|
+
export declare function validateConfig(config: Partial<TestRunnerConfig>): TestRunnerConfig;
|
|
5
|
+
export declare function parseConfig(config: Partial<TestRunnerConfig>, cliArgs?: TestRunnerCliArgs): Promise<{
|
|
6
|
+
config: TestRunnerCoreConfig;
|
|
7
|
+
groupConfigs: TestRunnerGroupConfig[];
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=parseConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseConfig.d.ts","sourceRoot":"","sources":["../../src/config/parseConfig.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA0D1D,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAoB7C,gBAAgB,CAClC;AAyBD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,YAAY,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC,CAsJlF"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateConfig = validateConfig;
|
|
7
|
+
exports.parseConfig = parseConfig;
|
|
8
|
+
const test_runner_chrome_1 = require("@web/test-runner-chrome");
|
|
9
|
+
const plugins_1 = require("@web/test-runner-commands/plugins");
|
|
10
|
+
const os_1 = require("os");
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const portfinder_1 = require("portfinder");
|
|
13
|
+
const dev_server_1 = require("@web/dev-server");
|
|
14
|
+
const TestRunnerStartError_js_1 = require("../TestRunnerStartError.js");
|
|
15
|
+
const TestRunnerLogger_js_1 = require("../logger/TestRunnerLogger.js");
|
|
16
|
+
const defaultReporter_js_1 = require("../reporter/defaultReporter.js");
|
|
17
|
+
const collectGroupConfigs_js_1 = require("./collectGroupConfigs.js");
|
|
18
|
+
const loadLauncher_js_1 = require("./loadLauncher.js");
|
|
19
|
+
const mergeConfigs_js_1 = require("./mergeConfigs.js");
|
|
20
|
+
const secondMs = 1000;
|
|
21
|
+
const minuteMs = secondMs * 60;
|
|
22
|
+
const defaultConfig = {
|
|
23
|
+
rootDir: process.cwd(),
|
|
24
|
+
protocol: 'http:',
|
|
25
|
+
hostname: 'localhost',
|
|
26
|
+
middleware: [],
|
|
27
|
+
plugins: [],
|
|
28
|
+
watch: false,
|
|
29
|
+
concurrentBrowsers: 2,
|
|
30
|
+
concurrency: Math.max(1, (0, os_1.cpus)().length / 2),
|
|
31
|
+
browserStartTimeout: minuteMs / 2,
|
|
32
|
+
testsStartTimeout: secondMs * 20,
|
|
33
|
+
testsFinishTimeout: minuteMs * 2,
|
|
34
|
+
browserLogs: true,
|
|
35
|
+
};
|
|
36
|
+
const defaultCoverageConfig = {
|
|
37
|
+
exclude: ['**/node_modules/**/*', '**/web_modules/**/*'],
|
|
38
|
+
threshold: { statements: 0, functions: 0, branches: 0, lines: 0 },
|
|
39
|
+
report: true,
|
|
40
|
+
reportDir: 'coverage',
|
|
41
|
+
reporters: ['lcov'],
|
|
42
|
+
};
|
|
43
|
+
function validate(config, key, type) {
|
|
44
|
+
if (config[key] == null) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (typeof config[key] !== type) {
|
|
48
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Configuration error: The ${key} setting should be a ${type}.`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const stringSettings = ['rootDir', 'hostname'];
|
|
52
|
+
const numberSettings = [
|
|
53
|
+
'port',
|
|
54
|
+
'concurrentBrowsers',
|
|
55
|
+
'concurrency',
|
|
56
|
+
'browserStartTimeout',
|
|
57
|
+
'testsStartTimeout',
|
|
58
|
+
'testsFinishTimeout',
|
|
59
|
+
];
|
|
60
|
+
const booleanSettings = [
|
|
61
|
+
'watch',
|
|
62
|
+
'preserveSymlinks',
|
|
63
|
+
'browserLogs',
|
|
64
|
+
'coverage',
|
|
65
|
+
'staticLogging',
|
|
66
|
+
'manual',
|
|
67
|
+
'open',
|
|
68
|
+
'debug',
|
|
69
|
+
];
|
|
70
|
+
function validateConfig(config) {
|
|
71
|
+
stringSettings.forEach(key => validate(config, key, 'string'));
|
|
72
|
+
numberSettings.forEach(key => validate(config, key, 'number'));
|
|
73
|
+
booleanSettings.forEach(key => validate(config, key, 'boolean'));
|
|
74
|
+
if (config.esbuildTarget != null &&
|
|
75
|
+
!(typeof config.esbuildTarget === 'string' || Array.isArray(config.esbuildTarget))) {
|
|
76
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Configuration error: The esbuildTarget setting should be a string or array.`);
|
|
77
|
+
}
|
|
78
|
+
if (config.files != null && !(typeof config.files === 'string' || Array.isArray(config.files))) {
|
|
79
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Configuration error: The files setting should be a string or an array.`);
|
|
80
|
+
}
|
|
81
|
+
return config;
|
|
82
|
+
}
|
|
83
|
+
async function parseConfigGroups(config, cliArgs) {
|
|
84
|
+
const groupConfigs = [];
|
|
85
|
+
const configPatterns = [];
|
|
86
|
+
if (cliArgs.groups) {
|
|
87
|
+
// groups are provided from CLI args
|
|
88
|
+
configPatterns.push(cliArgs.groups);
|
|
89
|
+
}
|
|
90
|
+
else if (config.groups) {
|
|
91
|
+
// groups are provided from config
|
|
92
|
+
for (const entry of config.groups) {
|
|
93
|
+
if (typeof entry === 'object') {
|
|
94
|
+
groupConfigs.push(entry);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
configPatterns.push(entry);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// group entries which are strings are globs which point to group conigs
|
|
102
|
+
groupConfigs.push(...(await (0, collectGroupConfigs_js_1.collectGroupConfigs)(configPatterns)));
|
|
103
|
+
return groupConfigs;
|
|
104
|
+
}
|
|
105
|
+
async function parseConfig(config, cliArgs = {}) {
|
|
106
|
+
const cliArgsConfig = {
|
|
107
|
+
...cliArgs,
|
|
108
|
+
};
|
|
109
|
+
// CLI has properties with the same name as the config, but with different values
|
|
110
|
+
// delete them so they don't overwrite when merging, the CLI values are read separately
|
|
111
|
+
delete cliArgsConfig.groups;
|
|
112
|
+
delete cliArgsConfig.browsers;
|
|
113
|
+
const mergedConfigs = (0, mergeConfigs_js_1.mergeConfigs)(defaultConfig, config, cliArgsConfig);
|
|
114
|
+
// backwards compatibility for configs written for es-dev-server, where middleware was
|
|
115
|
+
// spelled incorrectly as middlewares
|
|
116
|
+
if (Array.isArray(mergedConfigs.middlewares)) {
|
|
117
|
+
mergedConfigs.middleware.push(...mergedConfigs.middlewares);
|
|
118
|
+
}
|
|
119
|
+
const finalConfig = validateConfig(mergedConfigs);
|
|
120
|
+
// filter out non-objects from plugin list
|
|
121
|
+
finalConfig.plugins = (finalConfig.plugins ?? []).filter(pl => typeof pl === 'object');
|
|
122
|
+
// ensure rootDir is always resolved
|
|
123
|
+
if (typeof finalConfig.rootDir === 'string') {
|
|
124
|
+
finalConfig.rootDir = path_1.default.resolve(finalConfig.rootDir);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError('No rootDir specified.');
|
|
128
|
+
}
|
|
129
|
+
// generate a default random port
|
|
130
|
+
if (typeof finalConfig.port !== 'number') {
|
|
131
|
+
finalConfig.port = await (0, portfinder_1.getPortPromise)({ port: 8000 });
|
|
132
|
+
}
|
|
133
|
+
finalConfig.coverageConfig = {
|
|
134
|
+
...defaultCoverageConfig,
|
|
135
|
+
...finalConfig.coverageConfig,
|
|
136
|
+
};
|
|
137
|
+
let groupConfigs = await parseConfigGroups(finalConfig, cliArgs);
|
|
138
|
+
if (groupConfigs.find(g => g.name === 'default')) {
|
|
139
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError('Cannot create a group named "default". This named is reserved by the test runner.');
|
|
140
|
+
}
|
|
141
|
+
if (cliArgs.group != null) {
|
|
142
|
+
if (cliArgs.group === 'default') {
|
|
143
|
+
// default group is an alias for the root config
|
|
144
|
+
groupConfigs = [];
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const groupConfig = groupConfigs.find(c => c.name === cliArgs.group);
|
|
148
|
+
if (!groupConfig) {
|
|
149
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`Could not find any group named ${cliArgs.group}`);
|
|
150
|
+
}
|
|
151
|
+
// when focusing a group, ensure that the "default" group isn't run
|
|
152
|
+
// we can improve this by relying only on groups inside the test runner itself
|
|
153
|
+
if (groupConfig.files == null) {
|
|
154
|
+
groupConfig.files = finalConfig.files;
|
|
155
|
+
}
|
|
156
|
+
finalConfig.files = undefined;
|
|
157
|
+
groupConfigs = [groupConfig];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (cliArgs.puppeteer) {
|
|
161
|
+
if (finalConfig.browsers && finalConfig.browsers.length > 0) {
|
|
162
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError('The --puppeteer flag cannot be used when defining browsers manually in your finalConfig.');
|
|
163
|
+
}
|
|
164
|
+
finalConfig.browsers = (0, loadLauncher_js_1.puppeteerLauncher)(cliArgs.browsers);
|
|
165
|
+
}
|
|
166
|
+
else if (cliArgs.playwright) {
|
|
167
|
+
if (finalConfig.browsers && finalConfig.browsers.length > 0) {
|
|
168
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError('The --playwright flag cannot be used when defining browsers manually in your finalConfig.');
|
|
169
|
+
}
|
|
170
|
+
finalConfig.browsers = (0, loadLauncher_js_1.playwrightLauncher)(cliArgs.browsers);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
if (cliArgs.browsers != null) {
|
|
174
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError(`The browsers option must be used along with the puppeteer or playwright option.`);
|
|
175
|
+
}
|
|
176
|
+
// add default chrome launcher if the user did not configure their own browsers
|
|
177
|
+
if (!finalConfig.browsers) {
|
|
178
|
+
finalConfig.browsers = [(0, test_runner_chrome_1.chromeLauncher)()];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
finalConfig.testFramework = {
|
|
182
|
+
path: require.resolve('@web/test-runner-mocha/dist/autorun.js'),
|
|
183
|
+
...(finalConfig.testFramework ?? {}),
|
|
184
|
+
};
|
|
185
|
+
if (!finalConfig.reporters) {
|
|
186
|
+
finalConfig.reporters = [(0, defaultReporter_js_1.defaultReporter)()];
|
|
187
|
+
}
|
|
188
|
+
if (!finalConfig.logger) {
|
|
189
|
+
finalConfig.logger = new TestRunnerLogger_js_1.TestRunnerLogger(config.debug);
|
|
190
|
+
}
|
|
191
|
+
if (finalConfig.plugins == null) {
|
|
192
|
+
finalConfig.plugins = [];
|
|
193
|
+
}
|
|
194
|
+
// plugin with a noop transformImport hook, this will cause the dev server to analyze modules and
|
|
195
|
+
// catch syntax errors. this way we still report syntax errors when the user has no flags enabled
|
|
196
|
+
finalConfig.plugins.unshift({
|
|
197
|
+
name: 'syntax-checker',
|
|
198
|
+
transformImport() {
|
|
199
|
+
return undefined;
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
finalConfig.plugins.unshift((0, plugins_1.setViewportPlugin)(), (0, plugins_1.emulateMediaPlugin)(), (0, plugins_1.setUserAgentPlugin)(), (0, plugins_1.selectOptionPlugin)(), (0, plugins_1.filePlugin)(), (0, plugins_1.sendKeysPlugin)(), (0, plugins_1.sendMousePlugin)(), (0, plugins_1.snapshotPlugin)({ updateSnapshots: !!cliArgs.updateSnapshots }));
|
|
203
|
+
if (finalConfig.nodeResolve) {
|
|
204
|
+
const userOptions = typeof finalConfig.nodeResolve === 'object' ? finalConfig.nodeResolve : undefined;
|
|
205
|
+
// do node resolve after user plugins, to allow user plugins to resolve imports
|
|
206
|
+
finalConfig.plugins.push((0, dev_server_1.nodeResolvePlugin)(finalConfig.rootDir, finalConfig.preserveSymlinks, userOptions));
|
|
207
|
+
}
|
|
208
|
+
if (finalConfig?.esbuildTarget) {
|
|
209
|
+
finalConfig.plugins.unshift((0, dev_server_1.esbuildPlugin)(finalConfig.esbuildTarget));
|
|
210
|
+
}
|
|
211
|
+
if ((!finalConfig.files || finalConfig.files.length === 0) && groupConfigs.length === 0) {
|
|
212
|
+
throw new TestRunnerStartError_js_1.TestRunnerStartError('Did not find any tests to run. Use the "files" or "groups" option to configure test files.');
|
|
213
|
+
}
|
|
214
|
+
return { config: finalConfig, groupConfigs };
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=parseConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseConfig.js","sourceRoot":"","sources":["../../src/config/parseConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TestRunnerConfig } from './TestRunnerConfig.js';
|
|
2
|
+
export interface TestRunnerCliArgs extends Partial<Pick<TestRunnerConfig, 'files' | 'rootDir' | 'watch' | 'coverage' | 'concurrentBrowsers' | 'concurrency' | 'staticLogging' | 'manual' | 'open' | 'port' | 'preserveSymlinks' | 'nodeResolve' | 'debug' | 'esbuildTarget'>> {
|
|
3
|
+
config?: string;
|
|
4
|
+
groups?: string;
|
|
5
|
+
group?: string;
|
|
6
|
+
puppeteer?: boolean;
|
|
7
|
+
playwright?: boolean;
|
|
8
|
+
browsers?: string[];
|
|
9
|
+
updateSnapshots?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ReadCliArgsParams {
|
|
12
|
+
argv?: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare function readCliArgs({ argv }?: ReadCliArgsParams): TestRunnerCliArgs;
|
|
15
|
+
//# sourceMappingURL=readCliArgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readCliArgs.d.ts","sourceRoot":"","sources":["../../src/config/readCliArgs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,iBAAkB,SAAQ,OAAO,CAChD,IAAI,CACF,gBAAgB,EACd,OAAO,GACP,SAAS,GACT,OAAO,GACP,UAAU,GACV,oBAAoB,GACpB,aAAa,GACb,eAAe,GACf,QAAQ,GACR,MAAM,GACN,MAAM,GACN,kBAAkB,GAClB,aAAa,GACb,OAAO,GACP,eAAe,CAClB,CACF;IACC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA2HD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAmB,EAAE,GAAE,iBAAsB,GAAG,iBAAiB,CA2B9F"}
|