@auttam/easycli
Version:
A quick and easy way of creating cli for your npm package.
138 lines (137 loc) • 7.14 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const program_args_1 = require("../../lib/runtime/program-args");
const settings_1 = require("../../lib/settings");
const param_config_1 = require("../../lib/config/param-config");
const option_config_1 = require("../../lib/config/option-config");
const runtime_error_1 = require("../../lib/errors/runtime-error");
const expect = require('chai').expect;
describe('Program Args', () => {
var args = ['node', './', 'arg1', 'arg2', '--option-arg1', '--option-arg2', 'arg3', 'arg4', '--no-option-arg5'];
var progArgs;
var processArgs = process.argv;
beforeEach(() => {
progArgs = new program_args_1.ProgramArgs();
});
afterEach(() => {
settings_1.SettingStore.enableCommands = false;
});
describe('supplied()', () => {
it('reads from specified index', () => {
progArgs.read(args);
expect(progArgs.toArray().length).to.equal(7);
expect(progArgs.toArray()[0]).to.equal('arg1');
});
});
describe('read()', () => {
it('reads process.argv if argv is not supplied', () => {
process.argv = ['node', './', 'arg1', 'arg2', 'arg3'];
progArgs.read();
process.argv = processArgs;
expect(progArgs.getParams()).to.eql(['arg1', 'arg2', 'arg3']);
});
it('reads non-option arguments as params', () => {
progArgs.read(args);
expect(progArgs.getParams()).to.eql(['arg1', 'arg2', 'arg4']);
});
it('reads option arguments as options', () => {
progArgs.read(args);
expect(progArgs.getOptions()).to.eql({ 'option-arg1': true, 'option-arg2': 'arg3', 'option-arg5': false });
});
it('reads first argument as command name if commands enabled', () => {
settings_1.SettingStore.enableCommands = true;
progArgs.read(args);
expect(progArgs.getCommandName()).to.equal('arg1');
expect(progArgs.getParams()).to.eql(['arg2', 'arg4']);
});
});
describe('optionsProvided()', () => {
it('returns true if options are supplied', () => {
progArgs.read(args);
expect(progArgs.optionsProvided()).to.equal(true);
});
it('returns false if options are not supplied', () => {
progArgs.read(['a', 'b', 'c', 'd']);
expect(progArgs.optionsProvided()).to.equal(false);
});
});
describe('containsOption()', () => {
it('returns true of option is supplied', () => {
progArgs.read(args);
expect(progArgs.containsOption(['option-arg1', 'option-arg2'])).to.equal(true);
});
});
describe('getAcceptedValue()', () => {
it('returns value as-is if configuration is not supplied', () => {
progArgs.read(args);
var value = progArgs.getAcceptedValue('test');
expect(value).to.equal('test');
});
it('returns value as-is if configuration doesn\'t have acceptOnly', () => {
progArgs.read(args);
var value = progArgs.getAcceptedValue('test', { name: 'option-arg1' });
expect(value).to.equal('test');
});
it('returns value for option from acceptOnly list', () => {
progArgs.read(args);
var value = progArgs.getAcceptedValue('test', { name: 'option-arg1', acceptOnly: ['Test'] });
expect(value).to.equal('Test');
});
it('returns value for param from acceptOnly list', () => {
progArgs.read(args);
var value = progArgs.getAcceptedValue('test', { name: 'my-param', type: param_config_1.ParamType.LIST, acceptOnly: ['TEST'] });
expect(value).to.equal('TEST');
});
it('throws exception when value not matched and default value is not set', () => {
progArgs.read(args);
expect(() => {
progArgs.getAcceptedValue('test', { name: 'option-arg1', acceptOnly: ['a'] });
}).to.throw(runtime_error_1.RuntimeError);
var value = progArgs.getAcceptedValue('test', { name: 'option-arg1', acceptOnly: ['a'], value: 'test' });
expect(value).to.equal('test');
});
});
describe('createParamsMap()', () => {
it('maps param collection with supplied params', () => __awaiter(void 0, void 0, void 0, function* () {
progArgs.read(args);
var collection = new param_config_1.ParamCollection();
collection.addByConfig([{ name: 'my-param1' }, { name: 'my-param2' }]);
var param = yield progArgs.createParamsMap(collection);
expect(param.myParam1).to.equal('arg1');
expect(param.myParam2).to.equal('arg2');
}));
it('$unknown contains only unidentified arguments', () => __awaiter(void 0, void 0, void 0, function* () {
progArgs.read(args);
var collection = new param_config_1.ParamCollection();
collection.addByConfig([{ name: 'my-param1' }, { name: 'my-param2' }]);
var param = yield progArgs.createParamsMap(collection);
expect(param.$unknown).to.eql(['arg4']);
}));
});
describe('createOptionsMap()', () => {
it('maps option collection with supplied options', () => __awaiter(void 0, void 0, void 0, function* () {
progArgs.read(args);
var collection = new option_config_1.OptionCollection();
collection.addList([{ name: 'option-arg1' }, { name: 'option-arg2', propName: 'optionA' }]);
var option = yield progArgs.createOptionsMap(collection);
expect(option.optionArg1).to.equal(true);
expect(option.optionA).to.equal('arg3');
}));
it('$unknown contains only unidentified arguments', () => __awaiter(void 0, void 0, void 0, function* () {
progArgs.read(args);
var collection = new option_config_1.OptionCollection();
collection.addList([{ name: 'option-arg1' }, { name: 'option-arg2', propName: 'optionA' }]);
var option = yield progArgs.createOptionsMap(collection);
expect(Object.keys(option.$unknown)).to.eql(['option-arg5']);
}));
});
});