commandos
Version:
Command line parser, compatible with DOS style command
100 lines (89 loc) • 2.77 kB
JavaScript
'use strict';
const MODULE_REQUIRE = 1
/* built-in */
, assert = require('assert')
/* NPM */
, noda = require('noda')
/* in-package */
, parseCommand = noda.inRequire('parse')
;
describe('parse, nonoption -> option', () => {
it('fixed position, number', () => {
let cmdtext = 'foo bar baz qux';
let options = [
'--help -h [0] NOT ASSIGNABLE',
'--action [1]',
];
let cmd = parseCommand(cmdtext, options);
assert.strictEqual(cmd.help, true);
assert.equal(cmd.action, 'baz');
});
it('accompanied by MULTIPLE', () => {
let cmdtext = 'foo bar baz qux';
let options = [
'--help -h [0] NOT ASSIGNABLE',
'--name [*] MULTIPLE',
];
let cmd = parseCommand(cmdtext, options);
assert.strictEqual(cmd.help, true);
assert.equal(cmd.name.length, 2);
});
it('position range', () => {
let cmdtext = 'foo A B C D E F';
let options = [
'-a [0]',
'-b [>=1]',
'-c [<3]',
'-d [<3]',
];
let cmd = parseCommand(cmdtext, options);
assert.equal(cmd.a, 'A');
assert.equal(cmd.b, 'B');
assert.equal(cmd.c, 'C');
assert.equal(cmd.d, undefined);
});
it('mixed with named options', () => {
let cmdtext = 'foo -a A B -d=D E -f F G';
let options = [
'-b [*]',
'-e [*]',
'-g [*]',
];
let cmd = parseCommand(cmdtext, options);
assert.equal(cmd.b, 'B');
assert.equal(cmd.e, 'E');
assert.equal(cmd.g, 'G');
});
it('fixed value, := (equal)', () => {
let cmdtext = 'foo bar baz start qux';
let options = [
'--action [*:=start]',
];
let cmd = parseCommand(cmdtext, options);
assert.equal(cmd.action, 'start');
});
it('fixed value, :=* (case-insensitively equal)', () => {
let cmdtext = 'foo bar baz START qux';
let options = [
'--action [*:=*start]',
];
let cmd = parseCommand(cmdtext, options);
assert.equal(cmd.action, 'START');
});
it('fixed value, :~ (match)', () => {
let cmdtext = 'foo bar baz start qux';
let options = [
'--action [*:~^s]',
];
let cmd = parseCommand(cmdtext, options);
assert.equal(cmd.action, 'start');
});
it('fixed value, :~* (case-insensitively match)', () => {
let cmdtext = 'foo bar baz START qux';
let options = [
'--action [*:~*^s]',
];
let cmd = parseCommand(cmdtext, options);
assert.equal(cmd.action, 'START');
});
});