Jeff Williams 25c37411d9 add @jsdoc/cli and @jsdoc/util modules
`@jsdoc/cli` deals with command-line arguments, and `@jsdoc/util` casts values to appropriate types.
2019-01-26 12:02:55 -08:00

100 lines
2.8 KiB
JavaScript

const args = require('../../../lib/args');
const ARGS = args.ARGS;
describe('@jsdoc/cli/lib/args', () => {
it('exists', () => {
expect(args).toBeObject();
});
it('has an `ARGS` object', () => {
expect(args.ARGS).toBeObject();
});
it('has a `parse` function', () => {
expect(args.parse).toBeFunction();
});
describe('ARGS', () => {
// No need to test this object directly.
});
describe('parse', () => {
it('accepts an array and returns an object', () => {
const parsed = args.parse([]);
expect(parsed).toBeObject();
});
it('parses all known options', () => {
const argv = [];
Object.keys(ARGS).forEach(arg => {
argv.push(`--${arg}`);
if (ARGS[arg].requiresArg) {
argv.push(ARGS[arg].choices ? ARGS[arg].choices[0] : `value-for-${arg}`);
}
});
const parsed = args.parse(argv);
expect(Object.keys(parsed).sort())
.toEqual(Object.keys(ARGS).concat(['_']).sort());
});
it('puts extra arguments in the `_` array', () => {
const parsed = args.parse(['foo.js']);
expect(parsed._).toEqual(['foo.js']);
});
it('ignores unknown options', () => {
const parsed = args.parse(['--foo']);
expect(parsed.foo).toBeUndefined();
});
describe('--access', () => {
it('is returned as an array even when specified only once', () => {
const parsed = args.parse(['--access', 'public']);
expect(parsed.access).toEqual(['public']);
});
it('accepts the argument more than once', () => {
const parsed = args.parse([
'--access',
'protected',
'--access',
'public'
]);
expect(parsed.access.sort()).toEqual(['protected', 'public']);
});
it('throws on unknown values', () => {
function badArg() {
return args.parse(['--access', 'ibility']);
}
expect(badArg).toThrowError();
});
});
describe('--query', () => {
it('is returned as an object', () => {
const parsed = args.parse(['--query', 'foo=bar']);
expect(parsed.query).toEqual({foo: 'bar'});
});
it('coerces values to the appropriate types', () => {
const parsed = args.parse(['--query', 'foo=true&bar=17']);
expect(parsed.query.foo).toBeTrue();
expect(parsed.query.bar).toBe(17);
});
});
});
});