@stablyai/internal-playwright 0.1.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/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +168 -0
- package/ThirdPartyNotices.txt +6277 -0
- package/cli.js +19 -0
- package/index.d.ts +17 -0
- package/index.js +17 -0
- package/index.mjs +18 -0
- package/jsx-runtime.js +42 -0
- package/jsx-runtime.mjs +21 -0
- package/lib/agents/generateAgents.js +265 -0
- package/lib/agents/generator.md +102 -0
- package/lib/agents/healer.md +78 -0
- package/lib/agents/planner.md +135 -0
- package/lib/cli.js +274 -0
- package/lib/common/config.js +274 -0
- package/lib/common/config.js.map +7 -0
- package/lib/common/configLoader.js +377 -0
- package/lib/common/configLoader.js.map +7 -0
- package/lib/common/esmLoaderHost.js +102 -0
- package/lib/common/esmLoaderHost.js.map +7 -0
- package/lib/common/expectBundle.js +52 -0
- package/lib/common/expectBundle.js.map +7 -0
- package/lib/common/expectBundleImpl.js +389 -0
- package/lib/common/expectBundleImpl.js.map +7 -0
- package/lib/common/fixtures.js +302 -0
- package/lib/common/fixtures.js.map +7 -0
- package/lib/common/globals.js +58 -0
- package/lib/common/globals.js.map +7 -0
- package/lib/common/ipc.js +60 -0
- package/lib/common/ipc.js.map +7 -0
- package/lib/common/poolBuilder.js +85 -0
- package/lib/common/poolBuilder.js.map +7 -0
- package/lib/common/process.js +104 -0
- package/lib/common/process.js.map +7 -0
- package/lib/common/suiteUtils.js +140 -0
- package/lib/common/suiteUtils.js.map +7 -0
- package/lib/common/test.js +321 -0
- package/lib/common/test.js.map +7 -0
- package/lib/common/testLoader.js +100 -0
- package/lib/common/testLoader.js.map +7 -0
- package/lib/common/testType.js +310 -0
- package/lib/common/testType.js.map +7 -0
- package/lib/fsWatcher.js +67 -0
- package/lib/fsWatcher.js.map +7 -0
- package/lib/index.js +696 -0
- package/lib/index.js.map +7 -0
- package/lib/internalsForTest.js +42 -0
- package/lib/internalsForTest.js.map +7 -0
- package/lib/isomorphic/events.js +77 -0
- package/lib/isomorphic/events.js.map +7 -0
- package/lib/isomorphic/folders.js +30 -0
- package/lib/isomorphic/folders.js.map +7 -0
- package/lib/isomorphic/stringInternPool.js +69 -0
- package/lib/isomorphic/stringInternPool.js.map +7 -0
- package/lib/isomorphic/teleReceiver.js +507 -0
- package/lib/isomorphic/teleReceiver.js.map +7 -0
- package/lib/isomorphic/teleSuiteUpdater.js +137 -0
- package/lib/isomorphic/teleSuiteUpdater.js.map +7 -0
- package/lib/isomorphic/testServerConnection.js +211 -0
- package/lib/isomorphic/testServerConnection.js.map +7 -0
- package/lib/isomorphic/testServerInterface.js +16 -0
- package/lib/isomorphic/testServerInterface.js.map +7 -0
- package/lib/isomorphic/testTree.js +334 -0
- package/lib/isomorphic/testTree.js.map +7 -0
- package/lib/isomorphic/types.d.js +16 -0
- package/lib/isomorphic/types.d.js.map +7 -0
- package/lib/loader/loaderMain.js +59 -0
- package/lib/loader/loaderMain.js.map +7 -0
- package/lib/matchers/expect.js +325 -0
- package/lib/matchers/expect.js.map +7 -0
- package/lib/matchers/matcherHint.js +87 -0
- package/lib/matchers/matcherHint.js.map +7 -0
- package/lib/matchers/matchers.js +366 -0
- package/lib/matchers/matchers.js.map +7 -0
- package/lib/matchers/toBeTruthy.js +73 -0
- package/lib/matchers/toBeTruthy.js.map +7 -0
- package/lib/matchers/toEqual.js +99 -0
- package/lib/matchers/toEqual.js.map +7 -0
- package/lib/matchers/toHaveURL.js +102 -0
- package/lib/matchers/toHaveURL.js.map +7 -0
- package/lib/matchers/toMatchAriaSnapshot.js +159 -0
- package/lib/matchers/toMatchAriaSnapshot.js.map +7 -0
- package/lib/matchers/toMatchSnapshot.js +359 -0
- package/lib/matchers/toMatchSnapshot.js.map +7 -0
- package/lib/matchers/toMatchText.js +99 -0
- package/lib/matchers/toMatchText.js.map +7 -0
- package/lib/mcp/browser/actions.d.js +16 -0
- package/lib/mcp/browser/backend.js +93 -0
- package/lib/mcp/browser/backend.js.map +7 -0
- package/lib/mcp/browser/browserContextFactory.js +296 -0
- package/lib/mcp/browser/browserServerBackend.js +76 -0
- package/lib/mcp/browser/codegen.js +66 -0
- package/lib/mcp/browser/config.js +385 -0
- package/lib/mcp/browser/context.js +287 -0
- package/lib/mcp/browser/response.js +228 -0
- package/lib/mcp/browser/sessionLog.js +160 -0
- package/lib/mcp/browser/tab.js +277 -0
- package/lib/mcp/browser/tool.js +30 -0
- package/lib/mcp/browser/tool.js.map +7 -0
- package/lib/mcp/browser/tools/common.js +63 -0
- package/lib/mcp/browser/tools/console.js +44 -0
- package/lib/mcp/browser/tools/dialogs.js +60 -0
- package/lib/mcp/browser/tools/evaluate.js +70 -0
- package/lib/mcp/browser/tools/files.js +58 -0
- package/lib/mcp/browser/tools/form.js +74 -0
- package/lib/mcp/browser/tools/install.js +69 -0
- package/lib/mcp/browser/tools/keyboard.js +85 -0
- package/lib/mcp/browser/tools/mouse.js +107 -0
- package/lib/mcp/browser/tools/navigate.js +62 -0
- package/lib/mcp/browser/tools/network.js +54 -0
- package/lib/mcp/browser/tools/pdf.js +59 -0
- package/lib/mcp/browser/tools/screenshot.js +88 -0
- package/lib/mcp/browser/tools/snapshot.js +182 -0
- package/lib/mcp/browser/tools/tabs.js +67 -0
- package/lib/mcp/browser/tools/tool.js +49 -0
- package/lib/mcp/browser/tools/tracing.js +74 -0
- package/lib/mcp/browser/tools/utils.js +100 -0
- package/lib/mcp/browser/tools/verify.js +154 -0
- package/lib/mcp/browser/tools/wait.js +63 -0
- package/lib/mcp/browser/tools.js +80 -0
- package/lib/mcp/browser/tools.js.map +7 -0
- package/lib/mcp/browser/watchdog.js +44 -0
- package/lib/mcp/config.d.js +16 -0
- package/lib/mcp/extension/cdpRelay.js +351 -0
- package/lib/mcp/extension/extensionContextFactory.js +75 -0
- package/lib/mcp/extension/protocol.js +28 -0
- package/lib/mcp/index.js +61 -0
- package/lib/mcp/log.js +35 -0
- package/lib/mcp/program.js +96 -0
- package/lib/mcp/sdk/bundle.js +81 -0
- package/lib/mcp/sdk/bundle.js.map +7 -0
- package/lib/mcp/sdk/call.js +49 -0
- package/lib/mcp/sdk/call.js.map +7 -0
- package/lib/mcp/sdk/exports.js +32 -0
- package/lib/mcp/sdk/exports.js.map +7 -0
- package/lib/mcp/sdk/http.js +187 -0
- package/lib/mcp/sdk/http.js.map +7 -0
- package/lib/mcp/sdk/inProcessTransport.js +71 -0
- package/lib/mcp/sdk/inProcessTransport.js.map +7 -0
- package/lib/mcp/sdk/mdb.js +206 -0
- package/lib/mcp/sdk/mdb.js.map +7 -0
- package/lib/mcp/sdk/proxyBackend.js +128 -0
- package/lib/mcp/sdk/proxyBackend.js.map +7 -0
- package/lib/mcp/sdk/server.js +189 -0
- package/lib/mcp/sdk/server.js.map +7 -0
- package/lib/mcp/sdk/tool.js +51 -0
- package/lib/mcp/sdk/tool.js.map +7 -0
- package/lib/mcp/test/backend.js +67 -0
- package/lib/mcp/test/backend.js.map +7 -0
- package/lib/mcp/test/browserBackend.js +98 -0
- package/lib/mcp/test/context.js +48 -0
- package/lib/mcp/test/context.js.map +7 -0
- package/lib/mcp/test/generatorTools.js +122 -0
- package/lib/mcp/test/plannerTools.js +46 -0
- package/lib/mcp/test/seed.js +72 -0
- package/lib/mcp/test/streams.js +39 -0
- package/lib/mcp/test/streams.js.map +7 -0
- package/lib/mcp/test/testBackend.js +97 -0
- package/lib/mcp/test/testContext.js +176 -0
- package/lib/mcp/test/testTool.js +30 -0
- package/lib/mcp/test/testTools.js +115 -0
- package/lib/mcp/test/tool.js +30 -0
- package/lib/mcp/test/tool.js.map +7 -0
- package/lib/mcp/test/tools.js +150 -0
- package/lib/mcp/test/tools.js.map +7 -0
- package/lib/mcp/vscode/host.js +187 -0
- package/lib/mcp/vscode/main.js +77 -0
- package/lib/mcpBundleImpl.js +41 -0
- package/lib/mcpBundleImpl.js.map +7 -0
- package/lib/plugins/gitCommitInfoPlugin.js +198 -0
- package/lib/plugins/gitCommitInfoPlugin.js.map +7 -0
- package/lib/plugins/index.js +28 -0
- package/lib/plugins/index.js.map +7 -0
- package/lib/plugins/webServerPlugin.js +209 -0
- package/lib/plugins/webServerPlugin.js.map +7 -0
- package/lib/program.js +412 -0
- package/lib/program.js.map +7 -0
- package/lib/reporters/base.js +609 -0
- package/lib/reporters/base.js.map +7 -0
- package/lib/reporters/blob.js +135 -0
- package/lib/reporters/blob.js.map +7 -0
- package/lib/reporters/dot.js +82 -0
- package/lib/reporters/dot.js.map +7 -0
- package/lib/reporters/empty.js +32 -0
- package/lib/reporters/empty.js.map +7 -0
- package/lib/reporters/github.js +128 -0
- package/lib/reporters/github.js.map +7 -0
- package/lib/reporters/html.js +644 -0
- package/lib/reporters/html.js.map +7 -0
- package/lib/reporters/internalReporter.js +130 -0
- package/lib/reporters/internalReporter.js.map +7 -0
- package/lib/reporters/json.js +254 -0
- package/lib/reporters/json.js.map +7 -0
- package/lib/reporters/junit.js +230 -0
- package/lib/reporters/junit.js.map +7 -0
- package/lib/reporters/line.js +113 -0
- package/lib/reporters/line.js.map +7 -0
- package/lib/reporters/list.js +235 -0
- package/lib/reporters/list.js.map +7 -0
- package/lib/reporters/listModeReporter.js +69 -0
- package/lib/reporters/listModeReporter.js.map +7 -0
- package/lib/reporters/markdown.js +144 -0
- package/lib/reporters/markdown.js.map +7 -0
- package/lib/reporters/merge.js +535 -0
- package/lib/reporters/merge.js.map +7 -0
- package/lib/reporters/multiplexer.js +104 -0
- package/lib/reporters/multiplexer.js.map +7 -0
- package/lib/reporters/reporterV2.js +102 -0
- package/lib/reporters/reporterV2.js.map +7 -0
- package/lib/reporters/teleEmitter.js +297 -0
- package/lib/reporters/teleEmitter.js.map +7 -0
- package/lib/reporters/versions/blobV1.js +16 -0
- package/lib/reporters/versions/blobV1.js.map +7 -0
- package/lib/runner/dispatcher.js +491 -0
- package/lib/runner/dispatcher.js.map +7 -0
- package/lib/runner/failureTracker.js +72 -0
- package/lib/runner/failureTracker.js.map +7 -0
- package/lib/runner/lastRun.js +77 -0
- package/lib/runner/lastRun.js.map +7 -0
- package/lib/runner/loadUtils.js +333 -0
- package/lib/runner/loadUtils.js.map +7 -0
- package/lib/runner/loaderHost.js +89 -0
- package/lib/runner/loaderHost.js.map +7 -0
- package/lib/runner/processHost.js +161 -0
- package/lib/runner/processHost.js.map +7 -0
- package/lib/runner/projectUtils.js +241 -0
- package/lib/runner/projectUtils.js.map +7 -0
- package/lib/runner/rebase.js +189 -0
- package/lib/runner/rebase.js.map +7 -0
- package/lib/runner/reporters.js +137 -0
- package/lib/runner/reporters.js.map +7 -0
- package/lib/runner/runner.js +173 -0
- package/lib/runner/sigIntWatcher.js +96 -0
- package/lib/runner/sigIntWatcher.js.map +7 -0
- package/lib/runner/taskRunner.js +127 -0
- package/lib/runner/taskRunner.js.map +7 -0
- package/lib/runner/tasks.js +410 -0
- package/lib/runner/tasks.js.map +7 -0
- package/lib/runner/testGroups.js +117 -0
- package/lib/runner/testGroups.js.map +7 -0
- package/lib/runner/testRunner.js +390 -0
- package/lib/runner/testRunner.js.map +7 -0
- package/lib/runner/testServer.js +264 -0
- package/lib/runner/testServer.js.map +7 -0
- package/lib/runner/uiMode.js +271 -0
- package/lib/runner/uiModeReporter.js +30 -0
- package/lib/runner/uiModeReporter.js.map +7 -0
- package/lib/runner/vcs.js +72 -0
- package/lib/runner/vcs.js.map +7 -0
- package/lib/runner/watchMode.js +395 -0
- package/lib/runner/watchMode.js.map +7 -0
- package/lib/runner/workerHost.js +95 -0
- package/lib/runner/workerHost.js.map +7 -0
- package/lib/store.js +98 -0
- package/lib/third_party/pirates.js +62 -0
- package/lib/third_party/pirates.js.map +7 -0
- package/lib/third_party/tsconfig-loader.js +103 -0
- package/lib/third_party/tsconfig-loader.js.map +7 -0
- package/lib/transform/babelBundle.js +43 -0
- package/lib/transform/babelBundle.js.map +7 -0
- package/lib/transform/babelBundleImpl.js +461 -0
- package/lib/transform/babelBundleImpl.js.map +7 -0
- package/lib/transform/compilationCache.js +272 -0
- package/lib/transform/compilationCache.js.map +7 -0
- package/lib/transform/esmLoader.js +104 -0
- package/lib/transform/esmLoader.js.map +7 -0
- package/lib/transform/esmUtils.js +32 -0
- package/lib/transform/portTransport.js +67 -0
- package/lib/transform/portTransport.js.map +7 -0
- package/lib/transform/transform.js +293 -0
- package/lib/transform/transform.js.map +7 -0
- package/lib/util.js +403 -0
- package/lib/util.js.map +7 -0
- package/lib/utilsBundle.js +43 -0
- package/lib/utilsBundle.js.map +7 -0
- package/lib/utilsBundleImpl.js +100 -0
- package/lib/utilsBundleImpl.js.map +7 -0
- package/lib/worker/fixtureRunner.js +258 -0
- package/lib/worker/fixtureRunner.js.map +7 -0
- package/lib/worker/stepContext.js +34 -0
- package/lib/worker/testInfo.js +508 -0
- package/lib/worker/testInfo.js.map +7 -0
- package/lib/worker/testTracing.js +344 -0
- package/lib/worker/testTracing.js.map +7 -0
- package/lib/worker/timeoutManager.js +174 -0
- package/lib/worker/timeoutManager.js.map +7 -0
- package/lib/worker/util.js +31 -0
- package/lib/worker/util.js.map +7 -0
- package/lib/worker/workerMain.js +520 -0
- package/lib/worker/workerMain.js.map +7 -0
- package/package.json +74 -0
- package/test.d.ts +18 -0
- package/test.js +24 -0
- package/test.mjs +33 -0
- package/types/test.d.ts +10217 -0
- package/types/testReporter.d.ts +816 -0
@@ -0,0 +1,264 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
11
|
+
};
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
17
|
+
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
26
|
+
mod
|
27
|
+
));
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
|
+
var testServer_exports = {};
|
30
|
+
__export(testServer_exports, {
|
31
|
+
TestServerDispatcher: () => TestServerDispatcher,
|
32
|
+
runTestServer: () => runTestServer,
|
33
|
+
runUIMode: () => runUIMode
|
34
|
+
});
|
35
|
+
module.exports = __toCommonJS(testServer_exports);
|
36
|
+
var import_util = __toESM(require("util"));
|
37
|
+
var import_server = require("playwright-core/lib/server");
|
38
|
+
var import_utils = require("playwright-core/lib/utils");
|
39
|
+
var import_utilsBundle = require("playwright-core/lib/utilsBundle");
|
40
|
+
var import_configLoader = require("../common/configLoader");
|
41
|
+
var import_list = __toESM(require("../reporters/list"));
|
42
|
+
var import_reporters = require("./reporters");
|
43
|
+
var import_sigIntWatcher = require("./sigIntWatcher");
|
44
|
+
var import_testRunner = require("./testRunner");
|
45
|
+
const originalDebugLog = import_utilsBundle.debug.log;
|
46
|
+
const originalStdoutWrite = process.stdout.write;
|
47
|
+
const originalStderrWrite = process.stderr.write;
|
48
|
+
class TestServer {
|
49
|
+
constructor(configLocation, configCLIOverrides) {
|
50
|
+
this._configLocation = configLocation;
|
51
|
+
this._configCLIOverrides = configCLIOverrides;
|
52
|
+
}
|
53
|
+
async start(options) {
|
54
|
+
this._dispatcher = new TestServerDispatcher(this._configLocation, this._configCLIOverrides);
|
55
|
+
return await (0, import_server.startTraceViewerServer)({ ...options, transport: this._dispatcher.transport });
|
56
|
+
}
|
57
|
+
async stop() {
|
58
|
+
await this._dispatcher?.stop();
|
59
|
+
}
|
60
|
+
}
|
61
|
+
class TestServerDispatcher {
|
62
|
+
constructor(configLocation, configCLIOverrides) {
|
63
|
+
this._serializer = require.resolve("./uiModeReporter");
|
64
|
+
this._closeOnDisconnect = false;
|
65
|
+
this._testRunner = new import_testRunner.TestRunner(configLocation, configCLIOverrides);
|
66
|
+
this.transport = {
|
67
|
+
onconnect: () => {
|
68
|
+
},
|
69
|
+
dispatch: (method, params) => this[method](params),
|
70
|
+
onclose: () => {
|
71
|
+
if (this._closeOnDisconnect)
|
72
|
+
(0, import_utils.gracefullyProcessExitDoNotHang)(0);
|
73
|
+
}
|
74
|
+
};
|
75
|
+
this._dispatchEvent = (method, params) => this.transport.sendEvent?.(method, params);
|
76
|
+
this._testRunner.on(import_testRunner.TestRunnerEvent.TestFilesChanged, (testFiles) => this._dispatchEvent("testFilesChanged", { testFiles }));
|
77
|
+
}
|
78
|
+
async _wireReporter(messageSink) {
|
79
|
+
return await (0, import_reporters.createReporterForTestServer)(this._serializer, messageSink);
|
80
|
+
}
|
81
|
+
async _collectingReporter() {
|
82
|
+
const report = [];
|
83
|
+
return {
|
84
|
+
reporter: await (0, import_reporters.createReporterForTestServer)(this._serializer, (e) => report.push(e)),
|
85
|
+
report
|
86
|
+
};
|
87
|
+
}
|
88
|
+
async initialize(params) {
|
89
|
+
this._serializer = params.serializer || require.resolve("./uiModeReporter");
|
90
|
+
this._closeOnDisconnect = !!params.closeOnDisconnect;
|
91
|
+
await this._testRunner.initialize({
|
92
|
+
...params
|
93
|
+
});
|
94
|
+
this._setInterceptStdio(!!params.interceptStdio);
|
95
|
+
}
|
96
|
+
async ping() {
|
97
|
+
}
|
98
|
+
async open(params) {
|
99
|
+
if ((0, import_utils.isUnderTest)())
|
100
|
+
return;
|
101
|
+
(0, import_utilsBundle.open)("vscode://file/" + params.location.file + ":" + params.location.line).catch((e) => console.error(e));
|
102
|
+
}
|
103
|
+
async resizeTerminal(params) {
|
104
|
+
this._testRunner.resizeTerminal(params);
|
105
|
+
}
|
106
|
+
async checkBrowsers() {
|
107
|
+
return { hasBrowsers: this._testRunner.hasSomeBrowsers() };
|
108
|
+
}
|
109
|
+
async installBrowsers() {
|
110
|
+
await this._testRunner.installBrowsers();
|
111
|
+
}
|
112
|
+
async runGlobalSetup(params) {
|
113
|
+
await this.runGlobalTeardown();
|
114
|
+
const { reporter, report } = await this._collectingReporter();
|
115
|
+
this._globalSetupReport = report;
|
116
|
+
const { status } = await this._testRunner.runGlobalSetup([reporter, new import_list.default()]);
|
117
|
+
return { report, status };
|
118
|
+
}
|
119
|
+
async runGlobalTeardown() {
|
120
|
+
const { status } = await this._testRunner.runGlobalTeardown();
|
121
|
+
const report = this._globalSetupReport || [];
|
122
|
+
this._globalSetupReport = void 0;
|
123
|
+
return { status, report };
|
124
|
+
}
|
125
|
+
async startDevServer(params) {
|
126
|
+
await this.stopDevServer({});
|
127
|
+
const { reporter, report } = await this._collectingReporter();
|
128
|
+
const { status } = await this._testRunner.startDevServer(reporter, "out-of-process");
|
129
|
+
return { report, status };
|
130
|
+
}
|
131
|
+
async stopDevServer(params) {
|
132
|
+
const { status } = await this._testRunner.stopDevServer();
|
133
|
+
const report = this._devServerReport || [];
|
134
|
+
this._devServerReport = void 0;
|
135
|
+
return { status, report };
|
136
|
+
}
|
137
|
+
async clearCache(params) {
|
138
|
+
await this._testRunner.clearCache();
|
139
|
+
}
|
140
|
+
async listFiles(params) {
|
141
|
+
const { reporter, report } = await this._collectingReporter();
|
142
|
+
const { status } = await this._testRunner.listFiles(reporter, params.projects);
|
143
|
+
return { report, status };
|
144
|
+
}
|
145
|
+
async listTests(params) {
|
146
|
+
const { reporter, report } = await this._collectingReporter();
|
147
|
+
const { status } = await this._testRunner.listTests(reporter, params);
|
148
|
+
return { report, status };
|
149
|
+
}
|
150
|
+
async runTests(params) {
|
151
|
+
const wireReporter = await this._wireReporter((e) => this._dispatchEvent("report", e));
|
152
|
+
const { status } = await this._testRunner.runTests(wireReporter, {
|
153
|
+
...params,
|
154
|
+
doNotRunDepsOutsideProjectFilter: true
|
155
|
+
});
|
156
|
+
return { status };
|
157
|
+
}
|
158
|
+
async watch(params) {
|
159
|
+
await this._testRunner.watch(params.fileNames);
|
160
|
+
}
|
161
|
+
async findRelatedTestFiles(params) {
|
162
|
+
return this._testRunner.findRelatedTestFiles(params.files);
|
163
|
+
}
|
164
|
+
async stopTests() {
|
165
|
+
await this._testRunner.stopTests();
|
166
|
+
}
|
167
|
+
async stop() {
|
168
|
+
this._setInterceptStdio(false);
|
169
|
+
await this._testRunner.stop();
|
170
|
+
}
|
171
|
+
async closeGracefully() {
|
172
|
+
await this._testRunner.closeGracefully();
|
173
|
+
}
|
174
|
+
_setInterceptStdio(interceptStdio) {
|
175
|
+
if (process.env.PWTEST_DEBUG)
|
176
|
+
return;
|
177
|
+
if (interceptStdio) {
|
178
|
+
if (import_utilsBundle.debug.log === originalDebugLog) {
|
179
|
+
import_utilsBundle.debug.log = (...args) => {
|
180
|
+
const string = import_util.default.format(...args) + "\n";
|
181
|
+
return originalStderrWrite.apply(process.stderr, [string]);
|
182
|
+
};
|
183
|
+
}
|
184
|
+
const stdoutWrite = (chunk) => {
|
185
|
+
this._dispatchEvent("stdio", chunkToPayload("stdout", chunk));
|
186
|
+
return true;
|
187
|
+
};
|
188
|
+
const stderrWrite = (chunk) => {
|
189
|
+
this._dispatchEvent("stdio", chunkToPayload("stderr", chunk));
|
190
|
+
return true;
|
191
|
+
};
|
192
|
+
process.stdout.write = stdoutWrite;
|
193
|
+
process.stderr.write = stderrWrite;
|
194
|
+
} else {
|
195
|
+
import_utilsBundle.debug.log = originalDebugLog;
|
196
|
+
process.stdout.write = originalStdoutWrite;
|
197
|
+
process.stderr.write = originalStderrWrite;
|
198
|
+
}
|
199
|
+
}
|
200
|
+
}
|
201
|
+
async function runUIMode(configFile, configCLIOverrides, options) {
|
202
|
+
const configLocation = (0, import_configLoader.resolveConfigLocation)(configFile);
|
203
|
+
return await innerRunTestServer(configLocation, configCLIOverrides, options, async (server, cancelPromise) => {
|
204
|
+
await (0, import_server.installRootRedirect)(server, void 0, { ...options, webApp: "uiMode.html" });
|
205
|
+
if (options.host !== void 0 || options.port !== void 0) {
|
206
|
+
await (0, import_server.openTraceInBrowser)(server.urlPrefix("human-readable"));
|
207
|
+
} else {
|
208
|
+
const channel = await installedChromiumChannelForUI(configLocation, configCLIOverrides);
|
209
|
+
const page = await (0, import_server.openTraceViewerApp)(server.urlPrefix("precise"), "chromium", {
|
210
|
+
headless: (0, import_utils.isUnderTest)() && process.env.PWTEST_HEADED_FOR_TEST !== "1",
|
211
|
+
persistentContextOptions: {
|
212
|
+
handleSIGINT: false,
|
213
|
+
channel
|
214
|
+
}
|
215
|
+
});
|
216
|
+
page.on("close", () => cancelPromise.resolve());
|
217
|
+
}
|
218
|
+
});
|
219
|
+
}
|
220
|
+
async function installedChromiumChannelForUI(configLocation, configCLIOverrides) {
|
221
|
+
const config = await (0, import_configLoader.loadConfig)(configLocation, configCLIOverrides).catch((e) => null);
|
222
|
+
if (!config)
|
223
|
+
return void 0;
|
224
|
+
if (config.projects.some((p) => (!p.project.use.browserName || p.project.use.browserName === "chromium") && !p.project.use.channel))
|
225
|
+
return void 0;
|
226
|
+
for (const channel of ["chromium", "chrome", "msedge"]) {
|
227
|
+
if (config.projects.some((p) => p.project.use.channel === channel))
|
228
|
+
return channel;
|
229
|
+
}
|
230
|
+
return void 0;
|
231
|
+
}
|
232
|
+
async function runTestServer(configFile, configCLIOverrides, options) {
|
233
|
+
const configLocation = (0, import_configLoader.resolveConfigLocation)(configFile);
|
234
|
+
return await innerRunTestServer(configLocation, configCLIOverrides, options, async (server) => {
|
235
|
+
console.log("Listening on " + server.urlPrefix("precise").replace("http:", "ws:") + "/" + server.wsGuid());
|
236
|
+
});
|
237
|
+
}
|
238
|
+
async function innerRunTestServer(configLocation, configCLIOverrides, options, openUI) {
|
239
|
+
const testServer = new TestServer(configLocation, configCLIOverrides);
|
240
|
+
const cancelPromise = new import_utils.ManualPromise();
|
241
|
+
const sigintWatcher = new import_sigIntWatcher.SigIntWatcher();
|
242
|
+
process.stdin.on("close", () => (0, import_utils.gracefullyProcessExitDoNotHang)(0));
|
243
|
+
void sigintWatcher.promise().then(() => cancelPromise.resolve());
|
244
|
+
try {
|
245
|
+
const server = await testServer.start(options);
|
246
|
+
await openUI(server, cancelPromise);
|
247
|
+
await cancelPromise;
|
248
|
+
} finally {
|
249
|
+
await testServer.stop();
|
250
|
+
sigintWatcher.disarm();
|
251
|
+
}
|
252
|
+
return sigintWatcher.hadSignal() ? "interrupted" : "passed";
|
253
|
+
}
|
254
|
+
function chunkToPayload(type, chunk) {
|
255
|
+
if (chunk instanceof Uint8Array)
|
256
|
+
return { type, buffer: chunk.toString("base64") };
|
257
|
+
return { type, text: chunk };
|
258
|
+
}
|
259
|
+
// Annotate the CommonJS export names for ESM import in node:
|
260
|
+
0 && (module.exports = {
|
261
|
+
TestServerDispatcher,
|
262
|
+
runTestServer,
|
263
|
+
runUIMode
|
264
|
+
});
|
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"sources": ["../../src/runner/testServer.ts"],
|
4
|
+
"sourcesContent": ["/**\n * Copyright Microsoft Corporation. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport util from 'util';\n\nimport { installRootRedirect, openTraceInBrowser, openTraceViewerApp, startTraceViewerServer } from 'playwright-core/lib/server';\nimport { ManualPromise, gracefullyProcessExitDoNotHang, isUnderTest } from 'playwright-core/lib/utils';\nimport { debug, open } from 'playwright-core/lib/utilsBundle';\n\nimport { loadConfig, resolveConfigLocation } from '../common/configLoader';\nimport ListReporter from '../reporters/list';\nimport { createReporterForTestServer } from './reporters';\nimport { SigIntWatcher } from './sigIntWatcher';\nimport { TestRunner, TestRunnerEvent } from './testRunner';\n\nimport type { TraceViewerRedirectOptions, TraceViewerServerOptions } from 'playwright-core/lib/server/trace/viewer/traceViewer';\nimport type { HttpServer, Transport } from 'playwright-core/lib/utils';\nimport type * as reporterTypes from '../../types/testReporter';\nimport type { ConfigLocation } from '../common/config';\nimport type { ConfigCLIOverrides } from '../common/ipc';\nimport type { ReportEntry, TestServerInterface, TestServerInterfaceEventEmitters } from '../isomorphic/testServerInterface';\nimport type { ReporterV2 } from '../reporters/reporterV2';\n\nconst originalDebugLog = debug.log;\n// eslint-disable-next-line no-restricted-properties\nconst originalStdoutWrite = process.stdout.write;\n// eslint-disable-next-line no-restricted-properties\nconst originalStderrWrite = process.stderr.write;\n\nclass TestServer {\n private _configLocation: ConfigLocation;\n private _configCLIOverrides: ConfigCLIOverrides;\n private _dispatcher: TestServerDispatcher | undefined;\n\n constructor(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides) {\n this._configLocation = configLocation;\n this._configCLIOverrides = configCLIOverrides;\n }\n\n async start(options: { host?: string, port?: number }): Promise<HttpServer> {\n this._dispatcher = new TestServerDispatcher(this._configLocation, this._configCLIOverrides);\n return await startTraceViewerServer({ ...options, transport: this._dispatcher.transport });\n }\n\n async stop() {\n await this._dispatcher?.stop();\n }\n}\n\nexport type ListTestsParams = {\n projects?: string[];\n locations?: string[];\n grep?: string;\n grepInvert?: string;\n};\n\nexport type RunTestsParams = {\n locations?: string[];\n grep?: string;\n grepInvert?: string;\n testIds?: string[];\n headed?: boolean;\n workers?: number | string;\n updateSnapshots?: 'all' | 'changed' | 'missing' | 'none';\n updateSourceMethod?: 'overwrite' | 'patch' | '3way';\n reporters?: string[],\n trace?: 'on' | 'off';\n video?: 'on' | 'off';\n projects?: string[];\n reuseContext?: boolean;\n connectWsEndpoint?: string;\n};\n\nexport class TestServerDispatcher implements TestServerInterface {\n readonly transport: Transport;\n private _serializer = require.resolve('./uiModeReporter');\n private _closeOnDisconnect = false;\n private _testRunner: TestRunner;\n private _globalSetupReport: ReportEntry[] | undefined;\n private _devServerReport: ReportEntry[] | undefined;\n readonly _dispatchEvent: TestServerInterfaceEventEmitters['dispatchEvent'];\n\n constructor(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides) {\n this._testRunner = new TestRunner(configLocation, configCLIOverrides);\n this.transport = {\n onconnect: () => {},\n dispatch: (method, params) => (this as any)[method](params),\n onclose: () => {\n if (this._closeOnDisconnect)\n gracefullyProcessExitDoNotHang(0);\n },\n };\n\n this._dispatchEvent = (method, params) => this.transport.sendEvent?.(method, params);\n this._testRunner.on(TestRunnerEvent.TestFilesChanged, testFiles => this._dispatchEvent('testFilesChanged', { testFiles }));\n }\n\n private async _wireReporter(messageSink: (message: any) => void) {\n return await createReporterForTestServer(this._serializer, messageSink);\n }\n\n private async _collectingReporter(): Promise<{ reporter: ReporterV2, report: ReportEntry[] }> {\n const report: ReportEntry[] = [];\n return {\n reporter: await createReporterForTestServer(this._serializer, e => report.push(e)),\n report,\n };\n }\n\n async initialize(params: Parameters<TestServerInterface['initialize']>[0]): ReturnType<TestServerInterface['initialize']> {\n // Note: this method can be called multiple times, for example from a new connection after UI mode reload.\n this._serializer = params.serializer || require.resolve('./uiModeReporter');\n this._closeOnDisconnect = !!params.closeOnDisconnect;\n await this._testRunner.initialize({\n ...params,\n });\n this._setInterceptStdio(!!params.interceptStdio);\n }\n\n async ping() {}\n\n async open(params: Parameters<TestServerInterface['open']>[0]): ReturnType<TestServerInterface['open']> {\n if (isUnderTest())\n return;\n // eslint-disable-next-line no-console\n open('vscode://file/' + params.location.file + ':' + params.location.line).catch(e => console.error(e));\n }\n\n async resizeTerminal(params: Parameters<TestServerInterface['resizeTerminal']>[0]): ReturnType<TestServerInterface['resizeTerminal']> {\n this._testRunner.resizeTerminal(params);\n }\n\n async checkBrowsers(): Promise<{ hasBrowsers: boolean; }> {\n return { hasBrowsers: this._testRunner.hasSomeBrowsers() };\n }\n\n async installBrowsers() {\n await this._testRunner.installBrowsers();\n }\n\n async runGlobalSetup(params: Parameters<TestServerInterface['runGlobalSetup']>[0]): ReturnType<TestServerInterface['runGlobalSetup']> {\n await this.runGlobalTeardown();\n\n const { reporter, report } = await this._collectingReporter();\n this._globalSetupReport = report;\n const { status } = await this._testRunner.runGlobalSetup([reporter, new ListReporter()]);\n return { report, status };\n }\n\n async runGlobalTeardown() {\n const { status } = await this._testRunner.runGlobalTeardown();\n const report = this._globalSetupReport || [];\n this._globalSetupReport = undefined;\n return { status, report };\n }\n\n async startDevServer(params: Parameters<TestServerInterface['startDevServer']>[0]): ReturnType<TestServerInterface['startDevServer']> {\n await this.stopDevServer({});\n\n const { reporter, report } = await this._collectingReporter();\n const { status } = await this._testRunner.startDevServer(reporter, 'out-of-process');\n return { report, status };\n }\n\n async stopDevServer(params: Parameters<TestServerInterface['stopDevServer']>[0]): ReturnType<TestServerInterface['stopDevServer']> {\n const { status } = await this._testRunner.stopDevServer();\n const report = this._devServerReport || [];\n this._devServerReport = undefined;\n return { status, report };\n }\n\n async clearCache(params: Parameters<TestServerInterface['clearCache']>[0]): ReturnType<TestServerInterface['clearCache']> {\n await this._testRunner.clearCache();\n }\n\n async listFiles(params: Parameters<TestServerInterface['listFiles']>[0]): ReturnType<TestServerInterface['listFiles']> {\n const { reporter, report } = await this._collectingReporter();\n const { status } = await this._testRunner.listFiles(reporter, params.projects);\n return { report, status };\n }\n\n async listTests(params: Parameters<TestServerInterface['listTests']>[0]): ReturnType<TestServerInterface['listTests']> {\n const { reporter, report } = await this._collectingReporter();\n const { status } = await this._testRunner.listTests(reporter, params);\n return { report, status };\n }\n\n async runTests(params: Parameters<TestServerInterface['runTests']>[0]): ReturnType<TestServerInterface['runTests']> {\n const wireReporter = await this._wireReporter(e => this._dispatchEvent('report', e));\n const { status } = await this._testRunner.runTests(wireReporter, params);\n return { status };\n }\n\n async watch(params: { fileNames: string[]; }) {\n await this._testRunner.watch(params.fileNames);\n }\n\n async findRelatedTestFiles(params: Parameters<TestServerInterface['findRelatedTestFiles']>[0]): ReturnType<TestServerInterface['findRelatedTestFiles']> {\n return this._testRunner.findRelatedTestFiles(params.files);\n }\n\n async stopTests() {\n await this._testRunner.stopTests();\n }\n\n async stop() {\n this._setInterceptStdio(false);\n await this._testRunner.stop();\n }\n\n async closeGracefully() {\n await this._testRunner.closeGracefully();\n }\n\n private _setInterceptStdio(interceptStdio: boolean) {\n /* eslint-disable no-restricted-properties */\n if (process.env.PWTEST_DEBUG)\n return;\n if (interceptStdio) {\n if (debug.log === originalDebugLog) {\n // Only if debug.log hasn't already been tampered with, don't intercept any DEBUG=* logging\n debug.log = (...args) => {\n const string = util.format(...args) + '\\n';\n return (originalStderrWrite as any).apply(process.stderr, [string]);\n };\n }\n const stdoutWrite = (chunk: string | Buffer) => {\n this._dispatchEvent('stdio', chunkToPayload('stdout', chunk));\n return true;\n };\n const stderrWrite = (chunk: string | Buffer) => {\n this._dispatchEvent('stdio', chunkToPayload('stderr', chunk));\n return true;\n };\n process.stdout.write = stdoutWrite;\n process.stderr.write = stderrWrite;\n } else {\n debug.log = originalDebugLog;\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n }\n /* eslint-enable no-restricted-properties */\n }\n}\n\nexport async function runUIMode(configFile: string | undefined, configCLIOverrides: ConfigCLIOverrides, options: TraceViewerServerOptions & TraceViewerRedirectOptions): Promise<reporterTypes.FullResult['status']> {\n const configLocation = resolveConfigLocation(configFile);\n return await innerRunTestServer(configLocation, configCLIOverrides, options, async (server: HttpServer, cancelPromise: ManualPromise<void>) => {\n await installRootRedirect(server, [], { ...options, webApp: 'uiMode.html' });\n if (options.host !== undefined || options.port !== undefined) {\n await openTraceInBrowser(server.urlPrefix('human-readable'));\n } else {\n const channel = await installedChromiumChannelForUI(configLocation, configCLIOverrides);\n const page = await openTraceViewerApp(server.urlPrefix('precise'), 'chromium', {\n headless: isUnderTest() && process.env.PWTEST_HEADED_FOR_TEST !== '1',\n persistentContextOptions: {\n handleSIGINT: false,\n channel,\n },\n });\n page.on('close', () => cancelPromise.resolve());\n }\n });\n}\n\n// Pick first channel that is used by one of the projects, to ensure it is installed on the machine.\nasync function installedChromiumChannelForUI(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides) {\n const config = await loadConfig(configLocation, configCLIOverrides).catch(e => null);\n if (!config)\n return undefined;\n if (config.projects.some(p => (!p.project.use.browserName || p.project.use.browserName === 'chromium') && !p.project.use.channel))\n return undefined;\n for (const channel of ['chromium', 'chrome', 'msedge']) {\n if (config.projects.some(p => p.project.use.channel === channel))\n return channel;\n }\n return undefined;\n}\n\nexport async function runTestServer(configFile: string | undefined, configCLIOverrides: ConfigCLIOverrides, options: { host?: string, port?: number }): Promise<reporterTypes.FullResult['status']> {\n const configLocation = resolveConfigLocation(configFile);\n return await innerRunTestServer(configLocation, configCLIOverrides, options, async server => {\n // eslint-disable-next-line no-console\n console.log('Listening on ' + server.urlPrefix('precise').replace('http:', 'ws:') + '/' + server.wsGuid());\n });\n}\n\nasync function innerRunTestServer(configLocation: ConfigLocation, configCLIOverrides: ConfigCLIOverrides, options: { host?: string, port?: number }, openUI: (server: HttpServer, cancelPromise: ManualPromise<void>) => Promise<void>): Promise<reporterTypes.FullResult['status']> {\n const testServer = new TestServer(configLocation, configCLIOverrides);\n const cancelPromise = new ManualPromise<void>();\n const sigintWatcher = new SigIntWatcher();\n process.stdin.on('close', () => gracefullyProcessExitDoNotHang(0));\n void sigintWatcher.promise().then(() => cancelPromise.resolve());\n try {\n const server = await testServer.start(options);\n await openUI(server, cancelPromise);\n await cancelPromise;\n } finally {\n await testServer.stop();\n sigintWatcher.disarm();\n }\n return sigintWatcher.hadSignal() ? 'interrupted' : 'passed';\n}\n\ntype StdioPayload = {\n type: 'stdout' | 'stderr';\n text?: string;\n buffer?: string;\n};\n\nfunction chunkToPayload(type: 'stdout' | 'stderr', chunk: Buffer | string): StdioPayload {\n if (chunk instanceof Uint8Array)\n return { type, buffer: chunk.toString('base64') };\n return { type, text: chunk };\n}\n"],
|
5
|
+
"mappings": "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",
|
6
|
+
"names": ["ListReporter", "util"]
|
7
|
+
}
|
@@ -0,0 +1,271 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.runUIMode = runUIMode;
|
7
|
+
var _server = require("playwright-core/lib/server");
|
8
|
+
var _utils = require("playwright-core/lib/utils");
|
9
|
+
var _compilationCache = require("../transform/compilationCache");
|
10
|
+
var _internalReporter = require("../reporters/internalReporter");
|
11
|
+
var _teleEmitter = require("../reporters/teleEmitter");
|
12
|
+
var _reporters = require("./reporters");
|
13
|
+
var _tasks = require("./tasks");
|
14
|
+
var _utilsBundle = require("playwright-core/lib/utilsBundle");
|
15
|
+
var _list = _interopRequireDefault(require("../reporters/list"));
|
16
|
+
var _multiplexer = require("../reporters/multiplexer");
|
17
|
+
var _sigIntWatcher = require("./sigIntWatcher");
|
18
|
+
var _fsWatcher = require("../fsWatcher");
|
19
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
20
|
+
/**
|
21
|
+
* Copyright Microsoft Corporation. All rights reserved.
|
22
|
+
*
|
23
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
24
|
+
* you may not use this file except in compliance with the License.
|
25
|
+
* You may obtain a copy of the License at
|
26
|
+
*
|
27
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
28
|
+
*
|
29
|
+
* Unless required by applicable law or agreed to in writing, software
|
30
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
31
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
32
|
+
* See the License for the specific language governing permissions and
|
33
|
+
* limitations under the License.
|
34
|
+
*/
|
35
|
+
|
36
|
+
class UIMode {
|
37
|
+
constructor(config) {
|
38
|
+
this._config = void 0;
|
39
|
+
this._transport = void 0;
|
40
|
+
this._testRun = void 0;
|
41
|
+
this.globalCleanup = void 0;
|
42
|
+
this._globalWatcher = void 0;
|
43
|
+
this._testWatcher = void 0;
|
44
|
+
this._originalStdoutWrite = void 0;
|
45
|
+
this._originalStderrWrite = void 0;
|
46
|
+
this._config = config;
|
47
|
+
process.env.PW_LIVE_TRACE_STACKS = '1';
|
48
|
+
config.cliListOnly = false;
|
49
|
+
config.cliPassWithNoTests = true;
|
50
|
+
config.config.preserveOutput = 'always';
|
51
|
+
for (const p of config.projects) {
|
52
|
+
p.project.retries = 0;
|
53
|
+
p.project.repeatEach = 1;
|
54
|
+
}
|
55
|
+
config.configCLIOverrides.use = config.configCLIOverrides.use || {};
|
56
|
+
config.configCLIOverrides.use.trace = {
|
57
|
+
mode: 'on',
|
58
|
+
sources: false,
|
59
|
+
_live: true
|
60
|
+
};
|
61
|
+
this._originalStdoutWrite = process.stdout.write;
|
62
|
+
this._originalStderrWrite = process.stderr.write;
|
63
|
+
this._globalWatcher = new _fsWatcher.Watcher('deep', () => this._dispatchEvent('listChanged', {}));
|
64
|
+
this._testWatcher = new _fsWatcher.Watcher('flat', events => {
|
65
|
+
const collector = new Set();
|
66
|
+
events.forEach(f => (0, _compilationCache.collectAffectedTestFiles)(f.file, collector));
|
67
|
+
this._dispatchEvent('testFilesChanged', {
|
68
|
+
testFileNames: [...collector]
|
69
|
+
});
|
70
|
+
});
|
71
|
+
}
|
72
|
+
async runGlobalSetup() {
|
73
|
+
const reporter = new _internalReporter.InternalReporter(new _list.default());
|
74
|
+
const taskRunner = (0, _tasks.createTaskRunnerForWatchSetup)(this._config, reporter);
|
75
|
+
reporter.onConfigure(this._config.config);
|
76
|
+
const testRun = new _tasks.TestRun(this._config, reporter);
|
77
|
+
const {
|
78
|
+
status,
|
79
|
+
cleanup: globalCleanup
|
80
|
+
} = await taskRunner.runDeferCleanup(testRun, 0);
|
81
|
+
await reporter.onEnd({
|
82
|
+
status
|
83
|
+
});
|
84
|
+
await reporter.onExit();
|
85
|
+
if (status !== 'passed') {
|
86
|
+
await globalCleanup();
|
87
|
+
return status;
|
88
|
+
}
|
89
|
+
this.globalCleanup = globalCleanup;
|
90
|
+
return status;
|
91
|
+
}
|
92
|
+
async showUI(options, cancelPromise) {
|
93
|
+
let queue = Promise.resolve();
|
94
|
+
this._transport = {
|
95
|
+
dispatch: async (method, params) => {
|
96
|
+
if (method === 'ping') return;
|
97
|
+
if (method === 'watch') {
|
98
|
+
this._watchFiles(params.fileNames);
|
99
|
+
return;
|
100
|
+
}
|
101
|
+
if (method === 'open' && params.location) {
|
102
|
+
(0, _utilsBundle.open)('vscode://file/' + params.location).catch(e => this._originalStderrWrite.call(process.stderr, String(e)));
|
103
|
+
return;
|
104
|
+
}
|
105
|
+
if (method === 'resizeTerminal') {
|
106
|
+
process.stdout.columns = params.cols;
|
107
|
+
process.stdout.rows = params.rows;
|
108
|
+
process.stderr.columns = params.cols;
|
109
|
+
process.stderr.columns = params.rows;
|
110
|
+
return;
|
111
|
+
}
|
112
|
+
if (method === 'stop') {
|
113
|
+
void this._stopTests();
|
114
|
+
return;
|
115
|
+
}
|
116
|
+
if (method === 'checkBrowsers') return {
|
117
|
+
hasBrowsers: hasSomeBrowsers()
|
118
|
+
};
|
119
|
+
if (method === 'installBrowsers') {
|
120
|
+
await installBrowsers();
|
121
|
+
return;
|
122
|
+
}
|
123
|
+
queue = queue.then(() => this._queueListOrRun(method, params));
|
124
|
+
await queue;
|
125
|
+
},
|
126
|
+
onclose: () => {}
|
127
|
+
};
|
128
|
+
const openOptions = {
|
129
|
+
app: 'uiMode.html',
|
130
|
+
headless: (0, _utils.isUnderTest)() && process.env.PWTEST_HEADED_FOR_TEST !== '1',
|
131
|
+
transport: this._transport,
|
132
|
+
host: options.host,
|
133
|
+
port: options.port,
|
134
|
+
persistentContextOptions: {
|
135
|
+
handleSIGINT: false
|
136
|
+
}
|
137
|
+
};
|
138
|
+
if (options.host !== undefined || options.port !== undefined) {
|
139
|
+
await (0, _server.openTraceInBrowser)([], openOptions);
|
140
|
+
} else {
|
141
|
+
const page = await (0, _server.openTraceViewerApp)([], 'chromium', openOptions);
|
142
|
+
page.on('close', () => cancelPromise.resolve());
|
143
|
+
}
|
144
|
+
if (!process.env.PWTEST_DEBUG) {
|
145
|
+
process.stdout.write = chunk => {
|
146
|
+
this._dispatchEvent('stdio', chunkToPayload('stdout', chunk));
|
147
|
+
return true;
|
148
|
+
};
|
149
|
+
process.stderr.write = chunk => {
|
150
|
+
this._dispatchEvent('stdio', chunkToPayload('stderr', chunk));
|
151
|
+
return true;
|
152
|
+
};
|
153
|
+
}
|
154
|
+
await cancelPromise;
|
155
|
+
if (!process.env.PWTEST_DEBUG) {
|
156
|
+
process.stdout.write = this._originalStdoutWrite;
|
157
|
+
process.stderr.write = this._originalStderrWrite;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
async _queueListOrRun(method, params) {
|
161
|
+
if (method === 'list') await this._listTests();
|
162
|
+
if (method === 'run') await this._runTests(params.testIds, params.projects);
|
163
|
+
}
|
164
|
+
_dispatchEvent(method, params) {
|
165
|
+
var _this$_transport$send, _this$_transport;
|
166
|
+
(_this$_transport$send = (_this$_transport = this._transport).sendEvent) === null || _this$_transport$send === void 0 || _this$_transport$send.call(_this$_transport, method, params);
|
167
|
+
}
|
168
|
+
async _listTests() {
|
169
|
+
const reporter = new _internalReporter.InternalReporter(new _teleEmitter.TeleReporterEmitter(e => this._dispatchEvent(e.method, e.params), true));
|
170
|
+
this._config.cliListOnly = true;
|
171
|
+
this._config.testIdMatcher = undefined;
|
172
|
+
const taskRunner = (0, _tasks.createTaskRunnerForList)(this._config, reporter, 'out-of-process', {
|
173
|
+
failOnLoadErrors: false
|
174
|
+
});
|
175
|
+
const testRun = new _tasks.TestRun(this._config, reporter);
|
176
|
+
(0, _compilationCache.clearCompilationCache)();
|
177
|
+
reporter.onConfigure(this._config.config);
|
178
|
+
const status = await taskRunner.run(testRun, 0);
|
179
|
+
await reporter.onEnd({
|
180
|
+
status
|
181
|
+
});
|
182
|
+
await reporter.onExit();
|
183
|
+
const projectDirs = new Set();
|
184
|
+
const projectOutputs = new Set();
|
185
|
+
for (const p of this._config.projects) {
|
186
|
+
projectDirs.add(p.project.testDir);
|
187
|
+
projectOutputs.add(p.project.outputDir);
|
188
|
+
}
|
189
|
+
this._globalWatcher.update([...projectDirs], [...projectOutputs], false);
|
190
|
+
}
|
191
|
+
async _runTests(testIds, projects) {
|
192
|
+
await this._stopTests();
|
193
|
+
const testIdSet = testIds ? new Set(testIds) : null;
|
194
|
+
this._config.cliListOnly = false;
|
195
|
+
this._config.cliProjectFilter = projects.length ? projects : undefined;
|
196
|
+
this._config.testIdMatcher = id => !testIdSet || testIdSet.has(id);
|
197
|
+
const reporters = await (0, _reporters.createReporters)(this._config, 'ui');
|
198
|
+
reporters.push(new _teleEmitter.TeleReporterEmitter(e => this._dispatchEvent(e.method, e.params), true));
|
199
|
+
const reporter = new _internalReporter.InternalReporter(new _multiplexer.Multiplexer(reporters));
|
200
|
+
const taskRunner = (0, _tasks.createTaskRunnerForWatch)(this._config, reporter);
|
201
|
+
const testRun = new _tasks.TestRun(this._config, reporter);
|
202
|
+
(0, _compilationCache.clearCompilationCache)();
|
203
|
+
reporter.onConfigure(this._config.config);
|
204
|
+
const stop = new _utils.ManualPromise();
|
205
|
+
const run = taskRunner.run(testRun, 0, stop).then(async status => {
|
206
|
+
await reporter.onEnd({
|
207
|
+
status
|
208
|
+
});
|
209
|
+
await reporter.onExit();
|
210
|
+
this._testRun = undefined;
|
211
|
+
this._config.testIdMatcher = undefined;
|
212
|
+
return status;
|
213
|
+
});
|
214
|
+
this._testRun = {
|
215
|
+
run,
|
216
|
+
stop
|
217
|
+
};
|
218
|
+
await run;
|
219
|
+
}
|
220
|
+
_watchFiles(fileNames) {
|
221
|
+
const files = new Set();
|
222
|
+
for (const fileName of fileNames) {
|
223
|
+
files.add(fileName);
|
224
|
+
(0, _compilationCache.dependenciesForTestFile)(fileName).forEach(file => files.add(file));
|
225
|
+
}
|
226
|
+
this._testWatcher.update([...files], [], true);
|
227
|
+
}
|
228
|
+
async _stopTests() {
|
229
|
+
var _this$_testRun, _this$_testRun2;
|
230
|
+
(_this$_testRun = this._testRun) === null || _this$_testRun === void 0 || (_this$_testRun = _this$_testRun.stop) === null || _this$_testRun === void 0 || _this$_testRun.resolve();
|
231
|
+
await ((_this$_testRun2 = this._testRun) === null || _this$_testRun2 === void 0 ? void 0 : _this$_testRun2.run);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
async function runUIMode(config, options) {
|
235
|
+
var _uiMode$globalCleanup;
|
236
|
+
const uiMode = new UIMode(config);
|
237
|
+
const globalSetupStatus = await uiMode.runGlobalSetup();
|
238
|
+
if (globalSetupStatus !== 'passed') return globalSetupStatus;
|
239
|
+
const cancelPromise = new _utils.ManualPromise();
|
240
|
+
const sigintWatcher = new _sigIntWatcher.SigIntWatcher();
|
241
|
+
void sigintWatcher.promise().then(() => cancelPromise.resolve());
|
242
|
+
try {
|
243
|
+
await uiMode.showUI(options, cancelPromise);
|
244
|
+
} finally {
|
245
|
+
sigintWatcher.disarm();
|
246
|
+
}
|
247
|
+
return (await ((_uiMode$globalCleanup = uiMode.globalCleanup) === null || _uiMode$globalCleanup === void 0 ? void 0 : _uiMode$globalCleanup.call(uiMode))) || (sigintWatcher.hadSignal() ? 'interrupted' : 'passed');
|
248
|
+
}
|
249
|
+
function chunkToPayload(type, chunk) {
|
250
|
+
if (chunk instanceof Buffer) return {
|
251
|
+
type,
|
252
|
+
buffer: chunk.toString('base64')
|
253
|
+
};
|
254
|
+
return {
|
255
|
+
type,
|
256
|
+
text: chunk
|
257
|
+
};
|
258
|
+
}
|
259
|
+
function hasSomeBrowsers() {
|
260
|
+
for (const browserName of ['chromium', 'webkit', 'firefox']) {
|
261
|
+
try {
|
262
|
+
_server.registry.findExecutable(browserName).executablePathOrDie('javascript');
|
263
|
+
return true;
|
264
|
+
} catch {}
|
265
|
+
}
|
266
|
+
return false;
|
267
|
+
}
|
268
|
+
async function installBrowsers() {
|
269
|
+
const executables = _server.registry.defaultExecutables();
|
270
|
+
await _server.registry.install(executables, false);
|
271
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
var uiModeReporter_exports = {};
|
20
|
+
__export(uiModeReporter_exports, {
|
21
|
+
default: () => uiModeReporter_default
|
22
|
+
});
|
23
|
+
module.exports = __toCommonJS(uiModeReporter_exports);
|
24
|
+
var import_teleEmitter = require("../reporters/teleEmitter");
|
25
|
+
class UIModeReporter extends import_teleEmitter.TeleReporterEmitter {
|
26
|
+
constructor(options) {
|
27
|
+
super(options._send, { omitBuffers: true });
|
28
|
+
}
|
29
|
+
}
|
30
|
+
var uiModeReporter_default = UIModeReporter;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"sources": ["../../src/runner/uiModeReporter.ts"],
|
4
|
+
"sourcesContent": ["/**\n * Copyright (c) Microsoft Corporation.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TeleReporterEmitter } from '../reporters/teleEmitter';\n\nclass UIModeReporter extends TeleReporterEmitter {\n constructor(options: any) {\n super(options._send, { omitBuffers: true });\n }\n}\n\nexport default UIModeReporter;\n"],
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,yBAAoC;AAEpC,MAAM,uBAAuB,uCAAoB;AAAA,EAC/C,YAAY,SAAc;AACxB,UAAM,QAAQ,OAAO,EAAE,aAAa,KAAK,CAAC;AAAA,EAC5C;AACF;AAEA,IAAO,yBAAQ;",
|
6
|
+
"names": []
|
7
|
+
}
|