UNPKG

@scalvert/bin-tester

Version:

A test harness to invoke a CLI in a tmp directory

132 lines (127 loc) 4.28 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod)); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var src_exports = {}; __export(src_exports, { BinTesterProject: () => BinTesterProject, createBinTester: () => createBinTester }); module.exports = __toCommonJS(src_exports); // src/create-bin-tester.ts var import_execa2 = __toESM(require("execa"), 1); // src/project.ts var import_execa = __toESM(require("execa"), 1); var import_fixturify_project = require("fixturify-project"); var ROOT = process.cwd(); var BinTesterProject = class extends import_fixturify_project.Project { constructor(name = "fake-project", version, cb) { super(name, version, cb); this._dirChanged = false; this.pkg = Object.assign({}, this.pkg, { license: "MIT", description: "Fake project", repository: "http://fakerepo.com" }); } gitInit() { return (0, import_execa.default)(`git init -q ${this.baseDir}`); } async chdir() { this._dirChanged = true; await this.write(); process.chdir(this.baseDir); } dispose() { if (this._dirChanged) { process.chdir(ROOT); } return super.dispose(); } }; // src/create-bin-tester.ts var DEFAULT_BIN_TESTER_OPTIONS = { staticArgs: [] }; function parseArgs(args) { if (args.length > 0 && typeof args[args.length - 1] === "object") { const execaOptions = args.pop(); return { args, execaOptions }; } else { return { args, execaOptions: {} }; } } function createBinTester(options) { let project; const mergedOptions = __spreadValues(__spreadValues({}, DEFAULT_BIN_TESTER_OPTIONS), options); function runBin(...args) { const mergedRunOptions = parseArgs(args); const binPath = typeof mergedOptions.binPath === "function" ? mergedOptions.binPath(project) : mergedOptions.binPath; return (0, import_execa2.default)(process.execPath, [binPath, ...mergedOptions.staticArgs, ...mergedRunOptions.args], __spreadValues({ reject: false, cwd: project.baseDir }, mergedRunOptions.execaOptions)); } async function setupProject() { project = "createProject" in mergedOptions ? await mergedOptions.createProject() : new BinTesterProject(); await project.write(); return project; } async function setupTmpDir() { if (typeof project === "undefined") { await setupProject(); } return project.baseDir; } function teardownProject() { project.dispose(); } return { runBin, setupProject, teardownProject, setupTmpDir }; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { BinTesterProject, createBinTester });