1 | var optimist = require('../index');
|
2 | var path = require('path');
|
3 | var test = require('tap').test;
|
4 |
|
5 | var $0 = 'node ./' + path.relative(process.cwd(), __filename);
|
6 |
|
7 | test('short boolean', function (t) {
|
8 | var parse = optimist.parse([ '-b' ]);
|
9 | t.same(parse, { b : true, _ : [], $0 : $0 });
|
10 | t.same(typeof parse.b, 'boolean');
|
11 | t.end();
|
12 | });
|
13 |
|
14 | test('long boolean', function (t) {
|
15 | t.same(
|
16 | optimist.parse([ '--bool' ]),
|
17 | { bool : true, _ : [], $0 : $0 }
|
18 | );
|
19 | t.end();
|
20 | });
|
21 |
|
22 | test('bare', function (t) {
|
23 | t.same(
|
24 | optimist.parse([ 'foo', 'bar', 'baz' ]),
|
25 | { _ : [ 'foo', 'bar', 'baz' ], $0 : $0 }
|
26 | );
|
27 | t.end();
|
28 | });
|
29 |
|
30 | test('short group', function (t) {
|
31 | t.same(
|
32 | optimist.parse([ '-cats' ]),
|
33 | { c : true, a : true, t : true, s : true, _ : [], $0 : $0 }
|
34 | );
|
35 | t.end();
|
36 | });
|
37 |
|
38 | test('short group next', function (t) {
|
39 | t.same(
|
40 | optimist.parse([ '-cats', 'meow' ]),
|
41 | { c : true, a : true, t : true, s : 'meow', _ : [], $0 : $0 }
|
42 | );
|
43 | t.end();
|
44 | });
|
45 |
|
46 | test('short capture', function (t) {
|
47 | t.same(
|
48 | optimist.parse([ '-h', 'localhost' ]),
|
49 | { h : 'localhost', _ : [], $0 : $0 }
|
50 | );
|
51 | t.end();
|
52 | });
|
53 |
|
54 | test('short captures', function (t) {
|
55 | t.same(
|
56 | optimist.parse([ '-h', 'localhost', '-p', '555' ]),
|
57 | { h : 'localhost', p : 555, _ : [], $0 : $0 }
|
58 | );
|
59 | t.end();
|
60 | });
|
61 |
|
62 | test('long capture sp', function (t) {
|
63 | t.same(
|
64 | optimist.parse([ '--pow', 'xixxle' ]),
|
65 | { pow : 'xixxle', _ : [], $0 : $0 }
|
66 | );
|
67 | t.end();
|
68 | });
|
69 |
|
70 | test('long capture eq', function (t) {
|
71 | t.same(
|
72 | optimist.parse([ '--pow=xixxle' ]),
|
73 | { pow : 'xixxle', _ : [], $0 : $0 }
|
74 | );
|
75 | t.end()
|
76 | });
|
77 |
|
78 | test('long captures sp', function (t) {
|
79 | t.same(
|
80 | optimist.parse([ '--host', 'localhost', '--port', '555' ]),
|
81 | { host : 'localhost', port : 555, _ : [], $0 : $0 }
|
82 | );
|
83 | t.end();
|
84 | });
|
85 |
|
86 | test('long captures eq', function (t) {
|
87 | t.same(
|
88 | optimist.parse([ '--host=localhost', '--port=555' ]),
|
89 | { host : 'localhost', port : 555, _ : [], $0 : $0 }
|
90 | );
|
91 | t.end();
|
92 | });
|
93 |
|
94 | test('mixed short bool and capture', function (t) {
|
95 | t.same(
|
96 | optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
|
97 | {
|
98 | f : true, p : 555, h : 'localhost',
|
99 | _ : [ 'script.js' ], $0 : $0,
|
100 | }
|
101 | );
|
102 | t.end();
|
103 | });
|
104 |
|
105 | test('short and long', function (t) {
|
106 | t.same(
|
107 | optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
|
108 | {
|
109 | f : true, p : 555, h : 'localhost',
|
110 | _ : [ 'script.js' ], $0 : $0,
|
111 | }
|
112 | );
|
113 | t.end();
|
114 | });
|
115 |
|
116 | test('no', function (t) {
|
117 | t.same(
|
118 | optimist.parse([ '--no-moo' ]),
|
119 | { moo : false, _ : [], $0 : $0 }
|
120 | );
|
121 | t.end();
|
122 | });
|
123 |
|
124 | test('multi', function (t) {
|
125 | t.same(
|
126 | optimist.parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),
|
127 | { v : ['a','b','c'], _ : [], $0 : $0 }
|
128 | );
|
129 | t.end();
|
130 | });
|
131 |
|
132 | test('comprehensive', function (t) {
|
133 | t.same(
|
134 | optimist.parse([
|
135 | '--name=meowmers', 'bare', '-cats', 'woo',
|
136 | '-h', 'awesome', '--multi=quux',
|
137 | '--key', 'value',
|
138 | '-b', '--bool', '--no-meep', '--multi=baz',
|
139 | '--', '--not-a-flag', 'eek'
|
140 | ]),
|
141 | {
|
142 | c : true,
|
143 | a : true,
|
144 | t : true,
|
145 | s : 'woo',
|
146 | h : 'awesome',
|
147 | b : true,
|
148 | bool : true,
|
149 | key : 'value',
|
150 | multi : [ 'quux', 'baz' ],
|
151 | meep : false,
|
152 | name : 'meowmers',
|
153 | _ : [ 'bare', '--not-a-flag', 'eek' ],
|
154 | $0 : $0
|
155 | }
|
156 | );
|
157 | t.end();
|
158 | });
|
159 |
|
160 | test('nums', function (t) {
|
161 | var argv = optimist.parse([
|
162 | '-x', '1234',
|
163 | '-y', '5.67',
|
164 | '-z', '1e7',
|
165 | '-w', '10f',
|
166 | '--hex', '0xdeadbeef',
|
167 | '789',
|
168 | ]);
|
169 | t.same(argv, {
|
170 | x : 1234,
|
171 | y : 5.67,
|
172 | z : 1e7,
|
173 | w : '10f',
|
174 | hex : 0xdeadbeef,
|
175 | _ : [ 789 ],
|
176 | $0 : $0
|
177 | });
|
178 | t.same(typeof argv.x, 'number');
|
179 | t.same(typeof argv.y, 'number');
|
180 | t.same(typeof argv.z, 'number');
|
181 | t.same(typeof argv.w, 'string');
|
182 | t.same(typeof argv.hex, 'number');
|
183 | t.same(typeof argv._[0], 'number');
|
184 | t.end();
|
185 | });
|
186 |
|
187 | test('flag boolean', function (t) {
|
188 | var parse = optimist([ '-t', 'moo' ]).boolean(['t']).argv;
|
189 | t.same(parse, { t : true, _ : [ 'moo' ], $0 : $0 });
|
190 | t.same(typeof parse.t, 'boolean');
|
191 | t.end();
|
192 | });
|
193 |
|
194 | test('flag boolean value', function (t) {
|
195 | var parse = optimist(['--verbose', 'false', 'moo', '-t', 'true'])
|
196 | .boolean(['t', 'verbose']).default('verbose', true).argv;
|
197 |
|
198 | t.same(parse, {
|
199 | verbose: false,
|
200 | t: true,
|
201 | _: ['moo'],
|
202 | $0 : $0
|
203 | });
|
204 |
|
205 | t.same(typeof parse.verbose, 'boolean');
|
206 | t.same(typeof parse.t, 'boolean');
|
207 | t.end();
|
208 | });
|
209 |
|
210 | test('flag boolean default false', function (t) {
|
211 | var parse = optimist(['moo'])
|
212 | .boolean(['t', 'verbose'])
|
213 | .default('verbose', false)
|
214 | .default('t', false).argv;
|
215 |
|
216 | t.same(parse, {
|
217 | verbose: false,
|
218 | t: false,
|
219 | _: ['moo'],
|
220 | $0 : $0
|
221 | });
|
222 |
|
223 | t.same(typeof parse.verbose, 'boolean');
|
224 | t.same(typeof parse.t, 'boolean');
|
225 | t.end();
|
226 |
|
227 | });
|
228 |
|
229 | test('boolean groups', function (t) {
|
230 | var parse = optimist([ '-x', '-z', 'one', 'two', 'three' ])
|
231 | .boolean(['x','y','z']).argv;
|
232 |
|
233 | t.same(parse, {
|
234 | x : true,
|
235 | y : false,
|
236 | z : true,
|
237 | _ : [ 'one', 'two', 'three' ],
|
238 | $0 : $0
|
239 | });
|
240 |
|
241 | t.same(typeof parse.x, 'boolean');
|
242 | t.same(typeof parse.y, 'boolean');
|
243 | t.same(typeof parse.z, 'boolean');
|
244 | t.end();
|
245 | });
|
246 |
|
247 | test('newlines in params' , function (t) {
|
248 | var args = optimist.parse([ '-s', "X\nX" ])
|
249 | t.same(args, { _ : [], s : "X\nX", $0 : $0 });
|
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 | args = optimist.parse([ "--s=X\nX" ])
|
256 | t.same(args, { _ : [], s : "X\nX", $0 : $0 });
|
257 | t.end();
|
258 | });
|
259 |
|
260 | test('strings' , function (t) {
|
261 | var s = optimist([ '-s', '0001234' ]).string('s').argv.s;
|
262 | t.same(s, '0001234');
|
263 | t.same(typeof s, 'string');
|
264 |
|
265 | var x = optimist([ '-x', '56' ]).string('x').argv.x;
|
266 | t.same(x, '56');
|
267 | t.same(typeof x, 'string');
|
268 | t.end();
|
269 | });
|
270 |
|
271 | test('stringArgs', function (t) {
|
272 | var s = optimist([ ' ', ' ' ]).string('_').argv._;
|
273 | t.same(s.length, 2);
|
274 | t.same(typeof s[0], 'string');
|
275 | t.same(s[0], ' ');
|
276 | t.same(typeof s[1], 'string');
|
277 | t.same(s[1], ' ');
|
278 | t.end();
|
279 | });
|
280 |
|
281 | test('slashBreak', function (t) {
|
282 | t.same(
|
283 | optimist.parse([ '-I/foo/bar/baz' ]),
|
284 | { I : '/foo/bar/baz', _ : [], $0 : $0 }
|
285 | );
|
286 | t.same(
|
287 | optimist.parse([ '-xyz/foo/bar/baz' ]),
|
288 | { x : true, y : true, z : '/foo/bar/baz', _ : [], $0 : $0 }
|
289 | );
|
290 | t.end();
|
291 | });
|
292 |
|
293 | test('alias', function (t) {
|
294 | var argv = optimist([ '-f', '11', '--zoom', '55' ])
|
295 | .alias('z', 'zoom')
|
296 | .argv
|
297 | ;
|
298 | t.equal(argv.zoom, 55);
|
299 | t.equal(argv.z, argv.zoom);
|
300 | t.equal(argv.f, 11);
|
301 | t.end();
|
302 | });
|
303 |
|
304 | test('multiAlias', function (t) {
|
305 | var argv = optimist([ '-f', '11', '--zoom', '55' ])
|
306 | .alias('z', [ 'zm', 'zoom' ])
|
307 | .argv
|
308 | ;
|
309 | t.equal(argv.zoom, 55);
|
310 | t.equal(argv.z, argv.zoom);
|
311 | t.equal(argv.z, argv.zm);
|
312 | t.equal(argv.f, 11);
|
313 | t.end();
|
314 | });
|
315 |
|
316 | test('boolean default true', function (t) {
|
317 | var argv = optimist.options({
|
318 | sometrue: {
|
319 | boolean: true,
|
320 | default: true
|
321 | }
|
322 | }).argv;
|
323 |
|
324 | t.equal(argv.sometrue, true);
|
325 | t.end();
|
326 | });
|
327 |
|
328 | test('boolean default false', function (t) {
|
329 | var argv = optimist.options({
|
330 | somefalse: {
|
331 | boolean: true,
|
332 | default: false
|
333 | }
|
334 | }).argv;
|
335 |
|
336 | t.equal(argv.somefalse, false);
|
337 | t.end();
|
338 | });
|
339 |
|
340 | test('nested dotted objects', function (t) {
|
341 | var argv = optimist([
|
342 | '--foo.bar', '3', '--foo.baz', '4',
|
343 | '--foo.quux.quibble', '5', '--foo.quux.o_O',
|
344 | '--beep.boop'
|
345 | ]).argv;
|
346 |
|
347 | t.same(argv.foo, {
|
348 | bar : 3,
|
349 | baz : 4,
|
350 | quux : {
|
351 | quibble : 5,
|
352 | o_O : true
|
353 | },
|
354 | });
|
355 | t.same(argv.beep, { boop : true });
|
356 | t.end();
|
357 | });
|
358 |
|
359 | test('boolean and alias with chainable api', function (t) {
|
360 | var aliased = [ '-h', 'derp' ];
|
361 | var regular = [ '--herp', 'derp' ];
|
362 | var opts = {
|
363 | herp: { alias: 'h', boolean: true }
|
364 | };
|
365 | var aliasedArgv = optimist(aliased)
|
366 | .boolean('herp')
|
367 | .alias('h', 'herp')
|
368 | .argv;
|
369 | var propertyArgv = optimist(regular)
|
370 | .boolean('herp')
|
371 | .alias('h', 'herp')
|
372 | .argv;
|
373 | var expected = {
|
374 | herp: true,
|
375 | h: true,
|
376 | '_': [ 'derp' ],
|
377 | '$0': $0,
|
378 | };
|
379 |
|
380 | t.same(aliasedArgv, expected);
|
381 | t.same(propertyArgv, expected);
|
382 | t.end();
|
383 | });
|
384 |
|
385 | test('boolean and alias with options hash', function (t) {
|
386 | var aliased = [ '-h', 'derp' ];
|
387 | var regular = [ '--herp', 'derp' ];
|
388 | var opts = {
|
389 | herp: { alias: 'h', boolean: true }
|
390 | };
|
391 | var aliasedArgv = optimist(aliased)
|
392 | .options(opts)
|
393 | .argv;
|
394 | var propertyArgv = optimist(regular).options(opts).argv;
|
395 | var expected = {
|
396 | herp: true,
|
397 | h: true,
|
398 | '_': [ 'derp' ],
|
399 | '$0': $0,
|
400 | };
|
401 |
|
402 | t.same(aliasedArgv, expected);
|
403 | t.same(propertyArgv, expected);
|
404 |
|
405 | t.end();
|
406 | });
|
407 |
|
408 | test('boolean and alias using explicit true', function (t) {
|
409 | var aliased = [ '-h', 'true' ];
|
410 | var regular = [ '--herp', 'true' ];
|
411 | var opts = {
|
412 | herp: { alias: 'h', boolean: true }
|
413 | };
|
414 | var aliasedArgv = optimist(aliased)
|
415 | .boolean('h')
|
416 | .alias('h', 'herp')
|
417 | .argv;
|
418 | var propertyArgv = optimist(regular)
|
419 | .boolean('h')
|
420 | .alias('h', 'herp')
|
421 | .argv;
|
422 | var expected = {
|
423 | herp: true,
|
424 | h: true,
|
425 | '_': [ ],
|
426 | '$0': $0,
|
427 | };
|
428 |
|
429 | t.same(aliasedArgv, expected);
|
430 | t.same(propertyArgv, expected);
|
431 | t.end();
|
432 | });
|
433 |
|
434 |
|
435 | test('boolean and --x=true', function(t) {
|
436 | var parsed = optimist(['--boool', '--other=true']).boolean('boool').argv;
|
437 |
|
438 | t.same(parsed.boool, true);
|
439 | t.same(parsed.other, 'true');
|
440 |
|
441 | parsed = optimist(['--boool', '--other=false']).boolean('boool').argv;
|
442 |
|
443 | t.same(parsed.boool, true);
|
444 | t.same(parsed.other, 'false');
|
445 | t.end();
|
446 | });
|