| 244 | const taskQueue = [...tasks] |
| 245 | |
| 246 | async function runTask(task: TestTask): Promise<void> { |
| 247 | const taskName = task.adapterDef |
| 248 | ? `${task.adapterDef.name}/${task.test.id}` |
| 249 | : `Mock/${task.test.id}` |
| 250 | running.add(taskName) |
| 251 | updateProgress(completed, total, Array.from(running), failed) |
| 252 | |
| 253 | try { |
| 254 | const adapter = task.adapterSet?.adapter || null |
| 255 | const outcome = await task.test.run(adapter, task.verbose) |
| 256 | |
| 257 | const resultKey = task.adapterDef ? task.adapterDef.id : 'mock' |
| 258 | const adapterResult = resultsMap.get(resultKey)! |
| 259 | adapterResult.tests[task.test.id] = outcome |
| 260 | |
| 261 | if (!outcome.passed && !outcome.ignored) { |
| 262 | failed++ |
| 263 | failedTests.push({ |
| 264 | name: taskName, |
| 265 | error: outcome.error || 'Unknown error', |
| 266 | }) |
| 267 | } |
| 268 | } catch (error: any) { |
| 269 | const resultKey = task.adapterDef ? task.adapterDef.id : 'mock' |
| 270 | const adapterResult = resultsMap.get(resultKey)! |
| 271 | const errorMsg = error?.message || String(error) |
| 272 | adapterResult.tests[task.test.id] = { passed: false, error: errorMsg } |
| 273 | failed++ |
| 274 | failedTests.push({ name: taskName, error: errorMsg }) |
| 275 | } |
| 276 | |
| 277 | running.delete(taskName) |
| 278 | completed++ |
| 279 | updateProgress(completed, total, Array.from(running), failed) |
| 280 | } |
| 281 | |
| 282 | // Run with concurrency limit |
| 283 | const workers: Promise<void>[] = [] |