const flags = require('../../../lib/flags'); const {default: ow} = require('ow'); function validate(name, opts) { name = `--${name}`; if (!opts.description) { throw new TypeError(`${name} is missing its description`); } if (opts.array && opts.boolean) { throw new TypeError(`${name} can be an array or a boolean, but not both`); } if (opts.requiresArg && opts.boolean) { throw new TypeError(`${name} can require an argument or be a boolean, but not both`); } try { ow(opts.coerce, ow.optional.function); } catch (e) { throw new TypeError(`The coerce value for ${name} is not a function`); } if (opts.choices && !opts.requiresArg) { throw new TypeError(`${name} specifies choices, but not requiresArg`); } } describe('@jsdoc/cli/lib/flags', () => { it('is an object', () => { expect(flags).toBeObject(); }); it('has reasonable settings for each flag', () => { for (let flag of Object.keys(flags)) { expect(() => validate(flag, flags[flag])).not.toThrow(); } }); });