[Pkg-javascript-commits] [node-nopt] 01/06: Imported Upstream version 3.0.1

Jérémy Lal kapouer at moszumanska.debian.org
Tue Jul 29 06:35:29 UTC 2014


This is an automated email from the git hooks/post-receive script.

kapouer pushed a commit to branch master
in repository node-nopt.

commit 357cfaff67c0c87354179222778724ff373b9abe
Author: Jérémy Lal <kapouer at melix.org>
Date:   Tue Jul 29 04:27:16 2014 +0200

    Imported Upstream version 3.0.1
---
 README.md     |  11 ++-
 bin/nopt.js   |   3 +
 lib/nopt.js   | 222 +++------------------------------------------------
 package.json  |   7 +-
 test/basic.js | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 276 insertions(+), 218 deletions(-)

diff --git a/README.md b/README.md
index f290da8..5aba088 100644
--- a/README.md
+++ b/README.md
@@ -61,12 +61,12 @@ $ node my-program.js -fp --foofoo
 $ node my-program.js --foofoo -- -fp  # -- stops the flag parsing.
 { foo: "Mr. Foo", argv: { remain: ["-fp"] } }
 
-$ node my-program.js --blatzk 1000 -fp # unknown opts are ok.
-{ blatzk: 1000, flag: true, pick: true }
-
-$ node my-program.js --blatzk true -fp # but they need a value
+$ node my-program.js --blatzk -fp # unknown opts are ok.
 { blatzk: true, flag: true, pick: true }
 
+$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value
+{ blatzk: 1000, flag: true, pick: true }
+
 $ node my-program.js --no-blatzk -fp # unless they start with "no-"
 { blatzk: false, flag: true, pick: true }
 
@@ -116,8 +116,7 @@ considered valid values.  For instance, in the example above, the
 and any other value will be rejected.
 
 When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be
-interpreted as their JavaScript equivalents, and numeric values will be
-interpreted as a number.
+interpreted as their JavaScript equivalents.
 
 You can also mix types and values, or multiple types, in a list.  For
 instance `{ blah: [Number, null] }` would allow a value to be set to
diff --git a/bin/nopt.js b/bin/nopt.js
index 30e9fdb..3232d4c 100755
--- a/bin/nopt.js
+++ b/bin/nopt.js
@@ -1,5 +1,6 @@
 #!/usr/bin/env node
 var nopt = require("../lib/nopt")
+  , path = require("path")
   , types = { num: Number
             , bool: Boolean
             , help: Boolean
@@ -11,6 +12,7 @@ var nopt = require("../lib/nopt")
             , clear: Boolean
             , config: Boolean
             , length: Number
+            , file: path
             }
   , shorthands = { s: [ "--str", "astring" ]
                  , b: [ "--bool" ]
@@ -22,6 +24,7 @@ var nopt = require("../lib/nopt")
                  , n: [ "--num", "125" ]
                  , c: ["--config"]
                  , l: ["--length"]
+                 , f: ["--file"]
                  }
   , parsed = nopt( types
                  , shorthands
diff --git a/lib/nopt.js b/lib/nopt.js
index 20f3b5b..5309a00 100644
--- a/lib/nopt.js
+++ b/lib/nopt.js
@@ -50,7 +50,7 @@ function nopt (types, shorthands, args, slice) {
 function clean (data, types, typeDefs) {
   typeDefs = typeDefs || exports.typeDefs
   var remove = {}
-    , typeDefault = [false, true, null, String, Number, Array]
+    , typeDefault = [false, true, null, String, Array]
 
   Object.keys(data).forEach(function (k) {
     if (k === "argv") return
@@ -125,6 +125,14 @@ function validateString (data, k, val) {
 }
 
 function validatePath (data, k, val) {
+  if (val === true) return false
+  if (val === null) return true
+
+  val = String(val)
+  var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\//
+  if (val.match(homePattern) && process.env.HOME) {
+    val = path.resolve(process.env.HOME, val.substr(2))
+  }
   data[k] = path.resolve(String(val))
   return true
 }
@@ -327,6 +335,9 @@ function parse (args, data, remain, types, shorthands) {
         continue
       }
 
+      if (types[arg] === String && la === undefined)
+        la = ""
+
       if (la && la.match(/^-{2,}$/)) {
         la = undefined
         i --
@@ -401,212 +412,3 @@ function resolveShort (arg, shorthands, shortAbbr, abbrevs) {
 
   return shorthands[arg]
 }
-
-if (module === require.main) {
-var assert = require("assert")
-  , util = require("util")
-
-  , 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
-    }
-
-; [["-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}
-   ,{}]
-  ].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
-    console.log(util.inspect(actual, false, 2, true), parsed.remain)
-    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") {
-        assert.deepEqual(e, a)
-      } else {
-        assert.equal(e, a)
-      }
-    }
-    assert.deepEqual(rem, parsed.remain)
-  })
-}
diff --git a/package.json b/package.json
index adbd159..aa16198 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,11 @@
 {
   "name": "nopt",
-  "version": "2.1.2",
+  "version": "3.0.1",
   "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
   "author": "Isaac Z. Schlueter <i at izs.me> (http://blog.izs.me/)",
   "main": "lib/nopt.js",
   "scripts": {
-    "test": "node lib/nopt.js"
+    "test": "tap test/*.js"
   },
   "repository": "http://github.com/isaacs/nopt",
   "bin": "./bin/nopt.js",
@@ -15,5 +15,8 @@
   },
   "dependencies": {
     "abbrev": "1"
+  },
+  "devDependencies": {
+    "tap": "~0.4.8"
   }
 }
diff --git a/test/basic.js b/test/basic.js
new file mode 100644
index 0000000..2f9088c
--- /dev/null
+++ b/test/basic.js
@@ -0,0 +1,251 @@
+var nopt = require("../")
+  , test = require('tap').test
+
+
+test("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/31
+test("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/24
+test("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()
+});
+
+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()
+})

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-nopt.git



More information about the Pkg-javascript-commits mailing list