text: 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();
      }
    });
  });
  