1
var parse = require('../');
2
var test = require('tape');
4
test('parse args', function (t) {
7
{ moo : false, _ : [] },
11
parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),
12
{ v : ['a','b','c'], _ : [] },
18
test('comprehensive', function (t) {
21
'--name=meowmers', 'bare', '-cats', 'woo',
22
'-h', 'awesome', '--multi=quux',
24
'-b', '--bool', '--no-meep', '--multi=baz',
25
'--', '--not-a-flag', 'eek'
36
multi : [ 'quux', 'baz' ],
39
_ : [ 'bare', '--not-a-flag', 'eek' ]
45
test('nums', function (t) {
51
'--hex', '0xdeadbeef',
62
t.deepEqual(typeof argv.x, 'number');
63
t.deepEqual(typeof argv.y, 'number');
64
t.deepEqual(typeof argv.z, 'number');
65
t.deepEqual(typeof argv.w, 'string');
66
t.deepEqual(typeof argv.hex, 'number');
67
t.deepEqual(typeof argv._[0], 'number');
71
test('flag boolean', function (t) {
72
var argv = parse([ '-t', 'moo' ], { boolean: 't' });
73
t.deepEqual(argv, { t : true, _ : [ 'moo' ] });
74
t.deepEqual(typeof argv.t, 'boolean');
78
test('flag boolean value', function (t) {
79
var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], {
80
boolean: [ 't', 'verbose' ],
81
default: { verbose: true }
90
t.deepEqual(typeof argv.verbose, 'boolean');
91
t.deepEqual(typeof argv.t, 'boolean');
95
test('flag boolean default false', function (t) {
96
var argv = parse(['moo'], {
97
boolean: ['t', 'verbose'],
98
default: { verbose: false, t: false }
107
t.deepEqual(typeof argv.verbose, 'boolean');
108
t.deepEqual(typeof argv.t, 'boolean');
113
test('boolean groups', function (t) {
114
var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {
115
boolean: ['x','y','z']
122
_ : [ 'one', 'two', 'three' ]
125
t.deepEqual(typeof argv.x, 'boolean');
126
t.deepEqual(typeof argv.y, 'boolean');
127
t.deepEqual(typeof argv.z, 'boolean');
131
test('newlines in params' , function (t) {
132
var args = parse([ '-s', "X\nX" ])
133
t.deepEqual(args, { _ : [], s : "X\nX" });
135
// reproduce in bash:
138
// node program.js --s="$VALUE"
139
args = parse([ "--s=X\nX" ])
140
t.deepEqual(args, { _ : [], s : "X\nX" });
144
test('strings' , function (t) {
145
var s = parse([ '-s', '0001234' ], { string: 's' }).s;
146
t.equal(s, '0001234');
147
t.equal(typeof s, 'string');
149
var x = parse([ '-x', '56' ], { string: 'x' }).x;
151
t.equal(typeof x, 'string');
155
test('stringArgs', function (t) {
156
var s = parse([ ' ', ' ' ], { string: '_' })._;
158
t.same(typeof s[0], 'string');
160
t.same(typeof s[1], 'string');
165
test('slashBreak', function (t) {
167
parse([ '-I/foo/bar/baz' ]),
168
{ I : '/foo/bar/baz', _ : [] }
171
parse([ '-xyz/foo/bar/baz' ]),
172
{ x : true, y : true, z : '/foo/bar/baz', _ : [] }
177
test('alias', function (t) {
178
var argv = parse([ '-f', '11', '--zoom', '55' ], {
181
t.equal(argv.zoom, 55);
182
t.equal(argv.z, argv.zoom);
187
test('multiAlias', function (t) {
188
var argv = parse([ '-f', '11', '--zoom', '55' ], {
189
alias: { z: [ 'zm', 'zoom' ] }
191
t.equal(argv.zoom, 55);
192
t.equal(argv.z, argv.zoom);
193
t.equal(argv.z, argv.zm);
198
test('nested dotted objects', function (t) {
200
'--foo.bar', '3', '--foo.baz', '4',
201
'--foo.quux.quibble', '5', '--foo.quux.o_O',
213
t.same(argv.beep, { boop : true });
217
test('boolean and alias with chainable api', function (t) {
218
var aliased = [ '-h', 'derp' ];
219
var regular = [ '--herp', 'derp' ];
221
herp: { alias: 'h', boolean: true }
223
var aliasedArgv = parse(aliased, {
227
var propertyArgv = parse(regular, {
237
t.same(aliasedArgv, expected);
238
t.same(propertyArgv, expected);
242
test('boolean and alias with options hash', function (t) {
243
var aliased = [ '-h', 'derp' ];
244
var regular = [ '--herp', 'derp' ];
246
alias: { 'h': 'herp' },
249
var aliasedArgv = parse(aliased, opts);
250
var propertyArgv = parse(regular, opts);
256
t.same(aliasedArgv, expected);
257
t.same(propertyArgv, expected);
261
test('boolean and alias using explicit true', function (t) {
262
var aliased = [ '-h', 'true' ];
263
var regular = [ '--herp', 'true' ];
265
alias: { h: 'herp' },
268
var aliasedArgv = parse(aliased, opts);
269
var propertyArgv = parse(regular, opts);
276
t.same(aliasedArgv, expected);
277
t.same(propertyArgv, expected);
281
// regression, see https://github.com/substack/node-optimist/issues/71
282
test('boolean and --x=true', function(t) {
283
var parsed = parse(['--boool', '--other=true'], {
287
t.same(parsed.boool, true);
288
t.same(parsed.other, 'true');
290
parsed = parse(['--boool', '--other=false'], {
294
t.same(parsed.boool, true);
295
t.same(parsed.other, 'false');