@lvce-editor/test-with-playwright 16.2.0 → 17.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.
Files changed (3) hide show
  1. package/README.md +1 -0
  2. package/dist/main.js +31 -24
  3. package/package.json +3 -3
package/README.md CHANGED
@@ -24,6 +24,7 @@ test('sample.hello-world', async () => {
24
24
  - `--server-path`: explicit server entry point
25
25
  - `--filter`: run only matching tests
26
26
  - `--headless`: run Playwright in headless mode
27
+ - `--browser`: browser engine to launch, either `chromium` or `firefox`
27
28
  - `--trace-focus`: add `traceFocus=true` to test URLs
28
29
 
29
30
  ## Environment Variables
package/dist/main.js CHANGED
@@ -9,36 +9,28 @@ const formatDuration = duration => {
9
9
  return `${roundedDuration}ms`;
10
10
  };
11
11
 
12
+ const getCountMessage = (count, singular, plural) => {
13
+ if (count === 1) {
14
+ return `1 ${singular}`;
15
+ }
16
+ return `${count} ${plural}`;
17
+ };
12
18
  const getFinalResultMessage = (passed, skipped, failed, duration) => {
13
19
  if (passed === 0 && skipped === 0 && failed === 0) {
14
20
  return `no tests found`;
15
21
  }
16
22
  const formattedDuration = formatDuration(duration);
17
- if (passed === 0 && skipped === 0 && failed === 1) {
18
- return `${failed} test failed in ${formattedDuration}`;
19
- }
20
- if (passed === 0 && skipped === 1 && failed === 0) {
21
- return `${skipped} test skipped in ${formattedDuration}`;
22
- }
23
- if (passed === 0 && skipped === 1 && failed === 1) {
24
- return `${skipped} test skipped, ${failed} test failed in ${formattedDuration}`;
25
- }
26
- if (passed === 1 && skipped === 0 && failed === 0) {
27
- return `${passed} test passed in ${formattedDuration}`;
28
- }
29
- if (passed === 1 && skipped === 0 && failed === 1) {
30
- return `${passed} test passed, ${failed} test failed in ${formattedDuration}`;
23
+ const parts = [];
24
+ if (passed > 0) {
25
+ parts.push(getCountMessage(passed, 'test passed', 'tests passed'));
31
26
  }
32
- if (passed === 1 && skipped === 1 && failed === 0) {
33
- return `${passed} test passed, ${skipped} test skipped in ${formattedDuration}`;
27
+ if (skipped > 0) {
28
+ parts.push(getCountMessage(skipped, 'test skipped', 'tests skipped'));
34
29
  }
35
- if (passed === 1 && skipped === 1 && failed === 1) {
36
- return `${passed} test passed, ${skipped} test skipped, ${failed} test failed in ${formattedDuration}`;
37
- }
38
- if (passed > 1 && skipped === 0 && failed === 0) {
39
- return `${passed} tests passed in ${formattedDuration}`;
30
+ if (failed > 0) {
31
+ parts.push(getCountMessage(failed, 'test failed', 'tests failed'));
40
32
  }
41
- return `${passed} tests passed, ${skipped} tests skipped, ${failed} tests failed in ${formattedDuration}`;
33
+ return `${parts.join(', ')} in ${formattedDuration}`;
42
34
  };
43
35
 
44
36
  const handleFinalResult = finalResult => {
@@ -358,6 +350,9 @@ const parseArgv = /*@__PURE__*/getDefaultExportFromCjs(minimistExports);
358
350
  const parseCliArgs = argv => {
359
351
  const parsed = parseArgv(argv);
360
352
  const result = Object.create(null);
353
+ if (parsed.browser) {
354
+ result.browser = parsed.browser;
355
+ }
361
356
  if (parsed.filter) {
362
357
  result.filter = parsed.filter;
363
358
  }
@@ -391,20 +386,29 @@ const parseEnv = env => {
391
386
  };
392
387
 
393
388
  const defaultOptions = {
389
+ browser: 'chromium',
394
390
  extensionPath: '',
395
391
  headless: false,
396
392
  testPath: ''
397
393
  };
394
+ const isBrowser = value => {
395
+ return value === 'chromium' || value === 'firefox';
396
+ };
398
397
  const getOptions = ({
399
398
  argv,
400
399
  env
401
400
  }) => {
402
401
  const parsedEnv = parseEnv(env);
403
402
  const parsedArgs = parseCliArgs(argv);
403
+ const browser = parsedArgs.browser ?? defaultOptions.browser;
404
+ if (!isBrowser(browser)) {
405
+ throw new Error(`[test-with-playwright] unsupported browser: ${browser}`);
406
+ }
404
407
  return {
405
408
  ...defaultOptions,
406
409
  ...parsedEnv,
407
- ...parsedArgs
410
+ ...parsedArgs,
411
+ browser
408
412
  };
409
413
  };
410
414
 
@@ -1333,6 +1337,7 @@ const create = async ({
1333
1337
  const RunAllTests = 'RunAllTests';
1334
1338
 
1335
1339
  const runAllTests = async ({
1340
+ browser,
1336
1341
  commandMap,
1337
1342
  cwd,
1338
1343
  filter,
@@ -1352,7 +1357,7 @@ const runAllTests = async ({
1352
1357
  path,
1353
1358
  stdio: 'inherit'
1354
1359
  });
1355
- await rpc.invoke(RunAllTests, onlyExtension, testPath, cwd, headless, timeout, serverPath, traceFocus, filter);
1360
+ await rpc.invoke(RunAllTests, onlyExtension, testPath, cwd, browser, headless, timeout, serverPath, traceFocus, filter);
1356
1361
  await rpc.dispose();
1357
1362
  };
1358
1363
 
@@ -1367,6 +1372,7 @@ const handleCliArgs = async ({
1367
1372
  env
1368
1373
  });
1369
1374
  const {
1375
+ browser,
1370
1376
  filter,
1371
1377
  headless,
1372
1378
  onlyExtension,
@@ -1377,6 +1383,7 @@ const handleCliArgs = async ({
1377
1383
  const timeout = 30_000;
1378
1384
  const testWorkerUri = getTestWorkerUrl();
1379
1385
  await runAllTests({
1386
+ browser,
1380
1387
  commandMap,
1381
1388
  cwd,
1382
1389
  filter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/test-with-playwright",
3
- "version": "16.2.0",
3
+ "version": "17.1.0",
4
4
  "description": "CLI tool for running Playwright tests",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,8 +12,8 @@
12
12
  "main": "dist/main.js",
13
13
  "bin": "bin/test-with-playwright.js",
14
14
  "dependencies": {
15
- "@lvce-editor/test-with-playwright-worker": "16.2.0",
16
- "@lvce-editor/test-worker": "^14.3.0"
15
+ "@lvce-editor/test-with-playwright-worker": "17.1.0",
16
+ "@lvce-editor/test-worker": "^14.19.0"
17
17
  },
18
18
  "engines": {
19
19
  "node": ">=24"