[Pkg-javascript-commits] [node-errno] 01/02: Imported Upstream version 0.1.1
Andrew Kelley
andrewrk-guest at moszumanska.debian.org
Mon Jun 30 19:00:33 UTC 2014
This is an automated email from the git hooks/post-receive script.
andrewrk-guest pushed a commit to branch master
in repository node-errno.
commit 723322ac3ced256fa16edccbcfde7af013241afd
Author: Andrew Kelley <superjoe30 at gmail.com>
Date: Mon Jun 30 18:57:17 2014 +0000
Imported Upstream version 0.1.1
---
.gitignore | 1 +
.jshintrc | 59 +++++++++
README.md | 141 ++++++++++++++++++++
build.js | 43 ++++++
cli.js | 20 +++
custom.js | 55 ++++++++
errno.js | 427 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
package.json | 31 +++++
test.js | 26 ++++
9 files changed, 803 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b512c09
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
\ No newline at end of file
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000..c8ef3ca
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,59 @@
+{
+ "predef": [ ]
+ , "bitwise": false
+ , "camelcase": false
+ , "curly": false
+ , "eqeqeq": false
+ , "forin": false
+ , "immed": false
+ , "latedef": false
+ , "noarg": true
+ , "noempty": true
+ , "nonew": true
+ , "plusplus": false
+ , "quotmark": true
+ , "regexp": false
+ , "undef": true
+ , "unused": true
+ , "strict": false
+ , "trailing": true
+ , "maxlen": 120
+ , "asi": true
+ , "boss": true
+ , "debug": true
+ , "eqnull": true
+ , "esnext": true
+ , "evil": true
+ , "expr": true
+ , "funcscope": false
+ , "globalstrict": false
+ , "iterator": false
+ , "lastsemic": true
+ , "laxbreak": true
+ , "laxcomma": true
+ , "loopfunc": true
+ , "multistr": false
+ , "onecase": false
+ , "proto": false
+ , "regexdash": false
+ , "scripturl": true
+ , "smarttabs": false
+ , "shadow": false
+ , "sub": true
+ , "supernew": false
+ , "validthis": true
+ , "browser": true
+ , "couch": false
+ , "devel": false
+ , "dojo": false
+ , "mootools": false
+ , "node": true
+ , "nonstandard": true
+ , "prototypejs": false
+ , "rhino": false
+ , "worker": true
+ , "wsh": false
+ , "nomen": false
+ , "onevar": false
+ , "passfail": false
+}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..52bd10d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,141 @@
+# node-errno
+
+Better [libuv](https://github.com/joyent/libuv)/[Node.js](http://nodejs.org) error handling & reporting. Available in npm as *errno*.
+
+* [errno exposed](#errnoexposed)
+* [Custom errors](#customerrors)
+
+<a name="errnoexposed"></a>
+## errno exposed
+
+Ever find yourself needing more details about Node.js errors? Me too, so *node-errno* contains the errno mappings direct from libuv so you can use them in your code.
+
+**By errno:**
+
+```js
+require('errno').errno[3]
+// → {
+// "errno": 3,
+// "code": "EACCES",
+// "description": "permission denied"
+// }
+```
+
+**By code:**
+
+```js
+require('errno').code.ENOTEMPTY
+// → {
+// "errno": 53,
+// "code": "ENOTEMPTY",
+// "description": "directory not empty"
+// }
+```
+
+**Make your errors more descriptive:**
+
+```js
+var errno = require('errno')
+
+function errmsg(err) {
+ var str = 'Error: '
+ // if it's a libuv error then get the description from errno
+ if (errno.errno[err.errno]) {
+ str += errno.errno[err.errno].description
+ } else {
+ str += err.message
+ }
+
+ // if it's a `fs` error then it'll have a 'path' property
+ if (err.path) {
+ str += ' [' + err.path + ']'
+ }
+ return str
+}
+
+var fs = require('fs')
+
+fs.readFile('thisisnotarealfile.txt', function (err, data) {
+ if (err)
+ return console.log(errmsg(err))
+})
+```
+
+**Use as a command line tool:**
+
+```
+~ $ errno 53
+{
+ "errno": 53,
+ "code": "ENOTEMPTY",
+ "description": "directory not empty"
+}
+~ $ errno EROFS
+{
+ "errno": 56,
+ "code": "EROFS",
+ "description": "read-only file system"
+}
+~ $ errno foo
+No such errno/code: "foo"
+```
+
+Supply no arguments for the full list. Error codes are processed case-insensitive.
+
+You will need to install with `npm install errno -g` if you want the `errno` command to be available without supplying a full path to the node_modules installation.
+
+<a name="customerrors"></a>
+## Custom errors
+
+Use `errno.custom.createError()` to create custom `Error` objects to throw around in your Node.js library. Create error heirachies so `instanceof` becomes a useful tool in tracking errors. Call-stack is correctly captured at the time you create an instance of the error object, plus a `cause` property will make available the original error object if you pass one in to the constructor.
+
+```js
+var errno = require('errno')
+var MyError = errno.custom.createError('MyError') // inherits from Error
+var SpecificError = errno.custom.createError('SpecificError', MyError) // inherits from MyError
+var OtherError = errno.custom.createError('OtherError', MyError)
+
+// use them!
+if (condition) throw new SpecificError('Eeek! Something bad happened')
+
+if (err) return callback(new OtherError(err))
+```
+
+Also available is a `errno.custom.FilesystemError` with in-built access to errno properties:
+
+```js
+fs.readFile('foo', function (err, data) {
+ if (err) return callback(new errno.custom.FilesystemError(err))
+ // do something else
+})
+```
+
+The resulting error object passed through the callback will have the following properties: `code`, `errno`, `path` and `message` will contain a descriptive human-readable message.
+
+## Contributors
+
+* [bahamas10](https://github.com/bahamas10) (Dave Eddy) - Added CLI
+
+## Copyright & Licence
+
+*Copyright (c) 2012 [Rod Vagg](https://github.com/rvagg) ([@rvagg](https://twitter.com/rvagg))*
+
+Made available under the MIT licence:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/build.js b/build.js
new file mode 100755
index 0000000..fce8926
--- /dev/null
+++ b/build.js
@@ -0,0 +1,43 @@
+#!/usr/bin/env node
+
+var request = require('request')
+ , fs = require('fs')
+
+ , uvheadloc = 'https://raw.github.com/joyent/libuv/master/include/uv.h'
+ , defreg = /^\s*XX\(\s*([\-\d]+),\s*([A-Z]+),\s*"([^"]*)"\s*\)\s*\\?$/
+
+
+request(uvheadloc, function (err, response) {
+ if (err)
+ throw err
+
+ var data, out
+
+ data = response.body
+ .split('\n')
+ .map(function (line) { return line.match(defreg) })
+ .filter(function (match) { return match })
+ .map(function (match) { return {
+ errno: parseInt(match[1], 10)
+ , code: match[2]
+ , description: match[3]
+ }})
+
+ out = 'var all = module.exports.all = ' + JSON.stringify(data, 0, 1) + '\n\n'
+
+ out += '\nmodule.exports.errno = {\n '
+ + data.map(function (e, i) {
+ return '\'' + e.errno + '\': all[' + i + ']'
+ }).join('\n , ')
+ + '\n}\n\n'
+
+ out += '\nmodule.exports.code = {\n '
+ + data.map(function (e, i) {
+ return '\'' + e.code + '\': all[' + i + ']'
+ }).join('\n , ')
+ + '\n}\n\n'
+
+ out += '\nmodule.exports.custom = require("./custom")(module.exports)\n'
+
+ fs.writeFile('errno.js', out)
+})
\ No newline at end of file
diff --git a/cli.js b/cli.js
new file mode 100755
index 0000000..f841771
--- /dev/null
+++ b/cli.js
@@ -0,0 +1,20 @@
+#!/usr/bin/env node
+
+var errno = require('./')
+ , arg = process.argv[2]
+ , data, code
+
+if (arg === undefined)
+ return console.log(JSON.stringify(errno.code, null, 2))
+
+if ((code = +arg) == arg)
+ data = errno.errno[code]
+else
+ data = errno.code[arg] || errno.code[arg.toUpperCase()]
+
+if (data)
+ console.log(JSON.stringify(data, null, 2))
+else {
+ console.error('No such errno/code: "' + arg + '"')
+ process.exit(1)
+}
\ No newline at end of file
diff --git a/custom.js b/custom.js
new file mode 100644
index 0000000..7be16c1
--- /dev/null
+++ b/custom.js
@@ -0,0 +1,55 @@
+var prr = require('prr')
+
+function init (type, message, cause) {
+ prr(this, {
+ type : type
+ , name : type
+ // can be passed just a 'cause'
+ , cause : typeof message != 'string' ? message : cause
+ , message : !!message && typeof message != 'string' ? message.message : message
+
+ }, 'ewr')
+}
+
+// generic prototype, not intended to be actually used - helpful for `instanceof`
+function CustomError (message, cause) {
+ Error.call(this)
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(this, arguments.callee)
+ init.call(this, 'CustomError', message, cause)
+}
+
+CustomError.prototype = new Error()
+
+function createError (errno, type, proto) {
+ var err = function (message, cause) {
+ init.call(this, type, message, cause)
+ //TODO: the specificity here is stupid, errno should be available everywhere
+ if (type == 'FilesystemError') {
+ this.code = this.cause.code
+ this.path = this.cause.path
+ this.errno = this.cause.errno
+ this.message =
+ (errno.errno[this.cause.errno]
+ ? errno.errno[this.cause.errno].description
+ : this.cause.message)
+ + (this.cause.path ? ' [' + this.cause.path + ']' : '')
+ }
+ Error.call(this)
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(this, arguments.callee)
+ }
+ err.prototype = !!proto ? new proto() : new CustomError()
+ return err
+}
+
+module.exports = function (errno) {
+ var ce = function (type, proto) {
+ return createError(errno, type, proto)
+ }
+ return {
+ CustomError : CustomError
+ , FilesystemError : ce('FilesystemError')
+ , createError : ce
+ }
+}
diff --git a/errno.js b/errno.js
new file mode 100644
index 0000000..8cd1646
--- /dev/null
+++ b/errno.js
@@ -0,0 +1,427 @@
+var all = module.exports.all = [
+ {
+ "errno": -1,
+ "code": "UNKNOWN",
+ "description": "unknown error"
+ },
+ {
+ "errno": 0,
+ "code": "OK",
+ "description": "success"
+ },
+ {
+ "errno": 1,
+ "code": "EOF",
+ "description": "end of file"
+ },
+ {
+ "errno": 2,
+ "code": "EADDRINFO",
+ "description": "getaddrinfo error"
+ },
+ {
+ "errno": 3,
+ "code": "EACCES",
+ "description": "permission denied"
+ },
+ {
+ "errno": 4,
+ "code": "EAGAIN",
+ "description": "resource temporarily unavailable"
+ },
+ {
+ "errno": 5,
+ "code": "EADDRINUSE",
+ "description": "address already in use"
+ },
+ {
+ "errno": 6,
+ "code": "EADDRNOTAVAIL",
+ "description": "address not available"
+ },
+ {
+ "errno": 7,
+ "code": "EAFNOSUPPORT",
+ "description": "address family not supported"
+ },
+ {
+ "errno": 8,
+ "code": "EALREADY",
+ "description": "connection already in progress"
+ },
+ {
+ "errno": 9,
+ "code": "EBADF",
+ "description": "bad file descriptor"
+ },
+ {
+ "errno": 10,
+ "code": "EBUSY",
+ "description": "resource busy or locked"
+ },
+ {
+ "errno": 11,
+ "code": "ECONNABORTED",
+ "description": "software caused connection abort"
+ },
+ {
+ "errno": 12,
+ "code": "ECONNREFUSED",
+ "description": "connection refused"
+ },
+ {
+ "errno": 13,
+ "code": "ECONNRESET",
+ "description": "connection reset by peer"
+ },
+ {
+ "errno": 14,
+ "code": "EDESTADDRREQ",
+ "description": "destination address required"
+ },
+ {
+ "errno": 15,
+ "code": "EFAULT",
+ "description": "bad address in system call argument"
+ },
+ {
+ "errno": 16,
+ "code": "EHOSTUNREACH",
+ "description": "host is unreachable"
+ },
+ {
+ "errno": 17,
+ "code": "EINTR",
+ "description": "interrupted system call"
+ },
+ {
+ "errno": 18,
+ "code": "EINVAL",
+ "description": "invalid argument"
+ },
+ {
+ "errno": 19,
+ "code": "EISCONN",
+ "description": "socket is already connected"
+ },
+ {
+ "errno": 20,
+ "code": "EMFILE",
+ "description": "too many open files"
+ },
+ {
+ "errno": 21,
+ "code": "EMSGSIZE",
+ "description": "message too long"
+ },
+ {
+ "errno": 22,
+ "code": "ENETDOWN",
+ "description": "network is down"
+ },
+ {
+ "errno": 23,
+ "code": "ENETUNREACH",
+ "description": "network is unreachable"
+ },
+ {
+ "errno": 24,
+ "code": "ENFILE",
+ "description": "file table overflow"
+ },
+ {
+ "errno": 25,
+ "code": "ENOBUFS",
+ "description": "no buffer space available"
+ },
+ {
+ "errno": 26,
+ "code": "ENOMEM",
+ "description": "not enough memory"
+ },
+ {
+ "errno": 27,
+ "code": "ENOTDIR",
+ "description": "not a directory"
+ },
+ {
+ "errno": 28,
+ "code": "EISDIR",
+ "description": "illegal operation on a directory"
+ },
+ {
+ "errno": 29,
+ "code": "ENONET",
+ "description": "machine is not on the network"
+ },
+ {
+ "errno": 31,
+ "code": "ENOTCONN",
+ "description": "socket is not connected"
+ },
+ {
+ "errno": 32,
+ "code": "ENOTSOCK",
+ "description": "socket operation on non-socket"
+ },
+ {
+ "errno": 33,
+ "code": "ENOTSUP",
+ "description": "operation not supported on socket"
+ },
+ {
+ "errno": 34,
+ "code": "ENOENT",
+ "description": "no such file or directory"
+ },
+ {
+ "errno": 35,
+ "code": "ENOSYS",
+ "description": "function not implemented"
+ },
+ {
+ "errno": 36,
+ "code": "EPIPE",
+ "description": "broken pipe"
+ },
+ {
+ "errno": 37,
+ "code": "EPROTO",
+ "description": "protocol error"
+ },
+ {
+ "errno": 38,
+ "code": "EPROTONOSUPPORT",
+ "description": "protocol not supported"
+ },
+ {
+ "errno": 39,
+ "code": "EPROTOTYPE",
+ "description": "protocol wrong type for socket"
+ },
+ {
+ "errno": 40,
+ "code": "ETIMEDOUT",
+ "description": "connection timed out"
+ },
+ {
+ "errno": 41,
+ "code": "ECHARSET",
+ "description": "invalid Unicode character"
+ },
+ {
+ "errno": 42,
+ "code": "EAIFAMNOSUPPORT",
+ "description": "address family for hostname not supported"
+ },
+ {
+ "errno": 44,
+ "code": "EAISERVICE",
+ "description": "servname not supported for ai_socktype"
+ },
+ {
+ "errno": 45,
+ "code": "EAISOCKTYPE",
+ "description": "ai_socktype not supported"
+ },
+ {
+ "errno": 46,
+ "code": "ESHUTDOWN",
+ "description": "cannot send after transport endpoint shutdown"
+ },
+ {
+ "errno": 47,
+ "code": "EEXIST",
+ "description": "file already exists"
+ },
+ {
+ "errno": 48,
+ "code": "ESRCH",
+ "description": "no such process"
+ },
+ {
+ "errno": 49,
+ "code": "ENAMETOOLONG",
+ "description": "name too long"
+ },
+ {
+ "errno": 50,
+ "code": "EPERM",
+ "description": "operation not permitted"
+ },
+ {
+ "errno": 51,
+ "code": "ELOOP",
+ "description": "too many symbolic links encountered"
+ },
+ {
+ "errno": 52,
+ "code": "EXDEV",
+ "description": "cross-device link not permitted"
+ },
+ {
+ "errno": 53,
+ "code": "ENOTEMPTY",
+ "description": "directory not empty"
+ },
+ {
+ "errno": 54,
+ "code": "ENOSPC",
+ "description": "no space left on device"
+ },
+ {
+ "errno": 55,
+ "code": "EIO",
+ "description": "i/o error"
+ },
+ {
+ "errno": 56,
+ "code": "EROFS",
+ "description": "read-only file system"
+ },
+ {
+ "errno": 57,
+ "code": "ENODEV",
+ "description": "no such device"
+ },
+ {
+ "errno": 58,
+ "code": "ESPIPE",
+ "description": "invalid seek"
+ },
+ {
+ "errno": 59,
+ "code": "ECANCELED",
+ "description": "operation canceled"
+ }
+]
+
+
+module.exports.errno = {
+ '-1': all[0]
+ , '0': all[1]
+ , '1': all[2]
+ , '2': all[3]
+ , '3': all[4]
+ , '4': all[5]
+ , '5': all[6]
+ , '6': all[7]
+ , '7': all[8]
+ , '8': all[9]
+ , '9': all[10]
+ , '10': all[11]
+ , '11': all[12]
+ , '12': all[13]
+ , '13': all[14]
+ , '14': all[15]
+ , '15': all[16]
+ , '16': all[17]
+ , '17': all[18]
+ , '18': all[19]
+ , '19': all[20]
+ , '20': all[21]
+ , '21': all[22]
+ , '22': all[23]
+ , '23': all[24]
+ , '24': all[25]
+ , '25': all[26]
+ , '26': all[27]
+ , '27': all[28]
+ , '28': all[29]
+ , '29': all[30]
+ , '31': all[31]
+ , '32': all[32]
+ , '33': all[33]
+ , '34': all[34]
+ , '35': all[35]
+ , '36': all[36]
+ , '37': all[37]
+ , '38': all[38]
+ , '39': all[39]
+ , '40': all[40]
+ , '41': all[41]
+ , '42': all[42]
+ , '44': all[43]
+ , '45': all[44]
+ , '46': all[45]
+ , '47': all[46]
+ , '48': all[47]
+ , '49': all[48]
+ , '50': all[49]
+ , '51': all[50]
+ , '52': all[51]
+ , '53': all[52]
+ , '54': all[53]
+ , '55': all[54]
+ , '56': all[55]
+ , '57': all[56]
+ , '58': all[57]
+ , '59': all[58]
+}
+
+
+module.exports.code = {
+ 'UNKNOWN': all[0]
+ , 'OK': all[1]
+ , 'EOF': all[2]
+ , 'EADDRINFO': all[3]
+ , 'EACCES': all[4]
+ , 'EAGAIN': all[5]
+ , 'EADDRINUSE': all[6]
+ , 'EADDRNOTAVAIL': all[7]
+ , 'EAFNOSUPPORT': all[8]
+ , 'EALREADY': all[9]
+ , 'EBADF': all[10]
+ , 'EBUSY': all[11]
+ , 'ECONNABORTED': all[12]
+ , 'ECONNREFUSED': all[13]
+ , 'ECONNRESET': all[14]
+ , 'EDESTADDRREQ': all[15]
+ , 'EFAULT': all[16]
+ , 'EHOSTUNREACH': all[17]
+ , 'EINTR': all[18]
+ , 'EINVAL': all[19]
+ , 'EISCONN': all[20]
+ , 'EMFILE': all[21]
+ , 'EMSGSIZE': all[22]
+ , 'ENETDOWN': all[23]
+ , 'ENETUNREACH': all[24]
+ , 'ENFILE': all[25]
+ , 'ENOBUFS': all[26]
+ , 'ENOMEM': all[27]
+ , 'ENOTDIR': all[28]
+ , 'EISDIR': all[29]
+ , 'ENONET': all[30]
+ , 'ENOTCONN': all[31]
+ , 'ENOTSOCK': all[32]
+ , 'ENOTSUP': all[33]
+ , 'ENOENT': all[34]
+ , 'ENOSYS': all[35]
+ , 'EPIPE': all[36]
+ , 'EPROTO': all[37]
+ , 'EPROTONOSUPPORT': all[38]
+ , 'EPROTOTYPE': all[39]
+ , 'ETIMEDOUT': all[40]
+ , 'ECHARSET': all[41]
+ , 'EAIFAMNOSUPPORT': all[42]
+ , 'EAISERVICE': all[43]
+ , 'EAISOCKTYPE': all[44]
+ , 'ESHUTDOWN': all[45]
+ , 'EEXIST': all[46]
+ , 'ESRCH': all[47]
+ , 'ENAMETOOLONG': all[48]
+ , 'EPERM': all[49]
+ , 'ELOOP': all[50]
+ , 'EXDEV': all[51]
+ , 'ENOTEMPTY': all[52]
+ , 'ENOSPC': all[53]
+ , 'EIO': all[54]
+ , 'EROFS': all[55]
+ , 'ENODEV': all[56]
+ , 'ESPIPE': all[57]
+ , 'ECANCELED': all[58]
+}
+
+
+module.exports.custom = require("./custom")(module.exports)
+module.exports.create = module.exports.custom.createError
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..be656b9
--- /dev/null
+++ b/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "errno",
+ "authors": [
+ "Rod Vagg @rvagg <rod at vagg.org> (https://github.com/rvagg)"
+ ],
+ "description": "libuv errno details exposed",
+ "keywords": [
+ "errors",
+ "errno",
+ "libuv"
+ ],
+ "version": "0.1.1",
+ "main": "errno.js",
+ "dependencies": {
+ "prr": "~0.0.0"
+ },
+ "bin": {
+ "errno": "./cli.js"
+ },
+ "devDependencies": {
+ "request": "*"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/rvagg/node-errno.git"
+ },
+ "license": "MIT",
+ "scripts": {
+ "test": "node ./test.js"
+ }
+}
diff --git a/test.js b/test.js
new file mode 100755
index 0000000..818321d
--- /dev/null
+++ b/test.js
@@ -0,0 +1,26 @@
+#!/usr/bin/env node
+
+var assert = require('assert')
+ , errno = require('./')
+
+assert(errno.all, 'errno.all not found')
+assert(errno.errno, 'errno.errno not found')
+assert(errno.code, 'errno.code not found')
+
+assert(errno.all.length === 59, 'found ' + errno.all.length + ', expected 59')
+
+assert(errno.errno['-1'] === errno.all[0], 'errno -1 not first element')
+
+assert(errno.code['UNKNOWN'] === errno.all[0], 'code UNKNOWN not first element')
+
+assert(errno.errno[1] === errno.all[2], 'errno 1 not third element')
+
+assert(errno.code['EOF'] === errno.all[2], 'code EOF not third element')
+
+var Cust = errno.create('FooNotBarError')
+var cust = new Cust('foo is not bar')
+
+assert(cust.name == 'FooNotBarError', 'correct custom name')
+assert(cust.type == 'FooNotBarError', 'correct custom type')
+assert(cust.message == 'foo is not bar', 'correct custom message')
+assert(!cust.cause, 'no cause')
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-errno.git
More information about the Pkg-javascript-commits
mailing list