#!/usr/bin/env node // Many editors have terminal emulators built in, so running tests with NodeJS // provides faster iteration, especially for those acclimated to test-driven // development. import "./all_tests.js"; import { StreamReporter, TESTS } from "./test.js"; // TypeScript doesn't like process and Deno as their type definitions aren't // installed, but doesn't seem to complain if they're accessed through // globalThis. const process: any = globalThis.process; const Deno: any = globalThis.Deno; function getArgs(): string[] { if (process) { const [runtime, program, ...args] = process.argv; return args; } if (Deno) return Deno.args; return []; } function exit(code?: number): never { if (Deno) Deno.exit(code); if (process) process.exit(code); throw `exited with code ${code ?? 0}`; } const args = getArgs(); let verbose = false; if (args.length > 1) { console.error("Too many arguments"); exit(1); } if (args.length === 1) { if (args[0] === "-v" || args[0] === "--verbose" || args[0] === "-verbose") { verbose = true; } else if (args[0] !== "--") { console.error(`Unknown argument '${args[0]}'`); exit(1); } } let reporter = new StreamReporter({ writeln: console.log }, verbose); TESTS.run(reporter); exit(reporter.succeeded() ? 0 : 1);