@smoothdeploy/playwright 1.58.4 → 1.61.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/ThirdPartyNotices.txt +8 -5036
- package/lib/agents/agentParser.js +2 -2
- package/lib/agents/generateAgents.js +69 -22
- package/lib/agents/playwright-test-healer.agent.md +1 -0
- package/lib/agents/playwright-test-planner.agent.md +2 -1
- package/lib/cli/reportActions.js +78 -0
- package/lib/cli/testActions.js +213 -0
- package/lib/common/index.js +2931 -0
- package/lib/common/index.js.txt +35 -0
- package/lib/errorContext.js +130 -0
- package/lib/index.js +276 -219
- package/lib/{isomorphic/testServerConnection.js → isomorphic.js} +70 -35
- package/lib/isomorphic.js.txt +9 -0
- package/lib/loader/loaderProcessEntry.js +34 -0
- package/lib/loader/loaderProcessEntry.js.txt +9 -0
- package/lib/matchers/expect.js +12990 -249
- package/lib/matchers/expect.js.LICENSE +693 -0
- package/lib/matchers/expect.js.txt +72 -0
- package/lib/mcp/test/browserBackend.js +49 -22
- package/lib/mcp/test/generatorTools.js +16 -16
- package/lib/mcp/test/plannerTools.js +25 -20
- package/lib/mcp/test/seed.js +7 -7
- package/lib/mcp/test/testBackend.js +30 -30
- package/lib/mcp/test/testContext.js +54 -33
- package/lib/mcp/test/testTools.js +15 -25
- package/lib/{internalsForTest.js → package.js} +13 -8
- package/lib/program.js +71 -265
- package/lib/runner/index.js +8389 -0
- package/lib/runner/index.js.txt +60 -0
- package/lib/transform/babelBundle.js +71002 -18
- package/lib/transform/babelBundle.js.LICENSE +2359 -0
- package/lib/transform/babelBundle.js.txt +325 -0
- package/lib/transform/esmLoader.js +5994 -33
- package/lib/transform/esmLoader.js.LICENSE +335 -0
- package/lib/transform/esmLoader.js.txt +57 -0
- package/lib/util.js +48 -48
- package/lib/worker/workerProcessEntry.js +1868 -0
- package/lib/worker/workerProcessEntry.js.txt +20 -0
- package/package.json +5 -16
- package/test.mjs +1 -0
- package/types/test.d.ts +238 -28
- package/types/testReporter.d.ts +7 -5
- package/lib/common/config.js +0 -282
- package/lib/common/configLoader.js +0 -344
- package/lib/common/esmLoaderHost.js +0 -104
- package/lib/common/expectBundle.js +0 -28
- package/lib/common/expectBundleImpl.js +0 -407
- package/lib/common/fixtures.js +0 -302
- package/lib/common/ipc.js +0 -60
- package/lib/common/poolBuilder.js +0 -85
- package/lib/common/process.js +0 -132
- package/lib/common/suiteUtils.js +0 -140
- package/lib/common/test.js +0 -321
- package/lib/common/testLoader.js +0 -101
- package/lib/common/testType.js +0 -298
- package/lib/common/validators.js +0 -68
- package/lib/fsWatcher.js +0 -67
- package/lib/isomorphic/events.js +0 -77
- package/lib/isomorphic/folders.js +0 -30
- package/lib/isomorphic/stringInternPool.js +0 -69
- package/lib/isomorphic/teleReceiver.js +0 -521
- package/lib/isomorphic/teleSuiteUpdater.js +0 -157
- package/lib/isomorphic/testServerInterface.js +0 -16
- package/lib/isomorphic/testTree.js +0 -329
- package/lib/isomorphic/types.d.js +0 -16
- package/lib/loader/loaderMain.js +0 -59
- package/lib/matchers/matcherHint.js +0 -44
- package/lib/matchers/matchers.js +0 -383
- package/lib/matchers/toBeTruthy.js +0 -75
- package/lib/matchers/toEqual.js +0 -100
- package/lib/matchers/toHaveURL.js +0 -101
- package/lib/matchers/toMatchAriaSnapshot.js +0 -159
- package/lib/matchers/toMatchSnapshot.js +0 -342
- package/lib/matchers/toMatchText.js +0 -99
- package/lib/mcp/browser/browserContextFactory.js +0 -329
- package/lib/mcp/browser/browserServerBackend.js +0 -84
- package/lib/mcp/browser/config.js +0 -421
- package/lib/mcp/browser/context.js +0 -244
- package/lib/mcp/browser/response.js +0 -278
- package/lib/mcp/browser/sessionLog.js +0 -75
- package/lib/mcp/browser/tab.js +0 -343
- package/lib/mcp/browser/tools/common.js +0 -65
- package/lib/mcp/browser/tools/console.js +0 -46
- package/lib/mcp/browser/tools/dialogs.js +0 -60
- package/lib/mcp/browser/tools/evaluate.js +0 -61
- package/lib/mcp/browser/tools/files.js +0 -58
- package/lib/mcp/browser/tools/form.js +0 -63
- package/lib/mcp/browser/tools/install.js +0 -72
- package/lib/mcp/browser/tools/keyboard.js +0 -107
- package/lib/mcp/browser/tools/mouse.js +0 -107
- package/lib/mcp/browser/tools/navigate.js +0 -71
- package/lib/mcp/browser/tools/network.js +0 -63
- package/lib/mcp/browser/tools/open.js +0 -57
- package/lib/mcp/browser/tools/pdf.js +0 -49
- package/lib/mcp/browser/tools/runCode.js +0 -78
- package/lib/mcp/browser/tools/screenshot.js +0 -93
- package/lib/mcp/browser/tools/snapshot.js +0 -173
- package/lib/mcp/browser/tools/tabs.js +0 -67
- package/lib/mcp/browser/tools/tool.js +0 -47
- package/lib/mcp/browser/tools/tracing.js +0 -74
- package/lib/mcp/browser/tools/utils.js +0 -94
- package/lib/mcp/browser/tools/verify.js +0 -143
- package/lib/mcp/browser/tools/wait.js +0 -63
- package/lib/mcp/browser/tools.js +0 -84
- package/lib/mcp/browser/watchdog.js +0 -44
- package/lib/mcp/config.d.js +0 -16
- package/lib/mcp/extension/cdpRelay.js +0 -351
- package/lib/mcp/extension/extensionContextFactory.js +0 -76
- package/lib/mcp/extension/protocol.js +0 -28
- package/lib/mcp/index.js +0 -61
- package/lib/mcp/log.js +0 -35
- package/lib/mcp/program.js +0 -111
- package/lib/mcp/sdk/exports.js +0 -28
- package/lib/mcp/sdk/http.js +0 -152
- package/lib/mcp/sdk/inProcessTransport.js +0 -71
- package/lib/mcp/sdk/server.js +0 -223
- package/lib/mcp/sdk/tool.js +0 -47
- package/lib/mcp/terminal/cli.js +0 -296
- package/lib/mcp/terminal/command.js +0 -56
- package/lib/mcp/terminal/commands.js +0 -333
- package/lib/mcp/terminal/daemon.js +0 -129
- package/lib/mcp/terminal/help.json +0 -32
- package/lib/mcp/terminal/helpGenerator.js +0 -88
- package/lib/mcp/terminal/socketConnection.js +0 -80
- package/lib/plugins/gitCommitInfoPlugin.js +0 -198
- package/lib/plugins/index.js +0 -28
- package/lib/plugins/webServerPlugin.js +0 -237
- package/lib/reporters/base.js +0 -634
- package/lib/reporters/blob.js +0 -138
- package/lib/reporters/dot.js +0 -99
- package/lib/reporters/empty.js +0 -32
- package/lib/reporters/github.js +0 -128
- package/lib/reporters/html.js +0 -633
- package/lib/reporters/internalReporter.js +0 -138
- package/lib/reporters/json.js +0 -254
- package/lib/reporters/junit.js +0 -232
- package/lib/reporters/line.js +0 -131
- package/lib/reporters/list.js +0 -253
- package/lib/reporters/listModeReporter.js +0 -69
- package/lib/reporters/markdown.js +0 -144
- package/lib/reporters/merge.js +0 -558
- package/lib/reporters/multiplexer.js +0 -112
- package/lib/reporters/reporterV2.js +0 -102
- package/lib/reporters/smoothdeploy.js +0 -333
- package/lib/reporters/teleEmitter.js +0 -317
- package/lib/reporters/versions/blobV1.js +0 -16
- package/lib/runner/dispatcher.js +0 -531
- package/lib/runner/failureTracker.js +0 -72
- package/lib/runner/lastRun.js +0 -77
- package/lib/runner/loadUtils.js +0 -334
- package/lib/runner/loaderHost.js +0 -89
- package/lib/runner/processHost.js +0 -180
- package/lib/runner/projectUtils.js +0 -241
- package/lib/runner/rebase.js +0 -189
- package/lib/runner/reporters.js +0 -140
- package/lib/runner/sigIntWatcher.js +0 -96
- package/lib/runner/storage.js +0 -91
- package/lib/runner/taskRunner.js +0 -127
- package/lib/runner/tasks.js +0 -410
- package/lib/runner/testGroups.js +0 -125
- package/lib/runner/testRunner.js +0 -398
- package/lib/runner/testServer.js +0 -269
- package/lib/runner/uiModeReporter.js +0 -30
- package/lib/runner/vcs.js +0 -72
- package/lib/runner/watchMode.js +0 -396
- package/lib/runner/workerHost.js +0 -104
- package/lib/third_party/pirates.js +0 -62
- package/lib/third_party/tsconfig-loader.js +0 -103
- package/lib/transform/babelBundleImpl.js +0 -461
- package/lib/transform/compilationCache.js +0 -274
- package/lib/transform/md.js +0 -221
- package/lib/transform/portTransport.js +0 -67
- package/lib/transform/transform.js +0 -303
- package/lib/utilsBundle.js +0 -50
- package/lib/utilsBundleImpl.js +0 -103
- package/lib/worker/fixtureRunner.js +0 -262
- package/lib/worker/testInfo.js +0 -536
- package/lib/worker/testTracing.js +0 -345
- package/lib/worker/timeoutManager.js +0 -174
- package/lib/worker/util.js +0 -31
- package/lib/worker/workerMain.js +0 -530
- /package/lib/{common/globals.js → globals.js} +0 -0
|
@@ -36,17 +36,17 @@ module.exports = __toCommonJS(testContext_exports);
|
|
|
36
36
|
var import_fs = __toESM(require("fs"));
|
|
37
37
|
var import_os = __toESM(require("os"));
|
|
38
38
|
var import_path = __toESM(require("path"));
|
|
39
|
-
var
|
|
40
|
-
var
|
|
41
|
-
var import_list = __toESM(require("../../reporters/list"));
|
|
39
|
+
var import_coreBundle = require("playwright-core/lib/coreBundle");
|
|
40
|
+
var import_runner = require("../../runner");
|
|
42
41
|
var import_streams = require("./streams");
|
|
43
42
|
var import_util = require("../../util");
|
|
44
|
-
var import_testRunner = require("../../runner/testRunner");
|
|
45
43
|
var import_seed = require("./seed");
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
var import_common = require("../../common");
|
|
45
|
+
const debug = require("playwright-core/lib/utilsBundle").debug;
|
|
46
|
+
const { noColors } = require("playwright-core/lib/coreBundle").iso;
|
|
47
|
+
const { ManualPromise, signalToPromise } = require("playwright-core/lib/coreBundle").iso;
|
|
48
|
+
const { escapeRegExp } = require("playwright-core/lib/coreBundle").iso;
|
|
49
|
+
const { toPosixPath } = require("playwright-core/lib/coreBundle").utils;
|
|
50
50
|
class GeneratorJournal {
|
|
51
51
|
constructor(rootPath, plan, seed) {
|
|
52
52
|
this._rootPath = rootPath;
|
|
@@ -62,7 +62,7 @@ class GeneratorJournal {
|
|
|
62
62
|
const result = [];
|
|
63
63
|
result.push(`# Plan`);
|
|
64
64
|
result.push(this._plan);
|
|
65
|
-
result.push(`# Seed file: ${
|
|
65
|
+
result.push(`# Seed file: ${toPosixPath(import_path.default.relative(this._rootPath, this._seed.file))}`);
|
|
66
66
|
result.push("```ts");
|
|
67
67
|
result.push(this._seed.content);
|
|
68
68
|
result.push("```");
|
|
@@ -77,15 +77,22 @@ ${step.code}
|
|
|
77
77
|
}
|
|
78
78
|
class TestContext {
|
|
79
79
|
constructor(clientInfo, configPath, options) {
|
|
80
|
+
this._testOpQueue = Promise.resolve();
|
|
80
81
|
this._clientInfo = clientInfo;
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
this.rootPath = rootPath || this._configLocation.configDir;
|
|
82
|
+
this._configLocation = import_common.configLoader.resolveConfigLocation(configPath || clientInfo.cwd);
|
|
83
|
+
this.rootPath = clientInfo.cwd || this._configLocation.configDir;
|
|
84
84
|
if (options?.headless !== void 0)
|
|
85
85
|
this.computedHeaded = !options.headless;
|
|
86
86
|
else
|
|
87
87
|
this.computedHeaded = !process.env.CI && !(import_os.default.platform() === "linux" && !process.env.DISPLAY);
|
|
88
88
|
}
|
|
89
|
+
async _enqueue(fn) {
|
|
90
|
+
const next = this._testOpQueue.then(fn);
|
|
91
|
+
this._testOpQueue = next.then(() => {
|
|
92
|
+
}, () => {
|
|
93
|
+
});
|
|
94
|
+
return await next;
|
|
95
|
+
}
|
|
89
96
|
existingTestRunner() {
|
|
90
97
|
return this._testRunnerAndScreen?.testRunner;
|
|
91
98
|
}
|
|
@@ -103,16 +110,16 @@ class TestContext {
|
|
|
103
110
|
}
|
|
104
111
|
async createTestRunner() {
|
|
105
112
|
await this._cleanupTestRunner();
|
|
106
|
-
const
|
|
107
|
-
await
|
|
108
|
-
const testPaused = new
|
|
113
|
+
const runner = new import_runner.testRunner.TestRunner(this._configLocation, {});
|
|
114
|
+
await runner.initialize({});
|
|
115
|
+
const testPaused = new ManualPromise();
|
|
109
116
|
const testRunnerAndScreen = {
|
|
110
117
|
...createScreen(),
|
|
111
|
-
testRunner,
|
|
118
|
+
testRunner: runner,
|
|
112
119
|
waitForTestPaused: () => testPaused
|
|
113
120
|
};
|
|
114
121
|
this._testRunnerAndScreen = testRunnerAndScreen;
|
|
115
|
-
|
|
122
|
+
runner.on(import_runner.testRunner.TestRunnerEvent.TestPaused, (params) => {
|
|
116
123
|
testRunnerAndScreen.sendMessageToPausedTest = params.sendMessage;
|
|
117
124
|
testPaused.resolve();
|
|
118
125
|
});
|
|
@@ -120,8 +127,8 @@ class TestContext {
|
|
|
120
127
|
}
|
|
121
128
|
async getOrCreateSeedFile(seedFile, projectName) {
|
|
122
129
|
const configDir = this._configLocation.configDir;
|
|
123
|
-
const { testRunner } = await this.createTestRunner();
|
|
124
|
-
const config = await
|
|
130
|
+
const { testRunner: runner } = await this.createTestRunner();
|
|
131
|
+
const config = await runner.loadConfig();
|
|
125
132
|
const project = (0, import_seed.seedProject)(config, projectName);
|
|
126
133
|
if (!seedFile) {
|
|
127
134
|
seedFile = await (0, import_seed.ensureSeedFile)(project);
|
|
@@ -149,31 +156,34 @@ class TestContext {
|
|
|
149
156
|
projectName: project.project.name
|
|
150
157
|
};
|
|
151
158
|
}
|
|
152
|
-
async runSeedTest(seedFile, projectName) {
|
|
159
|
+
async runSeedTest(seedFile, projectName, signal) {
|
|
153
160
|
const result = await this.runTestsWithGlobalSetupAndPossiblePause({
|
|
154
161
|
headed: this.computedHeaded,
|
|
155
|
-
locations: ["/" +
|
|
162
|
+
locations: ["/" + escapeRegExp(seedFile) + "/"],
|
|
156
163
|
projects: [projectName],
|
|
157
164
|
timeout: 0,
|
|
158
165
|
workers: 1,
|
|
159
166
|
pauseAtEnd: true,
|
|
160
167
|
disableConfigReporters: true,
|
|
161
168
|
failOnLoadErrors: true
|
|
162
|
-
});
|
|
169
|
+
}, signal);
|
|
163
170
|
if (result.status === "passed")
|
|
164
171
|
result.output += "\nError: seed test not found.";
|
|
165
172
|
else if (result.status !== "paused")
|
|
166
173
|
result.output += "\nError while running the seed test.";
|
|
167
174
|
return result;
|
|
168
175
|
}
|
|
169
|
-
async runTestsWithGlobalSetupAndPossiblePause(params) {
|
|
176
|
+
async runTestsWithGlobalSetupAndPossiblePause(params, signal) {
|
|
177
|
+
return this._enqueue(() => this._runTestsImpl(params, signal));
|
|
178
|
+
}
|
|
179
|
+
async _runTestsImpl(params, signal) {
|
|
170
180
|
const configDir = this._configLocation.configDir;
|
|
171
181
|
const testRunnerAndScreen = await this.createTestRunner();
|
|
172
|
-
const { testRunner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
|
|
182
|
+
const { testRunner: runner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
|
|
173
183
|
claimStdio();
|
|
174
184
|
try {
|
|
175
185
|
const setupReporter = new MCPListReporter({ configDir, screen, includeTestId: true });
|
|
176
|
-
const { status: status2 } = await
|
|
186
|
+
const { status: status2 } = await runner.runGlobalSetup([setupReporter]);
|
|
177
187
|
if (status2 !== "passed")
|
|
178
188
|
return { output: testRunnerAndScreen.output.join("\n"), status: status2 };
|
|
179
189
|
} finally {
|
|
@@ -183,19 +193,28 @@ class TestContext {
|
|
|
183
193
|
const cleanup = async () => {
|
|
184
194
|
claimStdio();
|
|
185
195
|
try {
|
|
186
|
-
const result = await
|
|
196
|
+
const result = await runner.runGlobalTeardown();
|
|
187
197
|
if (status === "passed")
|
|
188
198
|
status = result.status;
|
|
189
199
|
} finally {
|
|
190
200
|
releaseStdio();
|
|
191
201
|
}
|
|
192
202
|
};
|
|
203
|
+
const abort = signal ? signalToPromise(signal) : void 0;
|
|
204
|
+
const abortPromise = abort ? abort.promise.then(() => "interrupted") : new Promise(() => {
|
|
205
|
+
});
|
|
193
206
|
try {
|
|
194
207
|
const reporter = new MCPListReporter({ configDir, screen, includeTestId: true });
|
|
195
208
|
status = await Promise.race([
|
|
196
|
-
|
|
197
|
-
testRunnerAndScreen.waitForTestPaused().then(() => "paused")
|
|
209
|
+
runner.runTests(reporter, params).then((result) => result.status),
|
|
210
|
+
testRunnerAndScreen.waitForTestPaused().then(() => "paused"),
|
|
211
|
+
abortPromise
|
|
198
212
|
]);
|
|
213
|
+
if (status === "interrupted") {
|
|
214
|
+
await runner.stopTests();
|
|
215
|
+
await cleanup();
|
|
216
|
+
return { output: testRunnerAndScreen.output.join("\n"), status };
|
|
217
|
+
}
|
|
199
218
|
if (status === "paused") {
|
|
200
219
|
const response = await testRunnerAndScreen.sendMessageToPausedTest({ request: { initialize: { clientInfo: this._clientInfo } } });
|
|
201
220
|
if (response.error)
|
|
@@ -208,12 +227,14 @@ class TestContext {
|
|
|
208
227
|
testRunnerAndScreen.output.push(String(e));
|
|
209
228
|
await cleanup();
|
|
210
229
|
return { output: testRunnerAndScreen.output.join("\n"), status };
|
|
230
|
+
} finally {
|
|
231
|
+
abort?.dispose();
|
|
211
232
|
}
|
|
212
233
|
await cleanup();
|
|
213
234
|
return { output: testRunnerAndScreen.output.join("\n"), status };
|
|
214
235
|
}
|
|
215
236
|
async close() {
|
|
216
|
-
await this._cleanupTestRunner().catch(
|
|
237
|
+
await this._enqueue(() => this._cleanupTestRunner()).catch((e) => debug("pw:mcp:error")(e));
|
|
217
238
|
}
|
|
218
239
|
async sendMessageToPausedTest(request) {
|
|
219
240
|
const sendMessage = this._testRunnerAndScreen?.sendMessageToPausedTest;
|
|
@@ -223,7 +244,7 @@ class TestContext {
|
|
|
223
244
|
if (result.error)
|
|
224
245
|
throw new Error(result.error.message);
|
|
225
246
|
if (typeof request?.callTool?.arguments?.["intent"] === "string") {
|
|
226
|
-
const response =
|
|
247
|
+
const response = import_coreBundle.tools.parseResponse(result.response.callTool);
|
|
227
248
|
if (response && !response.isError && response.code)
|
|
228
249
|
this.generatorJournal?.logStep(request.callTool.arguments["intent"], response.code);
|
|
229
250
|
}
|
|
@@ -235,9 +256,9 @@ function createScreen() {
|
|
|
235
256
|
const stdout = new import_streams.StringWriteStream(output, "stdout");
|
|
236
257
|
const stderr = new import_streams.StringWriteStream(output, "stderr");
|
|
237
258
|
const screen = {
|
|
238
|
-
...
|
|
259
|
+
...import_runner.base.terminalScreen,
|
|
239
260
|
isTTY: false,
|
|
240
|
-
colors:
|
|
261
|
+
colors: noColors,
|
|
241
262
|
stdout,
|
|
242
263
|
stderr
|
|
243
264
|
};
|
|
@@ -271,7 +292,7 @@ const bestPracticesMarkdown = `
|
|
|
271
292
|
- NEVER! use page.waitForTimeout()
|
|
272
293
|
- NEVER! use page.evaluate()
|
|
273
294
|
`;
|
|
274
|
-
class MCPListReporter extends
|
|
295
|
+
class MCPListReporter extends import_runner.ListReporter {
|
|
275
296
|
async onTestPaused() {
|
|
276
297
|
await new Promise(() => {
|
|
277
298
|
});
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
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
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
var testTools_exports = {};
|
|
30
20
|
__export(testTools_exports, {
|
|
@@ -33,20 +23,20 @@ __export(testTools_exports, {
|
|
|
33
23
|
runTests: () => runTests
|
|
34
24
|
});
|
|
35
25
|
module.exports = __toCommonJS(testTools_exports);
|
|
36
|
-
var
|
|
37
|
-
var import_listModeReporter = __toESM(require("../../reporters/listModeReporter"));
|
|
26
|
+
var import_runner = require("../../runner");
|
|
38
27
|
var import_testTool = require("./testTool");
|
|
28
|
+
const z = require("playwright-core/lib/utilsBundle").z;
|
|
39
29
|
const listTests = (0, import_testTool.defineTestTool)({
|
|
40
30
|
schema: {
|
|
41
31
|
name: "test_list",
|
|
42
32
|
title: "List tests",
|
|
43
33
|
description: "List tests",
|
|
44
|
-
inputSchema:
|
|
34
|
+
inputSchema: z.object({}),
|
|
45
35
|
type: "readOnly"
|
|
46
36
|
},
|
|
47
37
|
handle: async (context) => {
|
|
48
38
|
const { testRunner, screen, output } = await context.createTestRunner();
|
|
49
|
-
const reporter = new
|
|
39
|
+
const reporter = new import_runner.ListModeReporter({ screen, includeTestId: true });
|
|
50
40
|
await testRunner.listTests(reporter, {});
|
|
51
41
|
return { content: output.map((text) => ({ type: "text", text })) };
|
|
52
42
|
}
|
|
@@ -56,18 +46,18 @@ const runTests = (0, import_testTool.defineTestTool)({
|
|
|
56
46
|
name: "test_run",
|
|
57
47
|
title: "Run tests",
|
|
58
48
|
description: "Run tests",
|
|
59
|
-
inputSchema:
|
|
60
|
-
locations:
|
|
61
|
-
projects:
|
|
49
|
+
inputSchema: z.object({
|
|
50
|
+
locations: z.array(z.string()).optional().describe('Folder, file or location to run: "test/e2e" or "test/e2e/file.spec.ts" or "test/e2e/file.spec.ts:20"'),
|
|
51
|
+
projects: z.array(z.string()).optional().describe('Projects to run, projects from playwright.config.ts, by default runs all projects. Running with "chromium" is a good start')
|
|
62
52
|
}),
|
|
63
53
|
type: "readOnly"
|
|
64
54
|
},
|
|
65
|
-
handle: async (context, params) => {
|
|
55
|
+
handle: async (context, params, signal) => {
|
|
66
56
|
const { output } = await context.runTestsWithGlobalSetupAndPossiblePause({
|
|
67
57
|
locations: params.locations ?? [],
|
|
68
58
|
projects: params.projects,
|
|
69
59
|
disableConfigReporters: true
|
|
70
|
-
});
|
|
60
|
+
}, signal);
|
|
71
61
|
return { content: [{ type: "text", text: output }] };
|
|
72
62
|
}
|
|
73
63
|
});
|
|
@@ -76,15 +66,15 @@ const debugTest = (0, import_testTool.defineTestTool)({
|
|
|
76
66
|
name: "test_debug",
|
|
77
67
|
title: "Debug single test",
|
|
78
68
|
description: "Debug single test",
|
|
79
|
-
inputSchema:
|
|
80
|
-
test:
|
|
81
|
-
id:
|
|
82
|
-
title:
|
|
69
|
+
inputSchema: z.object({
|
|
70
|
+
test: z.object({
|
|
71
|
+
id: z.string().describe("Test ID to debug."),
|
|
72
|
+
title: z.string().describe("Human readable test title for granting permission to debug the test.")
|
|
83
73
|
})
|
|
84
74
|
}),
|
|
85
75
|
type: "readOnly"
|
|
86
76
|
},
|
|
87
|
-
handle: async (context, params) => {
|
|
77
|
+
handle: async (context, params, signal) => {
|
|
88
78
|
const { output, status } = await context.runTestsWithGlobalSetupAndPossiblePause({
|
|
89
79
|
headed: context.computedHeaded,
|
|
90
80
|
locations: [],
|
|
@@ -96,7 +86,7 @@ const debugTest = (0, import_testTool.defineTestTool)({
|
|
|
96
86
|
pauseOnError: true,
|
|
97
87
|
disableConfigReporters: true,
|
|
98
88
|
actionTimeout: 5e3
|
|
99
|
-
});
|
|
89
|
+
}, signal);
|
|
100
90
|
return { content: [{ type: "text", text: output }], isError: status !== "paused" && status !== "passed" };
|
|
101
91
|
}
|
|
102
92
|
});
|
|
@@ -26,17 +26,22 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
31
|
-
|
|
29
|
+
var package_exports = {};
|
|
30
|
+
__export(package_exports, {
|
|
31
|
+
libPath: () => libPath,
|
|
32
|
+
packageJSON: () => packageJSON,
|
|
33
|
+
packageRoot: () => packageRoot
|
|
32
34
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
35
|
+
module.exports = __toCommonJS(package_exports);
|
|
34
36
|
var import_path = __toESM(require("path"));
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
const packageRoot = import_path.default.join(__dirname, "..");
|
|
38
|
+
const packageJSON = require(import_path.default.join(packageRoot, "package.json"));
|
|
39
|
+
function libPath(...parts) {
|
|
40
|
+
return import_path.default.join(packageRoot, "lib", ...parts);
|
|
38
41
|
}
|
|
39
42
|
// Annotate the CommonJS export names for ESM import in node:
|
|
40
43
|
0 && (module.exports = {
|
|
41
|
-
|
|
44
|
+
libPath,
|
|
45
|
+
packageJSON,
|
|
46
|
+
packageRoot
|
|
42
47
|
});
|