diff options
Diffstat (limited to 'tests/runner.js')
| -rw-r--r-- | tests/runner.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/runner.js b/tests/runner.js new file mode 100644 index 0000000..2e4e2ce --- /dev/null +++ b/tests/runner.js @@ -0,0 +1,56 @@ +import { getExit, ARGV } from "../src/compat.js"; +import { eq } from "../src/utils.js"; + +class AssertionError extends Error {} + +const red = s => `\x1b[31m${s}\x1b[0m`; +const green = s => `\x1b[32m${s}\x1b[0m`; +const yellow = s => `\x1b[33m${s}\x1b[0m`; + +const t = { + tap: x => { + console.error("tap:", x); + return x; + }, + start: msg => { + console.error(`${msg}:`); + }, + test: (msg, fn) => { + try { + fn(); + console.error(`${yellow("testing")}: ${msg}... ${green("OK")}`); + } catch (e) { + console.error(`${yellow("testing")}: ${msg}... ${red("FAIL")}`); + throw e; + } + }, + assertEq: (expected, given, msg = "") => { + if (!eq(expected, given)) { + console.error("expected:", expected, "\ngiven: ", given); + throw new AssertionError(`${red(msg)}`); + } + }, + assert: (x, msg = "") => { + if (!x) { + throw new AssertionError(`${red(msg)}`); + } + }, +}; + +const main = async () => { + const { tests } = await import(`../${ARGV[1]}`); + for (const testFn of tests) { + await testFn(t); + } +}; + + +getExit().then(async exit => { + try { + await main(); + exit(0); + } catch (e) { + console.error(e); + exit(1); + } +}); |
