Bug 1337743 - Add assert.callable for checking callbacks; r?maja_zf draft
authorAndreas Tolfsen <ato@mozilla.com>
Fri, 10 Feb 2017 19:28:51 +0000
changeset 551794 a6889517f2174010336e20c0416c6598dddbd4e2
parent 551793 f45c706d4014b7ee3453861c4c8272db360fbe32
child 551795 29f3ebd212baa90eb75e0fb6b1af27711c32c99c
push id51152
push userbmo:ato@mozilla.com
push dateMon, 27 Mar 2017 12:36:48 +0000
reviewersmaja_zf
bugs1337743
milestone55.0a1
Bug 1337743 - Add assert.callable for checking callbacks; r?maja_zf MozReview-Commit-ID: 2bJbi4iEGlZ
testing/marionette/assert.js
testing/marionette/test_assert.js
--- a/testing/marionette/assert.js
+++ b/testing/marionette/assert.js
@@ -170,16 +170,35 @@ assert.defined = function (obj, msg = ""
  *     If |obj| is not a number.
  */
 assert.number = function (obj, msg = "") {
   msg = msg || error.pprint`Expected ${obj} to be finite number`;
   return assert.that(Number.isFinite, msg)(obj);
 };
 
 /**
+ * Asserts that |obj| is callable.
+ *
+ * @param {?} obj
+ *     Value to test.
+ * @param {string=} msg
+ *     Custom error message.
+ *
+ * @return {Function}
+ *     |obj| is returned unaltered.
+ *
+ * @throws {InvalidArgumentError}
+ *     If |obj| is not callable.
+ */
+assert.callable = function (obj, msg = "") {
+  msg = msg || error.pprint`${obj} is not callable`;
+  return assert.that(o => typeof o == "function", msg)(obj);
+};
+
+/**
  * Asserts that |obj| is an integer.
  *
  * @param {?} obj
  *     Value to test.
  * @param {string=} msg
  *     Custom error message.
  *
  * @return {number}
--- a/testing/marionette/test_assert.js
+++ b/testing/marionette/test_assert.js
@@ -46,16 +46,27 @@ add_test(function test_number() {
   assert.number(-1);
   assert.number(1.2);
   for (let i of ["foo", "1", {}, [], NaN, Infinity, undefined]) {
     Assert.throws(() => assert.number(i), InvalidArgumentError);
   }
   run_next_test();
 });
 
+add_test(function test_callable() {
+  assert.callable(function () {});
+  assert.callable(() => {});
+
+  for (let typ of [undefined, "", true, {}, []]) {
+    Assert.throws(() => assert.callable(typ), InvalidArgumentError);
+  }
+
+  run_next_test();
+});
+
 add_test(function test_integer() {
   assert.integer(1);
   assert.integer(0);
   assert.integer(-1);
   Assert.throws(() => assert.integer("foo"), InvalidArgumentError);
   Assert.throws(() => assert.integer(1.2), InvalidArgumentError);
 
   run_next_test();