Spaces:
Sleeping
Sleeping
; | |
var parse = require('../'); | |
var test = require('tape'); | |
test('parse args', function (t) { | |
t.deepEqual( | |
parse(['--no-moo']), | |
{ moo: false, _: [] }, | |
'no' | |
); | |
t.deepEqual( | |
parse(['-v', 'a', '-v', 'b', '-v', 'c']), | |
{ v: ['a', 'b', 'c'], _: [] }, | |
'multi' | |
); | |
t.end(); | |
}); | |
test('comprehensive', function (t) { | |
t.deepEqual( | |
parse([ | |
'--name=meowmers', 'bare', '-cats', 'woo', | |
'-h', 'awesome', '--multi=quux', | |
'--key', 'value', | |
'-b', '--bool', '--no-meep', '--multi=baz', | |
'--', '--not-a-flag', 'eek', | |
]), | |
{ | |
c: true, | |
a: true, | |
t: true, | |
s: 'woo', | |
h: 'awesome', | |
b: true, | |
bool: true, | |
key: 'value', | |
multi: ['quux', 'baz'], | |
meep: false, | |
name: 'meowmers', | |
_: ['bare', '--not-a-flag', 'eek'], | |
} | |
); | |
t.end(); | |
}); | |
test('flag boolean', function (t) { | |
var argv = parse(['-t', 'moo'], { boolean: 't' }); | |
t.deepEqual(argv, { t: true, _: ['moo'] }); | |
t.deepEqual(typeof argv.t, 'boolean'); | |
t.end(); | |
}); | |
test('flag boolean value', function (t) { | |
var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { | |
boolean: ['t', 'verbose'], | |
default: { verbose: true }, | |
}); | |
t.deepEqual(argv, { | |
verbose: false, | |
t: true, | |
_: ['moo'], | |
}); | |
t.deepEqual(typeof argv.verbose, 'boolean'); | |
t.deepEqual(typeof argv.t, 'boolean'); | |
t.end(); | |
}); | |
test('newlines in params', function (t) { | |
var args = parse(['-s', 'X\nX']); | |
t.deepEqual(args, { _: [], s: 'X\nX' }); | |
// reproduce in bash: | |
// VALUE="new | |
// line" | |
// node program.js --s="$VALUE" | |
args = parse(['--s=X\nX']); | |
t.deepEqual(args, { _: [], s: 'X\nX' }); | |
t.end(); | |
}); | |
test('strings', function (t) { | |
var s = parse(['-s', '0001234'], { string: 's' }).s; | |
t.equal(s, '0001234'); | |
t.equal(typeof s, 'string'); | |
var x = parse(['-x', '56'], { string: 'x' }).x; | |
t.equal(x, '56'); | |
t.equal(typeof x, 'string'); | |
t.end(); | |
}); | |
test('stringArgs', function (t) { | |
var s = parse([' ', ' '], { string: '_' })._; | |
t.same(s.length, 2); | |
t.same(typeof s[0], 'string'); | |
t.same(s[0], ' '); | |
t.same(typeof s[1], 'string'); | |
t.same(s[1], ' '); | |
t.end(); | |
}); | |
test('empty strings', function (t) { | |
var s = parse(['-s'], { string: 's' }).s; | |
t.equal(s, ''); | |
t.equal(typeof s, 'string'); | |
var str = parse(['--str'], { string: 'str' }).str; | |
t.equal(str, ''); | |
t.equal(typeof str, 'string'); | |
var letters = parse(['-art'], { | |
string: ['a', 't'], | |
}); | |
t.equal(letters.a, ''); | |
t.equal(letters.r, true); | |
t.equal(letters.t, ''); | |
t.end(); | |
}); | |
test('string and alias', function (t) { | |
var x = parse(['--str', '000123'], { | |
string: 's', | |
alias: { s: 'str' }, | |
}); | |
t.equal(x.str, '000123'); | |
t.equal(typeof x.str, 'string'); | |
t.equal(x.s, '000123'); | |
t.equal(typeof x.s, 'string'); | |
var y = parse(['-s', '000123'], { | |
string: 'str', | |
alias: { str: 's' }, | |
}); | |
t.equal(y.str, '000123'); | |
t.equal(typeof y.str, 'string'); | |
t.equal(y.s, '000123'); | |
t.equal(typeof y.s, 'string'); | |
var z = parse(['-s123'], { | |
alias: { str: ['s', 'S'] }, | |
string: ['str'], | |
}); | |
t.deepEqual( | |
z, | |
{ _: [], s: '123', S: '123', str: '123' }, | |
'opt.string works with multiple aliases' | |
); | |
t.end(); | |
}); | |
test('slashBreak', function (t) { | |
t.same( | |
parse(['-I/foo/bar/baz']), | |
{ I: '/foo/bar/baz', _: [] } | |
); | |
t.same( | |
parse(['-xyz/foo/bar/baz']), | |
{ x: true, y: true, z: '/foo/bar/baz', _: [] } | |
); | |
t.end(); | |
}); | |
test('alias', function (t) { | |
var argv = parse(['-f', '11', '--zoom', '55'], { | |
alias: { z: 'zoom' }, | |
}); | |
t.equal(argv.zoom, 55); | |
t.equal(argv.z, argv.zoom); | |
t.equal(argv.f, 11); | |
t.end(); | |
}); | |
test('multiAlias', function (t) { | |
var argv = parse(['-f', '11', '--zoom', '55'], { | |
alias: { z: ['zm', 'zoom'] }, | |
}); | |
t.equal(argv.zoom, 55); | |
t.equal(argv.z, argv.zoom); | |
t.equal(argv.z, argv.zm); | |
t.equal(argv.f, 11); | |
t.end(); | |
}); | |
test('nested dotted objects', function (t) { | |
var argv = parse([ | |
'--foo.bar', '3', '--foo.baz', '4', | |
'--foo.quux.quibble', '5', '--foo.quux.o_O', | |
'--beep.boop', | |
]); | |
t.same(argv.foo, { | |
bar: 3, | |
baz: 4, | |
quux: { | |
quibble: 5, | |
o_O: true, | |
}, | |
}); | |
t.same(argv.beep, { boop: true }); | |
t.end(); | |
}); | |