@smoothdeploy/playwright 1.58.4 → 1.60.0-beta-1780662356000
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 +21 -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 +211 -0
- package/lib/common/index.js +2898 -0
- package/lib/common/index.js.txt +35 -0
- package/lib/errorContext.js +130 -0
- package/lib/index.js +258 -206
- 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 +12988 -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 +50 -33
- package/lib/mcp/test/testTools.js +15 -25
- package/lib/{internalsForTest.js → package.js} +13 -8
- package/lib/program.js +63 -263
- package/lib/runner/index.js +8339 -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 +5884 -30
- package/lib/transform/esmLoader.js.LICENSE +335 -0
- package/lib/transform/esmLoader.js.txt +55 -0
- package/lib/util.js +37 -34
- package/lib/worker/workerProcessEntry.js +3251 -0
- package/lib/worker/workerProcessEntry.js.txt +24 -0
- package/package.json +5 -16
- package/test.mjs +1 -0
- package/types/test.d.ts +172 -12
- 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,21 @@ ${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
|
+
return await next;
|
|
94
|
+
}
|
|
89
95
|
existingTestRunner() {
|
|
90
96
|
return this._testRunnerAndScreen?.testRunner;
|
|
91
97
|
}
|
|
@@ -103,16 +109,16 @@ class TestContext {
|
|
|
103
109
|
}
|
|
104
110
|
async createTestRunner() {
|
|
105
111
|
await this._cleanupTestRunner();
|
|
106
|
-
const
|
|
107
|
-
await
|
|
108
|
-
const testPaused = new
|
|
112
|
+
const runner = new import_runner.testRunner.TestRunner(this._configLocation, {});
|
|
113
|
+
await runner.initialize({});
|
|
114
|
+
const testPaused = new ManualPromise();
|
|
109
115
|
const testRunnerAndScreen = {
|
|
110
116
|
...createScreen(),
|
|
111
|
-
testRunner,
|
|
117
|
+
testRunner: runner,
|
|
112
118
|
waitForTestPaused: () => testPaused
|
|
113
119
|
};
|
|
114
120
|
this._testRunnerAndScreen = testRunnerAndScreen;
|
|
115
|
-
|
|
121
|
+
runner.on(import_runner.testRunner.TestRunnerEvent.TestPaused, (params) => {
|
|
116
122
|
testRunnerAndScreen.sendMessageToPausedTest = params.sendMessage;
|
|
117
123
|
testPaused.resolve();
|
|
118
124
|
});
|
|
@@ -120,8 +126,8 @@ class TestContext {
|
|
|
120
126
|
}
|
|
121
127
|
async getOrCreateSeedFile(seedFile, projectName) {
|
|
122
128
|
const configDir = this._configLocation.configDir;
|
|
123
|
-
const { testRunner } = await this.createTestRunner();
|
|
124
|
-
const config = await
|
|
129
|
+
const { testRunner: runner } = await this.createTestRunner();
|
|
130
|
+
const config = await runner.loadConfig();
|
|
125
131
|
const project = (0, import_seed.seedProject)(config, projectName);
|
|
126
132
|
if (!seedFile) {
|
|
127
133
|
seedFile = await (0, import_seed.ensureSeedFile)(project);
|
|
@@ -149,31 +155,34 @@ class TestContext {
|
|
|
149
155
|
projectName: project.project.name
|
|
150
156
|
};
|
|
151
157
|
}
|
|
152
|
-
async runSeedTest(seedFile, projectName) {
|
|
158
|
+
async runSeedTest(seedFile, projectName, signal) {
|
|
153
159
|
const result = await this.runTestsWithGlobalSetupAndPossiblePause({
|
|
154
160
|
headed: this.computedHeaded,
|
|
155
|
-
locations: ["/" +
|
|
161
|
+
locations: ["/" + escapeRegExp(seedFile) + "/"],
|
|
156
162
|
projects: [projectName],
|
|
157
163
|
timeout: 0,
|
|
158
164
|
workers: 1,
|
|
159
165
|
pauseAtEnd: true,
|
|
160
166
|
disableConfigReporters: true,
|
|
161
167
|
failOnLoadErrors: true
|
|
162
|
-
});
|
|
168
|
+
}, signal);
|
|
163
169
|
if (result.status === "passed")
|
|
164
170
|
result.output += "\nError: seed test not found.";
|
|
165
171
|
else if (result.status !== "paused")
|
|
166
172
|
result.output += "\nError while running the seed test.";
|
|
167
173
|
return result;
|
|
168
174
|
}
|
|
169
|
-
async runTestsWithGlobalSetupAndPossiblePause(params) {
|
|
175
|
+
async runTestsWithGlobalSetupAndPossiblePause(params, signal) {
|
|
176
|
+
return this._enqueue(() => this._runTestsImpl(params, signal));
|
|
177
|
+
}
|
|
178
|
+
async _runTestsImpl(params, signal) {
|
|
170
179
|
const configDir = this._configLocation.configDir;
|
|
171
180
|
const testRunnerAndScreen = await this.createTestRunner();
|
|
172
|
-
const { testRunner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
|
|
181
|
+
const { testRunner: runner, screen, claimStdio, releaseStdio } = testRunnerAndScreen;
|
|
173
182
|
claimStdio();
|
|
174
183
|
try {
|
|
175
184
|
const setupReporter = new MCPListReporter({ configDir, screen, includeTestId: true });
|
|
176
|
-
const { status: status2 } = await
|
|
185
|
+
const { status: status2 } = await runner.runGlobalSetup([setupReporter]);
|
|
177
186
|
if (status2 !== "passed")
|
|
178
187
|
return { output: testRunnerAndScreen.output.join("\n"), status: status2 };
|
|
179
188
|
} finally {
|
|
@@ -183,19 +192,27 @@ class TestContext {
|
|
|
183
192
|
const cleanup = async () => {
|
|
184
193
|
claimStdio();
|
|
185
194
|
try {
|
|
186
|
-
const result = await
|
|
195
|
+
const result = await runner.runGlobalTeardown();
|
|
187
196
|
if (status === "passed")
|
|
188
197
|
status = result.status;
|
|
189
198
|
} finally {
|
|
190
199
|
releaseStdio();
|
|
191
200
|
}
|
|
192
201
|
};
|
|
202
|
+
const abortPromise = signal ? signalToPromise(signal).promise.then(() => "interrupted") : new Promise(() => {
|
|
203
|
+
});
|
|
193
204
|
try {
|
|
194
205
|
const reporter = new MCPListReporter({ configDir, screen, includeTestId: true });
|
|
195
206
|
status = await Promise.race([
|
|
196
|
-
|
|
197
|
-
testRunnerAndScreen.waitForTestPaused().then(() => "paused")
|
|
207
|
+
runner.runTests(reporter, params).then((result) => result.status),
|
|
208
|
+
testRunnerAndScreen.waitForTestPaused().then(() => "paused"),
|
|
209
|
+
abortPromise
|
|
198
210
|
]);
|
|
211
|
+
if (status === "interrupted") {
|
|
212
|
+
await runner.stopTests();
|
|
213
|
+
await cleanup();
|
|
214
|
+
return { output: testRunnerAndScreen.output.join("\n"), status };
|
|
215
|
+
}
|
|
199
216
|
if (status === "paused") {
|
|
200
217
|
const response = await testRunnerAndScreen.sendMessageToPausedTest({ request: { initialize: { clientInfo: this._clientInfo } } });
|
|
201
218
|
if (response.error)
|
|
@@ -213,7 +230,7 @@ class TestContext {
|
|
|
213
230
|
return { output: testRunnerAndScreen.output.join("\n"), status };
|
|
214
231
|
}
|
|
215
232
|
async close() {
|
|
216
|
-
await this._cleanupTestRunner().catch(
|
|
233
|
+
await this._enqueue(() => this._cleanupTestRunner()).catch((e) => debug("pw:mcp:error")(e));
|
|
217
234
|
}
|
|
218
235
|
async sendMessageToPausedTest(request) {
|
|
219
236
|
const sendMessage = this._testRunnerAndScreen?.sendMessageToPausedTest;
|
|
@@ -223,7 +240,7 @@ class TestContext {
|
|
|
223
240
|
if (result.error)
|
|
224
241
|
throw new Error(result.error.message);
|
|
225
242
|
if (typeof request?.callTool?.arguments?.["intent"] === "string") {
|
|
226
|
-
const response =
|
|
243
|
+
const response = import_coreBundle.tools.parseResponse(result.response.callTool);
|
|
227
244
|
if (response && !response.isError && response.code)
|
|
228
245
|
this.generatorJournal?.logStep(request.callTool.arguments["intent"], response.code);
|
|
229
246
|
}
|
|
@@ -235,9 +252,9 @@ function createScreen() {
|
|
|
235
252
|
const stdout = new import_streams.StringWriteStream(output, "stdout");
|
|
236
253
|
const stderr = new import_streams.StringWriteStream(output, "stderr");
|
|
237
254
|
const screen = {
|
|
238
|
-
...
|
|
255
|
+
...import_runner.base.terminalScreen,
|
|
239
256
|
isTTY: false,
|
|
240
|
-
colors:
|
|
257
|
+
colors: noColors,
|
|
241
258
|
stdout,
|
|
242
259
|
stderr
|
|
243
260
|
};
|
|
@@ -271,7 +288,7 @@ const bestPracticesMarkdown = `
|
|
|
271
288
|
- NEVER! use page.waitForTimeout()
|
|
272
289
|
- NEVER! use page.evaluate()
|
|
273
290
|
`;
|
|
274
|
-
class MCPListReporter extends
|
|
291
|
+
class MCPListReporter extends import_runner.ListReporter {
|
|
275
292
|
async onTestPaused() {
|
|
276
293
|
await new Promise(() => {
|
|
277
294
|
});
|
|
@@ -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
|
});
|