assert: throw when block is not a function
Currently, anything passed as the block argument to throws() and doesNotThrow() is interpreted as a function, which can lead to unexpected results. This commit checks the type of block, and throws a TypeError if it is not a function. Fixes: https://github.com/iojs/io.js/issues/275 PR-URL: https://github.com/iojs/io.js/pull/308 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
parent
7c4a50dd2f
commit
14dc9175eb
@ -283,6 +283,10 @@ function expectedException(actual, expected) {
|
|||||||
function _throws(shouldThrow, block, expected, message) {
|
function _throws(shouldThrow, block, expected, message) {
|
||||||
var actual;
|
var actual;
|
||||||
|
|
||||||
|
if (!util.isFunction(block)) {
|
||||||
|
throw new TypeError('block must be a function');
|
||||||
|
}
|
||||||
|
|
||||||
if (util.isString(expected)) {
|
if (util.isString(expected)) {
|
||||||
message = expected;
|
message = expected;
|
||||||
expected = null;
|
expected = null;
|
||||||
|
@ -267,8 +267,6 @@ try {
|
|||||||
var args = (function() { return arguments; })();
|
var args = (function() { return arguments; })();
|
||||||
a.throws(makeBlock(a.deepEqual, [], args));
|
a.throws(makeBlock(a.deepEqual, [], args));
|
||||||
a.throws(makeBlock(a.deepEqual, args, []));
|
a.throws(makeBlock(a.deepEqual, args, []));
|
||||||
|
|
||||||
console.log('All OK');
|
|
||||||
assert.ok(gotError);
|
assert.ok(gotError);
|
||||||
|
|
||||||
|
|
||||||
@ -329,3 +327,38 @@ try {
|
|||||||
assert.equal(e.generatedMessage, false,
|
assert.equal(e.generatedMessage, false,
|
||||||
'Message incorrectly marked as generated');
|
'Message incorrectly marked as generated');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verify that throws() and doesNotThrow() throw on non-function block
|
||||||
|
function testBlockTypeError(method, block) {
|
||||||
|
var threw = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
method(block);
|
||||||
|
threw = false;
|
||||||
|
} catch (e) {
|
||||||
|
assert.equal(e.toString(), 'TypeError: block must be a function');
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.ok(threw);
|
||||||
|
}
|
||||||
|
|
||||||
|
testBlockTypeError(assert.throws, 'string');
|
||||||
|
testBlockTypeError(assert.doesNotThrow, 'string');
|
||||||
|
testBlockTypeError(assert.throws, 1);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, 1);
|
||||||
|
testBlockTypeError(assert.throws, true);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, true);
|
||||||
|
testBlockTypeError(assert.throws, false);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, false);
|
||||||
|
testBlockTypeError(assert.throws, []);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, []);
|
||||||
|
testBlockTypeError(assert.throws, {});
|
||||||
|
testBlockTypeError(assert.doesNotThrow, {});
|
||||||
|
testBlockTypeError(assert.throws, /foo/);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, /foo/);
|
||||||
|
testBlockTypeError(assert.throws, null);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, null);
|
||||||
|
testBlockTypeError(assert.throws, undefined);
|
||||||
|
testBlockTypeError(assert.doesNotThrow, undefined);
|
||||||
|
|
||||||
|
console.log('All OK');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user