mocha
Version:
simple, flexible, fun test framework
139 lines (130 loc) • 3.03 kB
JavaScript
;
/**
* Metadata about various options of the `run` command
* @see module:lib/cli/run
* @module
* @private
*/
/**
* Dictionary of yargs option types to list of options having said type
* @type {Record<string, string[]>}
* @private
*/
const TYPES = (exports.types = {
array: [
"extension",
"file",
"global",
"ignore",
"node-option",
"reporter-option",
"require",
"spec",
"watch-files",
"watch-ignore",
],
boolean: [
"allow-uncaught",
"async-only",
"bail",
"check-leaks",
"color",
"delay",
"diff",
"dry-run",
"exit",
"pass-on-failing-test-suite",
"fail-zero",
"forbid-only",
"forbid-pending",
"full-trace",
"inline-diffs",
"invert",
"list-interfaces",
"list-reporters",
"no-colors",
"parallel",
"posix-exit-codes",
"recursive",
"sort",
"watch",
],
number: ["retries", "jobs"],
string: [
"config",
"fgrep",
"grep",
"package",
"reporter",
"ui",
"slow",
"timeout",
],
});
/**
* Option aliases keyed by canonical option name.
* Arrays used to reduce
* @type {Record<string, string[]>}
* @private
*/
exports.aliases = {
"async-only": ["A"],
bail: ["b"],
color: ["c", "colors"],
fgrep: ["f"],
global: ["globals"],
grep: ["g"],
ignore: ["exclude"],
invert: ["i"],
jobs: ["j"],
"no-colors": ["C"],
"node-option": ["n"],
parallel: ["p"],
reporter: ["R"],
"reporter-option": ["reporter-options", "O"],
require: ["r"],
slow: ["s"],
sort: ["S"],
timeout: ["t", "timeouts"],
ui: ["u"],
watch: ["w"],
};
const ALL_MOCHA_FLAGS = Object.keys(TYPES).reduce((acc, key) => {
// gets all flags from each of the fields in `types`, adds those,
// then adds aliases of each flag (if any)
TYPES[key].forEach((flag) => {
acc.add(flag);
const aliases = exports.aliases[flag] || [];
aliases.forEach((alias) => {
acc.add(alias);
});
});
return acc;
}, new Set());
/**
* Returns `true` if the provided `flag` is known to Mocha.
* @param {string} flag - Flag to check
* @returns {boolean} If `true`, this is a Mocha flag
* @private
*/
exports.isMochaFlag = (flag) => {
return ALL_MOCHA_FLAGS.has(flag.replace(/^--?/, ""));
};
/**
* Returns expected yarg option type for a given mocha flag.
* @param {string} flag - Flag to check (can be with or without leading dashes "--"")
* @returns {string | undefined} - If flag is a valid mocha flag, the expected type of argument for this flag is returned, otherwise undefined is returned.
* @private
*/
exports.expectedTypeForFlag = (flag) => {
const normalizedName = flag.replace(/^--?/, "");
// If flag is an alias, get it's full name.
const aliases = exports.aliases;
const fullFlagName =
Object.keys(aliases).find((flagName) =>
aliases[flagName].includes(normalizedName),
) || normalizedName;
return Object.keys(TYPES).find((flagType) =>
TYPES[flagType].includes(fullFlagName),
);
};