| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 | var nopt = require("../")  , test = require('tap').testtest("passing a string results in a string", function (t) {  var parsed = nopt({ key: String }, {}, ["--key", "myvalue"], 0)  t.same(parsed.key, "myvalue")  t.end()})// https://github.com/npm/nopt/issues/31test("Empty String results in empty string, not true", function (t) {  var parsed = nopt({ empty: String }, {}, ["--empty"], 0)  t.same(parsed.empty, "")  t.end()})test("~ path is resolved to $HOME", function (t) {  var path = require("path")  if (!process.env.HOME) process.env.HOME = "/tmp"  var parsed = nopt({key: path}, {}, ["--key=~/val"], 0)  t.same(parsed.key, path.resolve(process.env.HOME, "val"))  t.end()})// https://github.com/npm/nopt/issues/24test("Unknown options are not parsed as numbers", function (t) {    var parsed = nopt({"parse-me": Number}, null, ['--leave-as-is=1.20', '--parse-me=1.20'], 0)    t.equal(parsed['leave-as-is'], '1.20')    t.equal(parsed['parse-me'], 1.2)    t.end()});// https://github.com/npm/nopt/issues/48test("Check types based on name of type", function (t) {  var parsed = nopt({"parse-me": {name: "Number"}}, null, ['--parse-me=1.20'], 0)  t.equal(parsed['parse-me'], 1.2)  t.end()})test("Missing types are not parsed", function (t) {  var parsed = nopt({"parse-me": {}}, null, ['--parse-me=1.20'], 0)  //should only contain argv  t.equal(Object.keys(parsed).length, 1)  t.end()})test("Types passed without a name are not parsed", function (t) {  var parsed = nopt({"parse-me": {}}, {}, ['--parse-me=1.20'], 0)  //should only contain argv  t.equal(Object.keys(parsed).length, 1)  t.end()})test("other tests", function (t) {  var util = require("util")    , Stream = require("stream")    , path = require("path")    , url = require("url")    , shorthands =      { s : ["--loglevel", "silent"]      , d : ["--loglevel", "info"]      , dd : ["--loglevel", "verbose"]      , ddd : ["--loglevel", "silly"]      , noreg : ["--no-registry"]      , reg : ["--registry"]      , "no-reg" : ["--no-registry"]      , silent : ["--loglevel", "silent"]      , verbose : ["--loglevel", "verbose"]      , h : ["--usage"]      , H : ["--usage"]      , "?" : ["--usage"]      , help : ["--usage"]      , v : ["--version"]      , f : ["--force"]      , desc : ["--description"]      , "no-desc" : ["--no-description"]      , "local" : ["--no-global"]      , l : ["--long"]      , p : ["--parseable"]      , porcelain : ["--parseable"]      , g : ["--global"]      }    , types =      { aoa: Array      , nullstream: [null, Stream]      , date: Date      , str: String      , browser : String      , cache : path      , color : ["always", Boolean]      , depth : Number      , description : Boolean      , dev : Boolean      , editor : path      , force : Boolean      , global : Boolean      , globalconfig : path      , group : [String, Number]      , gzipbin : String      , logfd : [Number, Stream]      , loglevel : ["silent","win","error","warn","info","verbose","silly"]      , long : Boolean      , "node-version" : [false, String]      , npaturl : url      , npat : Boolean      , "onload-script" : [false, String]      , outfd : [Number, Stream]      , parseable : Boolean      , pre: Boolean      , prefix: path      , proxy : url      , "rebuild-bundle" : Boolean      , registry : url      , searchopts : String      , searchexclude: [null, String]      , shell : path      , t: [Array, String]      , tag : String      , tar : String      , tmp : path      , "unsafe-perm" : Boolean      , usage : Boolean      , user : String      , username : String      , userconfig : path      , version : Boolean      , viewer: path      , _exit : Boolean      , path: path      }  ; [["-v", {version:true}, []]    ,["---v", {version:true}, []]    ,["ls -s --no-reg connect -d",      {loglevel:"info",registry:null},["ls","connect"]]    ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]]    ,["ls --registry blargle", {}, ["ls"]]    ,["--no-registry", {registry:null}, []]    ,["--no-color true", {color:false}, []]    ,["--no-color false", {color:true}, []]    ,["--no-color", {color:false}, []]    ,["--color false", {color:false}, []]    ,["--color --logfd 7", {logfd:7,color:true}, []]    ,["--color=true", {color:true}, []]    ,["--logfd=10", {logfd:10}, []]    ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]]    ,["--tmp=tmp -tar=gtar",      {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]]    ,["--logfd x", {}, []]    ,["a -true -- -no-false", {true:true},["a","-no-false"]]    ,["a -no-false", {false:false},["a"]]    ,["a -no-no-true", {true:true}, ["a"]]    ,["a -no-no-no-false", {false:false}, ["a"]]    ,["---NO-no-No-no-no-no-nO-no-no"+      "-No-no-no-no-no-no-no-no-no"+      "-no-no-no-no-NO-NO-no-no-no-no-no-no"+      "-no-body-can-do-the-boogaloo-like-I-do"     ,{"body-can-do-the-boogaloo-like-I-do":false}, []]    ,["we are -no-strangers-to-love "+      "--you-know=the-rules --and=so-do-i "+      "---im-thinking-of=a-full-commitment "+      "--no-you-would-get-this-from-any-other-guy "+      "--no-gonna-give-you-up "+      "-no-gonna-let-you-down=true "+      "--no-no-gonna-run-around false "+      "--desert-you=false "+      "--make-you-cry false "+      "--no-tell-a-lie "+      "--no-no-and-hurt-you false"     ,{"strangers-to-love":false      ,"you-know":"the-rules"      ,"and":"so-do-i"      ,"you-would-get-this-from-any-other-guy":false      ,"gonna-give-you-up":false      ,"gonna-let-you-down":false      ,"gonna-run-around":false      ,"desert-you":false      ,"make-you-cry":false      ,"tell-a-lie":false      ,"and-hurt-you":false      },["we", "are"]]    ,["-t one -t two -t three"     ,{t: ["one", "two", "three"]}     ,[]]    ,["-t one -t null -t three four five null"     ,{t: ["one", "null", "three"]}     ,["four", "five", "null"]]    ,["-t foo"     ,{t:["foo"]}     ,[]]    ,["--no-t"     ,{t:["false"]}     ,[]]    ,["-no-no-t"     ,{t:["true"]}     ,[]]    ,["-aoa one -aoa null -aoa 100"     ,{aoa:["one", null, '100']}     ,[]]    ,["-str 100"     ,{str:"100"}     ,[]]    ,["--color always"     ,{color:"always"}     ,[]]    ,["--no-nullstream"     ,{nullstream:null}     ,[]]    ,["--nullstream false"     ,{nullstream:null}     ,[]]    ,["--notadate=2011-01-25"     ,{notadate: "2011-01-25"}     ,[]]    ,["--date 2011-01-25"     ,{date: new Date("2011-01-25")}     ,[]]    ,["-cl 1"     ,{config: true, length: 1}     ,[]     ,{config: Boolean, length: Number, clear: Boolean}     ,{c: "--config", l: "--length"}]    ,["--acount bla"     ,{"acount":true}     ,["bla"]     ,{account: Boolean, credentials: Boolean, options: String}     ,{a:"--account", c:"--credentials",o:"--options"}]    ,["--clear"     ,{clear:true}     ,[]     ,{clear:Boolean,con:Boolean,len:Boolean,exp:Boolean,add:Boolean,rep:Boolean}     ,{c:"--con",l:"--len",e:"--exp",a:"--add",r:"--rep"}]    ,["--file -"     ,{"file":"-"}     ,[]     ,{file:String}     ,{}]    ,["--file -"     ,{"file":true}     ,["-"]     ,{file:Boolean}     ,{}]    ,["--path"     ,{"path":null}     ,[]]    ,["--path ."     ,{"path":process.cwd()}     ,[]]    ].forEach(function (test) {      var argv = test[0].split(/\s+/)        , opts = test[1]        , rem = test[2]        , actual = nopt(test[3] || types, test[4] || shorthands, argv, 0)        , parsed = actual.argv      delete actual.argv      for (var i in opts) {        var e = JSON.stringify(opts[i])          , a = JSON.stringify(actual[i] === undefined ? null : actual[i])        if (e && typeof e === "object") {          t.deepEqual(e, a)        } else {          t.equal(e, a)        }      }      t.deepEqual(rem, parsed.remain)    })  t.end()})
 |