mirror of
https://github.com/jsdoc/jsdoc.git
synced 2025-12-08 19:46:11 +00:00
`@jsdoc/cli` deals with command-line arguments, and `@jsdoc/util` casts values to appropriate types.
100 lines
2.8 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
});
|
|
});
|