| 'use strict'; |
| |
| /** |
| * Contains "command" code for "one-and-dones"--options passed |
| * to Mocha which cause it to just dump some info and exit. |
| * See {@link module:lib/cli/one-and-dones.ONE_AND_DONE_ARGS ONE_AND_DONE_ARGS} for more info. |
| * @module |
| * @private |
| */ |
| |
| const align = require('wide-align'); |
| const Mocha = require('../mocha'); |
| |
| /** |
| * Dumps a sorted list of the enumerable, lower-case keys of some object |
| * to `STDOUT`. |
| * @param {Object} obj - Object, ostensibly having some enumerable keys |
| * @ignore |
| * @private |
| */ |
| const showKeys = obj => { |
| console.log(); |
| const keys = Object.keys(obj); |
| const maxKeyLength = keys.reduce((max, key) => Math.max(max, key.length), 0); |
| keys |
| .filter( |
| key => /^[a-z]/.test(key) && !obj[key].browserOnly && !obj[key].abstract |
| ) |
| .sort() |
| .forEach(key => { |
| const description = obj[key].description; |
| console.log( |
| ` ${align.left(key, maxKeyLength + 1)}${ |
| description ? `- ${description}` : '' |
| }` |
| ); |
| }); |
| console.log(); |
| }; |
| |
| /** |
| * Handlers for one-and-done options |
| * @namespace |
| * @private |
| */ |
| exports.ONE_AND_DONES = { |
| /** |
| * Dump list of built-in interfaces |
| * @private |
| */ |
| interfaces: () => { |
| showKeys(Mocha.interfaces); |
| }, |
| /** |
| * Dump list of built-in reporters |
| * @private |
| */ |
| reporters: () => { |
| showKeys(Mocha.reporters); |
| } |
| }; |
| |
| /** |
| * A Set of all one-and-done options |
| * @type Set<string> |
| * @private |
| */ |
| exports.ONE_AND_DONE_ARGS = new Set( |
| ['help', 'h', 'version', 'V'].concat(Object.keys(exports.ONE_AND_DONES)) |
| ); |