UNPKG

@auttam/easycli

Version:

A quick and easy way of creating cli for your npm package.

138 lines (137 loc) 7.14 kB
"use strict"; 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']); })); }); });