react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / mkdirp / node_modules / minimist / test / parse.js
80713 viewsvar parse = require('../');1var test = require('tape');23test('parse args', function (t) {4t.deepEqual(5parse([ '--no-moo' ]),6{ moo : false, _ : [] },7'no'8);9t.deepEqual(10parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),11{ v : ['a','b','c'], _ : [] },12'multi'13);14t.end();15});1617test('comprehensive', function (t) {18t.deepEqual(19parse([20'--name=meowmers', 'bare', '-cats', 'woo',21'-h', 'awesome', '--multi=quux',22'--key', 'value',23'-b', '--bool', '--no-meep', '--multi=baz',24'--', '--not-a-flag', 'eek'25]),26{27c : true,28a : true,29t : true,30s : 'woo',31h : 'awesome',32b : true,33bool : true,34key : 'value',35multi : [ 'quux', 'baz' ],36meep : false,37name : 'meowmers',38_ : [ 'bare', '--not-a-flag', 'eek' ]39}40);41t.end();42});4344test('nums', function (t) {45var argv = parse([46'-x', '1234',47'-y', '5.67',48'-z', '1e7',49'-w', '10f',50'--hex', '0xdeadbeef',51'789'52]);53t.deepEqual(argv, {54x : 1234,55y : 5.67,56z : 1e7,57w : '10f',58hex : 0xdeadbeef,59_ : [ 789 ]60});61t.deepEqual(typeof argv.x, 'number');62t.deepEqual(typeof argv.y, 'number');63t.deepEqual(typeof argv.z, 'number');64t.deepEqual(typeof argv.w, 'string');65t.deepEqual(typeof argv.hex, 'number');66t.deepEqual(typeof argv._[0], 'number');67t.end();68});6970test('flag boolean', function (t) {71var argv = parse([ '-t', 'moo' ], { boolean: 't' });72t.deepEqual(argv, { t : true, _ : [ 'moo' ] });73t.deepEqual(typeof argv.t, 'boolean');74t.end();75});7677test('flag boolean value', function (t) {78var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], {79boolean: [ 't', 'verbose' ],80default: { verbose: true }81});8283t.deepEqual(argv, {84verbose: false,85t: true,86_: ['moo']87});8889t.deepEqual(typeof argv.verbose, 'boolean');90t.deepEqual(typeof argv.t, 'boolean');91t.end();92});9394test('flag boolean default false', function (t) {95var argv = parse(['moo'], {96boolean: ['t', 'verbose'],97default: { verbose: false, t: false }98});99100t.deepEqual(argv, {101verbose: false,102t: false,103_: ['moo']104});105106t.deepEqual(typeof argv.verbose, 'boolean');107t.deepEqual(typeof argv.t, 'boolean');108t.end();109110});111112test('boolean groups', function (t) {113var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {114boolean: ['x','y','z']115});116117t.deepEqual(argv, {118x : true,119y : false,120z : true,121_ : [ 'one', 'two', 'three' ]122});123124t.deepEqual(typeof argv.x, 'boolean');125t.deepEqual(typeof argv.y, 'boolean');126t.deepEqual(typeof argv.z, 'boolean');127t.end();128});129130test('newlines in params' , function (t) {131var args = parse([ '-s', "X\nX" ])132t.deepEqual(args, { _ : [], s : "X\nX" });133134// reproduce in bash:135// VALUE="new136// line"137// node program.js --s="$VALUE"138args = parse([ "--s=X\nX" ])139t.deepEqual(args, { _ : [], s : "X\nX" });140t.end();141});142143test('strings' , function (t) {144var s = parse([ '-s', '0001234' ], { string: 's' }).s;145t.equal(s, '0001234');146t.equal(typeof s, 'string');147148var x = parse([ '-x', '56' ], { string: 'x' }).x;149t.equal(x, '56');150t.equal(typeof x, 'string');151t.end();152});153154test('stringArgs', function (t) {155var s = parse([ ' ', ' ' ], { string: '_' })._;156t.same(s.length, 2);157t.same(typeof s[0], 'string');158t.same(s[0], ' ');159t.same(typeof s[1], 'string');160t.same(s[1], ' ');161t.end();162});163164test('empty strings', function(t) {165var s = parse([ '-s' ], { string: 's' }).s;166t.equal(s, '');167t.equal(typeof s, 'string');168169var str = parse([ '--str' ], { string: 'str' }).str;170t.equal(str, '');171t.equal(typeof str, 'string');172173var letters = parse([ '-art' ], {174string: [ 'a', 't' ]175});176177t.equal(letters.a, '');178t.equal(letters.r, true);179t.equal(letters.t, '');180181t.end();182});183184185test('slashBreak', function (t) {186t.same(187parse([ '-I/foo/bar/baz' ]),188{ I : '/foo/bar/baz', _ : [] }189);190t.same(191parse([ '-xyz/foo/bar/baz' ]),192{ x : true, y : true, z : '/foo/bar/baz', _ : [] }193);194t.end();195});196197test('alias', function (t) {198var argv = parse([ '-f', '11', '--zoom', '55' ], {199alias: { z: 'zoom' }200});201t.equal(argv.zoom, 55);202t.equal(argv.z, argv.zoom);203t.equal(argv.f, 11);204t.end();205});206207test('multiAlias', function (t) {208var argv = parse([ '-f', '11', '--zoom', '55' ], {209alias: { z: [ 'zm', 'zoom' ] }210});211t.equal(argv.zoom, 55);212t.equal(argv.z, argv.zoom);213t.equal(argv.z, argv.zm);214t.equal(argv.f, 11);215t.end();216});217218test('nested dotted objects', function (t) {219var argv = parse([220'--foo.bar', '3', '--foo.baz', '4',221'--foo.quux.quibble', '5', '--foo.quux.o_O',222'--beep.boop'223]);224225t.same(argv.foo, {226bar : 3,227baz : 4,228quux : {229quibble : 5,230o_O : true231}232});233t.same(argv.beep, { boop : true });234t.end();235});236237test('boolean and alias with chainable api', function (t) {238var aliased = [ '-h', 'derp' ];239var regular = [ '--herp', 'derp' ];240var opts = {241herp: { alias: 'h', boolean: true }242};243var aliasedArgv = parse(aliased, {244boolean: 'herp',245alias: { h: 'herp' }246});247var propertyArgv = parse(regular, {248boolean: 'herp',249alias: { h: 'herp' }250});251var expected = {252herp: true,253h: true,254'_': [ 'derp' ]255};256257t.same(aliasedArgv, expected);258t.same(propertyArgv, expected);259t.end();260});261262test('boolean and alias with options hash', function (t) {263var aliased = [ '-h', 'derp' ];264var regular = [ '--herp', 'derp' ];265var opts = {266alias: { 'h': 'herp' },267boolean: 'herp'268};269var aliasedArgv = parse(aliased, opts);270var propertyArgv = parse(regular, opts);271var expected = {272herp: true,273h: true,274'_': [ 'derp' ]275};276t.same(aliasedArgv, expected);277t.same(propertyArgv, expected);278t.end();279});280281test('boolean and alias using explicit true', function (t) {282var aliased = [ '-h', 'true' ];283var regular = [ '--herp', 'true' ];284var opts = {285alias: { h: 'herp' },286boolean: 'h'287};288var aliasedArgv = parse(aliased, opts);289var propertyArgv = parse(regular, opts);290var expected = {291herp: true,292h: true,293'_': [ ]294};295296t.same(aliasedArgv, expected);297t.same(propertyArgv, expected);298t.end();299});300301// regression, see https://github.com/substack/node-optimist/issues/71302test('boolean and --x=true', function(t) {303var parsed = parse(['--boool', '--other=true'], {304boolean: 'boool'305});306307t.same(parsed.boool, true);308t.same(parsed.other, 'true');309310parsed = parse(['--boool', '--other=false'], {311boolean: 'boool'312});313314t.same(parsed.boool, true);315t.same(parsed.other, 'false');316t.end();317});318319320