UNPKG

peter

Version:
110 lines (100 loc) 2.67 kB
/** * @file src/drivers/index.js * @author Ryan Rossiter, ryan@kingsds.network * @date July 2020 * * This module tracks the registered drivers and requires * the built-in drivers for them to register themselves. */ const drivers = {}; /** * @typedef {object} TestDriver * @property {TestDriverRunFn} run *//** * @callback TestDriverRunFn * @param {string} testPath * @param {object} options * @returns {Promise<TestDriverResult>} indicates pass/fail *//** * @typedef {object} TestDriverRunFnOptions * @property {boolean} verbose * @property {boolean} debug * @property {string[]} childArgv * @property {boolean} invert * @property {number} testNum * @property {NodeJS.ProcessEnv} env *//** * @typedef {object} TestDriverResult * @property {TapTestResultSummary|TestResultSummary} result * @property {object} streams * @property {object} failureTypes *//** /** * Return object from tap-parser * @typedef {object} TapTestResultSummary * @property {boolean} ok * @property {number} count * @property {number} pass * @property {number} fail * @property {boolean} bailout * @property {number} todo * @property {number} skip * @property {object} plan * @property {TestFailureResult[]} failures * @property {?number} time * @property {TestFailureResult[]} passes *//** * Return object from non-tap tests * @typedef {object} TestResultSummary * @property {string} type * @property {number} count * @property {number} pass * @property {number} fail * @property {number} skip * @property {boolean} ok * @property {TestFailureResult[]} failures *//** * @typedef {object} TestFailureResult * @property {string} name * @property {TestFailureDiag} [diag] * @property {boolean} [ok] * @property {number} [id] * @property {string} [fullname] * @property {string[]} [stderr] *//** * @typedef {object} TestFailureDiag * @property {string} at * @property {string} operator * @property {string|number} expected * @property {string|number} actual */ /** * @param {string} ext * @param {TestDriver} driver */ exports.registerDriver = function registerDriver(ext, driver) { if (ext in drivers) { throw new Error(`Test driver already registered for ${ext}.`); } drivers[ext] = driver; } /** * @param {string} ext * @returns {TestDriver} */ exports.getDriver = function getDriver(ext) { if (!(ext in drivers)) { throw new Error(`There is no test driver registered for ${ext}.`); } return drivers[ext]; } /** * @returns {string[]} */ exports.getDriverList = function getDriverList() { return Object.keys(drivers); } // Register default drivers require('./simple'); require('./bash'); require('./tap');