UNPKG

@plugjs/expect5

Version:

Unit Testing for the PlugJS Build System ========================================

88 lines (87 loc) 2.53 kB
// execution/executor.ts import assert from "node:assert"; import { EventEmitter } from "node:events"; import { Hook, Spec, Suite } from "./executable.mjs"; function runSuite(suite) { const _emitter = new EventEmitter(); let resolve; let reject; const promise = new Promise((_resolve, _reject) => { resolve = _resolve; reject = _reject; }); const result = { time: 0, passed: 0, failed: 0, skipped: 0, failures: [] }; const execution = { result: promise, on: (event, listener) => { _emitter.on(event, listener); return execution; }, off: (event, listener) => { _emitter.off(event, listener); return execution; }, once: (event, listener) => { _emitter.once(event, listener); return execution; } }; const start = (executable) => { const type = executable instanceof Suite ? "suite" : executable instanceof Spec ? "spec" : executable instanceof Hook ? "hook" : ( /* coverage ignore next */ assert.fail(`Unable to start ${Object.getPrototypeOf(executable)?.constructor?.name}`) ); const now = Date.now(); _emitter.emit(`${type}:start`, executable); let done = false; let failure; return { done(skipped = false) { const time = Date.now() - now; done = true; if (type === "suite") { _emitter.emit(`${type}:done`, executable, time); return; } if (failure) { _emitter.emit(`${type}:fail`, executable, time, failure); if (type === "spec") result.failed++; } else if (skipped) { _emitter.emit(`${type}:skip`, executable, time); if (type === "spec") result.skipped++; } else { _emitter.emit(`${type}:pass`, executable, time); if (type === "spec") result.passed++; } }, notify(error) { const number = result.failures.length + 1; const fail = { error, number, source: executable, type }; result.failures.push(fail); if (failure || done) { _emitter.emit(`${type}:error`, executable, fail); } else { failure = fail; } } }; }; setImmediate(() => Promise.resolve().then(async () => { const now = Date.now(); await suite.setup(); await suite.execute({ start }); result.time = Date.now() - now; resolve(result); }).catch((error) => reject(error))); return execution; } export { runSuite }; //# sourceMappingURL=executor.mjs.map