UNPKG

functionalscript

Version:

FunctionalScript is a purely functional subset of JavaScript

44 lines (43 loc) 1.47 kB
import { io } from "../../io/module.js"; import { loadModuleMap } from "../module.f.js"; import { isTest, parseTestSet } from "./module.f.js"; import * as nodeTest from 'node:test'; const isBun = typeof Bun !== 'undefined'; const createFramework = (fw) => (prefix, f) => fw.test(prefix, t => f((name, v) => t.test(name, v))); const createBunFramework = (fw) => (prefix, f) => f((name, v) => fw.test(`${prefix}: ${name}`, v)); const framework = isBun ? createBunFramework(nodeTest) : createFramework(nodeTest); const parse = parseTestSet(io.tryCatch); const scanModule = (x) => async (subTestRunner) => { let subTests = [x]; while (true) { const [first, ...rest] = subTests; if (first === undefined) { break; } subTests = rest; // const [name, value] = first; const set = parse(value); if (typeof set === 'function') { await subTestRunner(name, () => { const r = set(); subTests = [...subTests, [`${name}()`, r]]; }); } else { for (const [j, y] of set) { const pr = `${name}/${j}`; subTests = [...subTests, [pr, y]]; } } } }; const run = async () => { const x = await loadModuleMap(io); for (const [i, v] of Object.entries(x)) { if (isTest(i)) { framework(i, scanModule(['', v.default])); } } }; await run();