@lvce-editor/test-with-playwright 12.0.0 → 13.0.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 +0 -4
  2. package/dist/main.js +145 -141
  3. package/package.json +3 -3
package/README.md CHANGED
@@ -16,7 +16,3 @@ test('sample.hello-world', async () => {
16
16
  await expect(sideBar).toBeVisible()
17
17
  })
18
18
  ```
19
-
20
- ## Gitpod
21
-
22
- [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/lvce-editor/test-with-playwright)
package/dist/main.js CHANGED
@@ -43,11 +43,11 @@ const getFinalResultMessage = (passed, skipped, failed, duration) => {
43
43
 
44
44
  const handleFinalResult = finalResult => {
45
45
  const {
46
- passed,
46
+ end,
47
47
  failed,
48
+ passed,
48
49
  skipped,
49
- start,
50
- end
50
+ start
51
51
  } = finalResult;
52
52
  const duration = end - start;
53
53
  const message = getFinalResultMessage(passed, skipped, failed, duration);
@@ -70,9 +70,9 @@ const getDuration = (start, end) => {
70
70
  };
71
71
  const handleResultPassed = result => {
72
72
  const {
73
+ end,
73
74
  name,
74
- start,
75
- end
75
+ start
76
76
  } = result;
77
77
  const duration = getDuration(start, end);
78
78
  const formattedDuration = formatDuration(duration);
@@ -86,8 +86,8 @@ const handleResultSkipped = result => {
86
86
  };
87
87
  const handleResultFailed = result => {
88
88
  const {
89
- name,
90
- error
89
+ error,
90
+ name
91
91
  } = result;
92
92
  console.error(`${Fail$1} ${name}: ${error}`);
93
93
  };
@@ -97,6 +97,10 @@ const handleResult = result => {
97
97
  } = result;
98
98
  switch (status) {
99
99
  // @ts-ignore
100
+ case Fail:
101
+ handleResultFailed(result);
102
+ break;
103
+ // @ts-ignore
100
104
  case Pass:
101
105
  handleResultPassed(result);
102
106
  break;
@@ -104,18 +108,14 @@ const handleResult = result => {
104
108
  case Skip:
105
109
  handleResultSkipped(result);
106
110
  break;
107
- // @ts-ignore
108
- case Fail:
109
- handleResultFailed(result);
110
- break;
111
111
  default:
112
112
  throw new Error(`unexpected test state: ${status}`);
113
113
  }
114
114
  };
115
115
 
116
116
  const commandMap = {
117
- [HandleResult]: handleResult,
118
- [HandleFinalResult]: handleFinalResult
117
+ [HandleFinalResult]: handleFinalResult,
118
+ [HandleResult]: handleResult
119
119
  };
120
120
 
121
121
  function getDefaultExportFromCjs (x) {
@@ -370,6 +370,9 @@ const parseCliArgs = argv => {
370
370
  if (parsed['server-path']) {
371
371
  result.serverPath = parsed['server-path'];
372
372
  }
373
+ if (parsed['trace-focus']) {
374
+ result.traceFocus = true;
375
+ }
373
376
  return result;
374
377
  };
375
378
 
@@ -385,9 +388,9 @@ const parseEnv = env => {
385
388
  };
386
389
 
387
390
  const defaultOptions = {
388
- testPath: '',
389
391
  extensionPath: '',
390
- headless: false
392
+ headless: false,
393
+ testPath: ''
391
394
  };
392
395
  const getOptions = ({
393
396
  argv,
@@ -636,8 +639,8 @@ const getModuleNotFoundError = stderr => {
636
639
  const messageIndex = lines.findIndex(isModuleNotFoundMessage);
637
640
  const message = lines[messageIndex];
638
641
  return {
639
- message,
640
- code: ERR_MODULE_NOT_FOUND
642
+ code: ERR_MODULE_NOT_FOUND,
643
+ message
641
644
  };
642
645
  };
643
646
  const isModuleNotFoundError = stderr => {
@@ -660,14 +663,14 @@ const isUnhelpfulNativeModuleError = stderr => {
660
663
  const getNativeModuleErrorMessage = stderr => {
661
664
  const message = getMessageCodeBlock(stderr);
662
665
  return {
663
- message: `Incompatible native node module: ${message}`,
664
- code: E_INCOMPATIBLE_NATIVE_MODULE
666
+ code: E_INCOMPATIBLE_NATIVE_MODULE,
667
+ message: `Incompatible native node module: ${message}`
665
668
  };
666
669
  };
667
670
  const getModuleSyntaxError = () => {
668
671
  return {
669
- message: `ES Modules are not supported in electron`,
670
- code: E_MODULES_NOT_SUPPORTED_IN_ELECTRON
672
+ code: E_MODULES_NOT_SUPPORTED_IN_ELECTRON,
673
+ message: `ES Modules are not supported in electron`
671
674
  };
672
675
  };
673
676
  const getHelpfulChildProcessError = (stdout, stderr) => {
@@ -686,8 +689,8 @@ const getHelpfulChildProcessError = (stdout, stderr) => {
686
689
  rest
687
690
  } = getDetails(lines);
688
691
  return {
689
- message: actualMessage,
690
692
  code: '',
693
+ message: actualMessage,
691
694
  stack: rest
692
695
  };
693
696
  };
@@ -697,8 +700,8 @@ class IpcError extends VError {
697
700
  if (stdout || stderr) {
698
701
  // @ts-ignore
699
702
  const {
700
- message,
701
703
  code,
704
+ message,
702
705
  stack
703
706
  } = getHelpfulChildProcessError(stdout, stderr);
704
707
  const cause = new Error(message);
@@ -734,8 +737,8 @@ const removeListener = (emitter, type, callback) => {
734
737
  };
735
738
  const getFirstEvent = (eventEmitter, eventMap) => {
736
739
  const {
737
- resolve,
738
- promise
740
+ promise,
741
+ resolve
739
742
  } = Promise.withResolvers();
740
743
  const listenerMap = Object.create(null);
741
744
  const cleanup = value => {
@@ -747,8 +750,8 @@ const getFirstEvent = (eventEmitter, eventMap) => {
747
750
  for (const [event, type] of Object.entries(eventMap)) {
748
751
  const listener = event => {
749
752
  cleanup({
750
- type,
751
- event
753
+ event,
754
+ type
752
755
  });
753
756
  };
754
757
  addListener(eventEmitter, event, listener);
@@ -771,18 +774,18 @@ const fixNodeWorkerParameters = value => {
771
774
  };
772
775
  const getFirstNodeWorkerEvent = worker => {
773
776
  return getFirstEvent(worker, {
774
- message: Message$1,
777
+ error: Error$2,
775
778
  exit: Exit,
776
- error: Error$2
779
+ message: Message$1
777
780
  });
778
781
  };
779
782
  const create$1$1 = async ({
780
- path,
781
783
  argv = [],
782
784
  env = process.env,
783
785
  execArgv = [],
784
- stdio,
785
- name
786
+ name,
787
+ path,
788
+ stdio
786
789
  }) => {
787
790
  string(path);
788
791
  const actualArgv = ['--ipc-type=node-worker', ...argv];
@@ -798,13 +801,13 @@ const create$1$1 = async ({
798
801
  argv: actualArgv,
799
802
  env: actualEnv,
800
803
  execArgv,
801
- stdout: ignoreStdio,
804
+ name,
802
805
  stderr: ignoreStdio,
803
- name
806
+ stdout: ignoreStdio
804
807
  });
805
808
  const {
806
- type,
807
- event
809
+ event,
810
+ type
808
811
  } = await getFirstNodeWorkerEvent(worker);
809
812
  if (type === Exit) {
810
813
  throw new IpcError(`Worker exited before ipc connection was established`);
@@ -850,56 +853,14 @@ const IpcParentWithNodeWorker$1 = {
850
853
  wrap: wrap$1
851
854
  };
852
855
 
853
- const Two = '2.0';
854
- const create$4 = (method, params) => {
855
- return {
856
- jsonrpc: Two,
857
- method,
858
- params
859
- };
860
- };
856
+ const Two$1 = '2.0';
861
857
  const callbacks = Object.create(null);
862
- const set = (id, fn) => {
863
- callbacks[id] = fn;
864
- };
865
858
  const get = id => {
866
859
  return callbacks[id];
867
860
  };
868
861
  const remove = id => {
869
862
  delete callbacks[id];
870
863
  };
871
- let id = 0;
872
- const create$3 = () => {
873
- return ++id;
874
- };
875
- const registerPromise = () => {
876
- const id = create$3();
877
- const {
878
- resolve,
879
- promise
880
- } = Promise.withResolvers();
881
- set(id, resolve);
882
- return {
883
- id,
884
- promise
885
- };
886
- };
887
- const create$2 = (method, params) => {
888
- const {
889
- id,
890
- promise
891
- } = registerPromise();
892
- const message = {
893
- jsonrpc: Two,
894
- method,
895
- params,
896
- id
897
- };
898
- return {
899
- message,
900
- promise
901
- };
902
- };
903
864
  class JsonRpcError extends Error {
904
865
  constructor(message) {
905
866
  super(message);
@@ -1095,7 +1056,7 @@ const getErrorProperty = (error, prettyError) => {
1095
1056
  };
1096
1057
  const create$1 = (id, error) => {
1097
1058
  return {
1098
- jsonrpc: Two,
1059
+ jsonrpc: Two$1,
1099
1060
  id,
1100
1061
  error
1101
1062
  };
@@ -1108,7 +1069,7 @@ const getErrorResponse = (id, error, preparePrettyError, logError) => {
1108
1069
  };
1109
1070
  const create = (message, result) => {
1110
1071
  return {
1111
- jsonrpc: Two,
1072
+ jsonrpc: Two$1,
1112
1073
  id: message.id,
1113
1074
  result: result ?? null
1114
1075
  };
@@ -1119,7 +1080,7 @@ const getSuccessResponse = (message, result) => {
1119
1080
  };
1120
1081
  const getErrorResponseSimple = (id, error) => {
1121
1082
  return {
1122
- jsonrpc: Two,
1083
+ jsonrpc: Two$1,
1123
1084
  id,
1124
1085
  error: {
1125
1086
  code: Custom,
@@ -1206,29 +1167,6 @@ const handleJsonRpcMessage = async (...args) => {
1206
1167
  }
1207
1168
  throw new JsonRpcError('unexpected message');
1208
1169
  };
1209
- const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
1210
- const {
1211
- message,
1212
- promise
1213
- } = create$2(method, params);
1214
- if (useSendAndTransfer && ipc.sendAndTransfer) {
1215
- ipc.sendAndTransfer(message);
1216
- } else {
1217
- ipc.send(message);
1218
- }
1219
- const responseMessage = await promise;
1220
- return unwrapJsonRpcResult(responseMessage);
1221
- };
1222
- const send = (transport, method, ...params) => {
1223
- const message = create$4(method, params);
1224
- transport.send(message);
1225
- };
1226
- const invoke = (ipc, method, ...params) => {
1227
- return invokeHelper(ipc, method, params, false);
1228
- };
1229
- const invokeAndTransfer = (ipc, method, ...params) => {
1230
- return invokeHelper(ipc, method, params, true);
1231
- };
1232
1170
 
1233
1171
  class CommandNotFoundError extends Error {
1234
1172
  constructor(command) {
@@ -1251,24 +1189,87 @@ const execute = (command, ...args) => {
1251
1189
  return fn(...args);
1252
1190
  };
1253
1191
 
1192
+ const Two = '2.0';
1193
+ const create$s = (method, params) => {
1194
+ return {
1195
+ jsonrpc: Two,
1196
+ method,
1197
+ params
1198
+ };
1199
+ };
1200
+ const create$r = (id, method, params) => {
1201
+ const message = {
1202
+ id,
1203
+ jsonrpc: Two,
1204
+ method,
1205
+ params
1206
+ };
1207
+ return message;
1208
+ };
1209
+ let id = 0;
1210
+ const create$q = () => {
1211
+ return ++id;
1212
+ };
1213
+
1214
+ /* eslint-disable n/no-unsupported-features/es-syntax */
1215
+
1216
+ const registerPromise = map => {
1217
+ const id = create$q();
1218
+ const {
1219
+ promise,
1220
+ resolve
1221
+ } = Promise.withResolvers();
1222
+ map[id] = resolve;
1223
+ return {
1224
+ id,
1225
+ promise
1226
+ };
1227
+ };
1228
+
1229
+ // @ts-ignore
1230
+ const invokeHelper = async (callbacks, ipc, method, params, useSendAndTransfer) => {
1231
+ const {
1232
+ id,
1233
+ promise
1234
+ } = registerPromise(callbacks);
1235
+ const message = create$r(id, method, params);
1236
+ if (useSendAndTransfer && ipc.sendAndTransfer) {
1237
+ ipc.sendAndTransfer(message);
1238
+ } else {
1239
+ ipc.send(message);
1240
+ }
1241
+ const responseMessage = await promise;
1242
+ return unwrapJsonRpcResult(responseMessage);
1243
+ };
1254
1244
  const createRpc = ipc => {
1245
+ const callbacks = Object.create(null);
1246
+ ipc._resolve = (id, response) => {
1247
+ const fn = callbacks[id];
1248
+ if (!fn) {
1249
+ console.warn(`callback ${id} may already be disposed`);
1250
+ return;
1251
+ }
1252
+ fn(response);
1253
+ delete callbacks[id];
1254
+ };
1255
1255
  const rpc = {
1256
+ async dispose() {
1257
+ await ipc?.dispose();
1258
+ },
1259
+ invoke(method, ...params) {
1260
+ return invokeHelper(callbacks, ipc, method, params, false);
1261
+ },
1262
+ invokeAndTransfer(method, ...params) {
1263
+ return invokeHelper(callbacks, ipc, method, params, true);
1264
+ },
1256
1265
  // @ts-ignore
1257
1266
  ipc,
1258
1267
  /**
1259
1268
  * @deprecated
1260
1269
  */
1261
1270
  send(method, ...params) {
1262
- send(ipc, method, ...params);
1263
- },
1264
- invoke(method, ...params) {
1265
- return invoke(ipc, method, ...params);
1266
- },
1267
- invokeAndTransfer(method, ...params) {
1268
- return invokeAndTransfer(ipc, method, ...params);
1269
- },
1270
- async dispose() {
1271
- await ipc?.dispose();
1271
+ const message = create$s(method, params);
1272
+ ipc.send(message);
1272
1273
  }
1273
1274
  };
1274
1275
  return rpc;
@@ -1285,7 +1286,7 @@ const logError = () => {
1285
1286
  const handleMessage = event => {
1286
1287
  const actualRequiresSocket = event?.target?.requiresSocket || requiresSocket;
1287
1288
  const actualExecute = event?.target?.execute || execute;
1288
- return handleJsonRpcMessage(event.target, event.data, actualExecute, resolve, preparePrettyError, logError, actualRequiresSocket);
1289
+ return handleJsonRpcMessage(event.target, event.data, actualExecute, event.target._resolve, preparePrettyError, logError, actualRequiresSocket);
1289
1290
  };
1290
1291
  const handleIpc = ipc => {
1291
1292
  if ('addEventListener' in ipc) {
@@ -1295,22 +1296,22 @@ const handleIpc = ipc => {
1295
1296
  ipc.on('message', handleMessage);
1296
1297
  }
1297
1298
  };
1298
- const create$6 = async ({
1299
- commandMap,
1299
+ const create$5 = async ({
1300
1300
  argv,
1301
+ commandMap,
1302
+ env,
1301
1303
  execArgv,
1302
1304
  path,
1303
- stdio,
1304
- env
1305
+ stdio
1305
1306
  }) => {
1306
1307
  // TODO create a commandMap per rpc instance
1307
1308
  register(commandMap);
1308
1309
  const rawIpc = await IpcParentWithNodeWorker$1.create({
1309
1310
  argv,
1311
+ env,
1310
1312
  execArgv,
1311
1313
  path,
1312
- stdio,
1313
- env
1314
+ stdio
1314
1315
  });
1315
1316
  const ipc = IpcParentWithNodeWorker$1.wrap(rawIpc);
1316
1317
  handleIpc(ipc);
@@ -1324,61 +1325,64 @@ const create$6 = async ({
1324
1325
  };
1325
1326
  const NodeWorkerRpcParent = {
1326
1327
  __proto__: null,
1327
- create: create$6
1328
+ create: create$5
1328
1329
  };
1329
1330
 
1330
1331
  const RunAllTests = 'RunAllTests';
1331
1332
 
1332
1333
  const runAllTests = async ({
1333
- onlyExtension,
1334
- testPath,
1334
+ commandMap,
1335
1335
  cwd,
1336
1336
  headless,
1337
- timeout,
1338
- commandMap,
1337
+ onlyExtension,
1338
+ serverPath,
1339
+ testPath,
1339
1340
  testWorkerUri,
1340
- serverPath
1341
+ timeout,
1342
+ traceFocus
1341
1343
  }) => {
1342
1344
  // TODO use `using` once supported
1343
1345
  const path = fileURLToPath(testWorkerUri);
1344
1346
  const rpc = await NodeWorkerRpcParent.create({
1345
- path,
1346
1347
  argv: [],
1347
1348
  commandMap,
1349
+ path,
1348
1350
  stdio: 'inherit'
1349
1351
  });
1350
- await rpc.invoke(RunAllTests, onlyExtension, testPath, cwd, headless, timeout, serverPath);
1352
+ await rpc.invoke(RunAllTests, onlyExtension, testPath, cwd, headless, timeout, serverPath, traceFocus);
1351
1353
  await rpc.dispose();
1352
1354
  };
1353
1355
 
1354
1356
  const handleCliArgs = async ({
1355
1357
  argv,
1356
- env,
1357
1358
  commandMap,
1358
- cwd
1359
+ cwd,
1360
+ env
1359
1361
  }) => {
1360
1362
  const options = getOptions({
1361
1363
  argv,
1362
1364
  env
1363
1365
  });
1364
1366
  const {
1367
+ headless,
1365
1368
  onlyExtension,
1369
+ serverPath,
1366
1370
  testPath,
1367
- headless,
1368
- serverPath
1371
+ traceFocus
1369
1372
  } = options;
1370
1373
  const timeout = 30_000;
1371
1374
  const testWorkerUri = getTestWorkerUrl();
1372
1375
  await runAllTests({
1376
+ commandMap,
1377
+ cwd,
1378
+ headless,
1373
1379
  // @ts-ignore
1374
1380
  onlyExtension,
1381
+ serverPath,
1375
1382
  testPath,
1376
- cwd,
1377
- headless,
1378
- timeout,
1379
- commandMap,
1380
1383
  testWorkerUri,
1381
- serverPath
1384
+ timeout,
1385
+ traceFocus
1382
1386
  });
1383
1387
  };
1384
1388
 
@@ -1400,9 +1404,9 @@ const main = async () => {
1400
1404
  on('uncaughtExceptionMonitor', handleUncaughtExceptionMonitor);
1401
1405
  await handleCliArgs({
1402
1406
  argv: argv,
1403
- env: env,
1404
1407
  commandMap: commandMap,
1405
- cwd: process.cwd()
1408
+ cwd: process.cwd(),
1409
+ env: env
1406
1410
  });
1407
1411
  };
1408
1412
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/test-with-playwright",
3
- "version": "12.0.0",
3
+ "version": "13.0.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": "12.0.0",
16
- "@lvce-editor/test-worker": "^10.7.0"
15
+ "@lvce-editor/test-with-playwright-worker": "13.0.0",
16
+ "@lvce-editor/test-worker": "^11.7.0"
17
17
  },
18
18
  "engines": {
19
19
  "node": ">=22"