Bug 1337743 - Add assert.callable for checking callbacks; r?maja_zf
MozReview-Commit-ID: 2bJbi4iEGlZ
--- 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();