util: format as Error if instanceof Error
authorRod Vagg <rod@vagg.org>
Tue, 15 Oct 2013 01:26:18 +0000 (12:26 +1100)
committerBen Noordhuis <info@bnoordhuis.nl>
Tue, 15 Oct 2013 08:30:58 +0000 (10:30 +0200)
lib/util.js
test/simple/test-util-format.js
test/simple/test-util.js

index 9901a66a0ecc68c658fcb5b7739c0fb26188bc8e..b0bbdd4ae9f7a753b9416e9a27580fb93c0d2f14 100644 (file)
@@ -496,7 +496,8 @@ function isDate(d) {
 exports.isDate = isDate;
 
 function isError(e) {
-  return isObject(e) && objectToString(e) === '[object Error]';
+  return isObject(e) &&
+      (objectToString(e) === '[object Error]' || e instanceof Error);
 }
 exports.isError = isError;
 
index ee96744848a65cd9499fd9b9e4dc6707d813165f..1bea1bf211e08e0e42a95e046480ec7a96cd8263 100644 (file)
@@ -66,3 +66,13 @@ assert.equal(util.format('%%%s%%%%', 'hi'), '%hi%%');
   o.o = o;
   assert.equal(util.format('%j', o), '[Circular]');
 })();
+
+// Errors
+assert.equal(util.format(new Error('foo')), '[Error: foo]');
+function CustomError(msg) {
+  Error.call(this);
+  Object.defineProperty(this, 'message', { value: msg, enumerable: false });
+  Object.defineProperty(this, 'name', { value: 'CustomError', enumerable: false });
+}
+util.inherits(CustomError, Error);
+assert.equal(util.format(new CustomError('bar')), '[CustomError: bar]');
index 2acdbdb0cac9995083fe51bd32e8a77fdd08e7b8..4e75d512c25f460debb88065b5c8c4860fb23890 100644 (file)
@@ -68,7 +68,7 @@ assert.equal(true, util.isError(new (context('SyntaxError'))));
 assert.equal(false, util.isError({}));
 assert.equal(false, util.isError({ name: 'Error', message: '' }));
 assert.equal(false, util.isError([]));
-assert.equal(false, util.isError(Object.create(Error.prototype)));
+assert.equal(true, util.isError(Object.create(Error.prototype)));
 
 // isObject
 assert.ok(util.isObject({}) === true);