codeceptjs 4.0.0-rc.19 → 4.0.0-rc.20

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 (2) hide show
  1. package/bin/mcp-server.js +33 -20
  2. package/package.json +1 -1
package/bin/mcp-server.js CHANGED
@@ -412,6 +412,23 @@ async function cancelRun() {
412
412
  return true
413
413
  }
414
414
 
415
+ async function waitForTestResult(runPromise, timeout) {
416
+ const pausedPromise = new Promise(resolve => pauseEvents.once('paused', () => resolve('paused')))
417
+ const completedPromise = runPromise.then(() => 'completed', () => 'completed')
418
+ let timeoutId
419
+ const timeoutPromise = new Promise((_, reject) => {
420
+ timeoutId = setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)
421
+ })
422
+ try {
423
+ return { status: await Promise.race([completedPromise, pausedPromise, timeoutPromise]) }
424
+ } catch (err) {
425
+ await cancelRun()
426
+ return { status: 'aborted', error: err.message }
427
+ } finally {
428
+ clearTimeout(timeoutId)
429
+ }
430
+ }
431
+
415
432
  async function closeBrowser() {
416
433
  if (!containerInitialized) return
417
434
  await cancelRun()
@@ -1025,18 +1042,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1025
1042
  throw err
1026
1043
  }
1027
1044
  })()
1045
+ pendingRunPromise = runPromise
1028
1046
 
1029
- const pausedPromise = new Promise(resolve => pauseEvents.once('paused', () => resolve('paused')))
1030
- const completedPromise = runPromise.then(() => 'completed', () => 'completed')
1031
-
1032
- const which = await Promise.race([
1033
- completedPromise,
1034
- pausedPromise,
1035
- new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)),
1036
- ])
1047
+ const result = await waitForTestResult(runPromise, timeout)
1048
+ if (result.status === 'aborted') {
1049
+ await startShellSession()
1050
+ return { content: [{ type: 'text', text: JSON.stringify({ status: 'failed', file: testFile, error: result.error }, null, 2) }] }
1051
+ }
1037
1052
 
1038
- if (which === 'paused') {
1039
- pendingRunPromise = runPromise
1053
+ if (result.status === 'paused') {
1040
1054
  const page = await gatherPageBrief()
1041
1055
  return {
1042
1056
  content: [{
@@ -1046,6 +1060,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1046
1060
  }
1047
1061
  }
1048
1062
 
1063
+ pendingRunPromise = null
1049
1064
  const final = collectRunCompletion(runError?.message)
1050
1065
  await startShellSession()
1051
1066
  return { content: [{ type: 'text', text: JSON.stringify({ ...final, file: testFile }, null, 2) }] }
@@ -1121,18 +1136,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1121
1136
  throw err
1122
1137
  }
1123
1138
  })()
1139
+ pendingRunPromise = runPromise
1124
1140
 
1125
- const pausedPromise = new Promise(resolve => pauseEvents.once('paused', () => resolve('paused')))
1126
- const completedPromise = runPromise.then(() => 'completed', () => 'completed')
1127
-
1128
- const which = await Promise.race([
1129
- completedPromise,
1130
- pausedPromise,
1131
- new Promise((_, reject) => setTimeout(() => reject(new Error(`Timeout after ${timeout}ms`)), timeout)),
1132
- ])
1141
+ const result = await waitForTestResult(runPromise, timeout)
1142
+ if (result.status === 'aborted') {
1143
+ await startShellSession()
1144
+ return { content: [{ type: 'text', text: JSON.stringify({ status: 'failed', file: testFile, error: result.error }, null, 2) }] }
1145
+ }
1133
1146
 
1134
- if (which === 'paused') {
1135
- pendingRunPromise = runPromise
1147
+ if (result.status === 'paused') {
1136
1148
  const page = await gatherPageBrief()
1137
1149
  return {
1138
1150
  content: [{
@@ -1142,6 +1154,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1142
1154
  }
1143
1155
  }
1144
1156
 
1157
+ pendingRunPromise = null
1145
1158
  const final = collectRunCompletion(runError?.message)
1146
1159
  await startShellSession()
1147
1160
  return { content: [{ type: 'text', text: JSON.stringify({ ...final, file: testFile }, null, 2) }] }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeceptjs",
3
- "version": "4.0.0-rc.19",
3
+ "version": "4.0.0-rc.20",
4
4
  "type": "module",
5
5
  "description": "Supercharged End 2 End Testing Framework for NodeJS",
6
6
  "keywords": [