functionalscript
Version:
FunctionalScript is a purely functional subset of JavaScript
44 lines (43 loc) • 1.47 kB
JavaScript
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();