From e7f6cd7f867ad02de59181d37267b9bb40bb3c5e Mon Sep 17 00:00:00 2001
From: Leonardo Balter <leonardo.balter@gmail.com>
Date: Mon, 14 Mar 2016 17:59:15 -0400
Subject: [PATCH] assert.throws fails if second argument is not a function

---
 harness/assert.js                     |  5 ++-
 test/harness/assert-throws-null-fn.js | 61 +++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 2 deletions(-)
 create mode 100644 test/harness/assert-throws-null-fn.js

diff --git a/harness/assert.js b/harness/assert.js
index 97d585fa92..1cf2c9a489 100644
--- a/harness/assert.js
+++ b/harness/assert.js
@@ -52,8 +52,9 @@ assert.notSameValue = function (actual, unexpected, message) {
 };
 
 assert.throws = function (expectedErrorConstructor, func, message) {
-    if (func === undefined) {
-        $ERROR('assert.throws requires two arguments: the error constructor and a function to run');
+    if (typeof func !== "function") {
+        $ERROR('assert.throws requires two arguments: the error constructor ' +
+            'and a function to run');
         return;
     }
     if (message === undefined) {
diff --git a/test/harness/assert-throws-null-fn.js b/test/harness/assert-throws-null-fn.js
new file mode 100644
index 0000000000..741751498a
--- /dev/null
+++ b/test/harness/assert-throws-null-fn.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+  Fails if second arg is not a function
+---*/
+
+var threw = false;
+
+try {
+  assert.throws(TypeError, null);
+} catch(err) {
+  threw = true;
+  if (err.constructor !== Test262Error) {
+    $ERROR(
+      'Expected a Test262Error, but a "' + err.constructor.name +
+      '" was thrown.'
+    );
+  }
+}
+
+if (threw === false) {
+  $ERROR('Expected a Test262Error, but no error was thrown.');
+}
+
+threw = false;
+
+try {
+  assert.throws(TypeError, {});
+} catch(err) {
+  threw = true;
+  if (err.constructor !== Test262Error) {
+    $ERROR(
+      'Expected a Test262Error, but a "' + err.constructor.name +
+      '" was thrown.'
+    );
+  }
+}
+
+if (threw === false) {
+  $ERROR('Expected a Test262Error, but no error was thrown.');
+}
+
+threw = false;
+
+try {
+  assert.throws(TypeError, "");
+} catch(err) {
+  threw = true;
+  if (err.constructor !== Test262Error) {
+    $ERROR(
+      'Expected a Test262Error, but a "' + err.constructor.name +
+      '" was thrown.'
+    );
+  }
+}
+
+if (threw === false) {
+  $ERROR('Expected a Test262Error, but no error was thrown.');
+}
-- 
GitLab