peter
Version:
Peter Test Framework
110 lines (100 loc) • 2.67 kB
JavaScript
/**
* @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');