fix assert.throws
authorOleg Slobodskoi <oleg008@gmail.com>
Tue, 21 Dec 2010 17:42:52 +0000 (18:42 +0100)
committerRyan Dahl <ry@tinyclouds.org>
Tue, 21 Dec 2010 20:41:57 +0000 (12:41 -0800)
doc/api/assert.markdown
lib/assert.js
test/simple/test-assert.js

index 24685eb..a0607e2 100644 (file)
@@ -65,8 +65,8 @@ Custom error validation:
         throw new Error("Wrong value");
       },
       function(err) {
-        if ( !(err instanceof Error) || !/value/.test(err) ) {
-          return false;
+        if ( (err instanceof Error) && /value/.test(err) ) {
+          return true;
         }
       },
       "unexpected error"
index 3b18f05..b46f28b 100644 (file)
@@ -246,13 +246,14 @@ function expectedException(actual, expected) {
   }
 
   if (expected instanceof RegExp) {
-    if (expected.test(actual)) {
-      return true;
-    }
-  } else if (actual instanceof expected ||
-             expected.call({}, actual) !== false) {
+    return expected.test(actual);
+  } else if (actual instanceof expected) {
+    return true;
+  } else if ( expected.call({}, actual) === true ) {
     return true;
   }
+
+  return false;
 }
 
 function _throws(shouldThrow, block, expected, message) {
index 4c32840..e2aa645 100644 (file)
@@ -165,12 +165,26 @@ assert.throws(function() {assert.ifError(new Error('test error'))});
 assert.doesNotThrow(function() {assert.ifError(null)});
 assert.doesNotThrow(function() {assert.ifError()});
 
+// make sure that validating using constructor really works
+threw = false;
+try {
+  assert.throws(
+    function() {
+      throw {};
+    },
+    Array
+  );
+} catch(e) {
+  threw = true;
+}
+assert.ok(threw, "wrong constructor validation");
+
 // use a RegExp to validate error message
 a.throws(makeBlock(thrower, TypeError), /test/);
 
 // use a fn to validate error object
 a.throws(makeBlock(thrower, TypeError), function(err) {
-  if (!(err instanceof TypeError) || !/test/.test(err)) {
-    return false;
+  if ( (err instanceof TypeError) && /test/.test(err)) {
+    return true;
   }
 });