@hazae41/phobos
Version:
Modern and minimalist testing library for the web
1 lines • 4.73 kB
Source Map (JSON)
{"version":3,"file":"context.cjs","sources":["../../../../../src/mods/runner/context/context.ts"],"sourcesContent":["import { TestError } from \"mods/runner/error.js\";\n\nexport class Context {\n private _befores = new Array<(context: Context) => Promise<void>>()\n private _afters = new Array<(context: Context) => Promise<void>>()\n\n private _catcher?: (error: TestError, context: Context) => Promise<void>\n\n constructor(\n readonly message: string\n ) {\n this.test = this.test.bind(this)\n this.before = this.before.bind(this)\n this.after = this.after.bind(this)\n this.catcher = this.catcher.bind(this)\n this.wait = this.wait.bind(this)\n }\n\n /**\n * Run something before each test block\n * @param closure closure\n */\n before(closure: (context: Context) => Promise<void>) {\n this._befores.push(closure)\n }\n\n /**\n * Run something after each test block\n * @param closure closure\n */\n after(closure: (context: Context) => Promise<void>) {\n this._afters.push(closure)\n }\n\n /**\n * Run something when an error is thrown\n * @param closure \n */\n catcher(closure: (error: TestError, context: Context) => Promise<void>) {\n this._catcher = closure\n }\n\n private _tests = new Array<Promise<void>>()\n\n /**\n * Run a test block\n * @param message message to show\n * @param closure closure to run\n * @returns result of closure\n */\n async test(message: string, closure: (context: Context) => Promise<void>) {\n const promise = this._test(message, closure)\n this._tests.push(promise)\n return promise.catch(() => { })\n }\n\n private async _test(message: string, closure: (context: Context) => Promise<void>) {\n const context = new Context(message)\n\n for (const before of this._befores)\n await before(context)\n\n try {\n await closure(context)\n await context.wait()\n } catch (cause: unknown) {\n const error = new TestError(message, { cause })\n if (!this._catcher) throw error\n\n try {\n await this._catcher?.(error, context)\n } catch (cause: unknown) {\n throw new TestError(message, { cause })\n }\n } finally {\n for (const after of this._afters)\n await after(context)\n }\n }\n\n /**\n * Wait for all tests to finish (called by default at the end of each test block)\n * @why You want to forcefully wait in the midst of a test block\n */\n async wait() {\n try {\n await Promise.all(this._tests)\n } finally {\n this._tests = new Array()\n }\n }\n}"],"names":["error","TestError"],"mappings":"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"}