l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

parse.js (10494B)


      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     // reproduce in bash:
    252     // VALUE="new
    253     // line"
    254     // node program.js --s="$VALUE"
    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 // regression, see https://github.com/substack/node-optimist/issues/71
    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 });