Skip to content

Commit

Permalink
test: add optional throw fn to expectsError
Browse files Browse the repository at this point in the history
PR-URL: nodejs#14089
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Refael Ackermann <refack@gmail.com>
  • Loading branch information
BridgeAR authored and refack committed Jul 8, 2017
1 parent 44483b6 commit d6fece1
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 55 deletions.
5 changes: 4 additions & 1 deletion test/common/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ Platform normalizes the `dd` command

Check if there is more than 1gb of total memory.

### expectsError(settings)
### expectsError([fn, ]settings)
* `fn` [&lt;Function>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)
* `settings` [&lt;Object>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
with the following optional properties:
* `code` [&lt;String>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type)
Expand All @@ -66,6 +67,8 @@ Check if there is more than 1gb of total memory.
* return function suitable for use as a validation function passed as the second
argument to `assert.throws()`

If `fn` is provided, it will be passed to `assert.throws` as first argument.

The expected error should be [subclassed by the `internal/errors` module](https://github.com/nodejs/node/blob/master/doc/guides/using-internal-errors.md#api).

### expectWarning(name, expected)
Expand Down
16 changes: 13 additions & 3 deletions test/common/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -702,8 +702,13 @@ Object.defineProperty(exports, 'hasSmallICU', {
});

// Useful for testing expected internal/error objects
exports.expectsError = function expectsError({code, type, message}) {
return function(error) {
exports.expectsError = function expectsError(fn, options) {
if (typeof fn !== 'function') {
options = fn;
fn = undefined;
}
const { code, type, message } = options;
function innerFn(error) {
assert.strictEqual(error.code, code);
if (type !== undefined) {
assert(error instanceof type,
Expand All @@ -716,7 +721,12 @@ exports.expectsError = function expectsError({code, type, message}) {
assert.strictEqual(error.message, message);
}
return true;
};
}
if (fn) {
assert.throws(fn, innerFn);
return;
}
return innerFn;
};

exports.skipIfInspectorDisabled = function skipIfInspectorDisabled() {
Expand Down
12 changes: 6 additions & 6 deletions test/parallel/test-assert-deep.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,12 @@ for (const a of similar) {
}
}

assert.throws(
() => { assert.deepEqual(new Set([{a: 0}]), new Set([{a: 1}])); },
common.expectsError({
code: 'ERR_ASSERTION',
message: /^Set { { a: 0 } } deepEqual Set { { a: 1 } }$/
}));
common.expectsError(() => {
assert.deepEqual(new Set([{a: 0}]), new Set([{a: 1}]));
}, {
code: 'ERR_ASSERTION',
message: /^Set { { a: 0 } } deepEqual Set { { a: 1 } }$/
});

function assertDeepAndStrictEqual(a, b) {
assert.deepEqual(a, b);
Expand Down
85 changes: 40 additions & 45 deletions test/parallel/test-assert-fail.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,57 +17,52 @@ assert.throws(
);

// One arg = message
assert.throws(
() => { assert.fail('custom message'); },
common.expectsError({
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: 'custom message',
operator: undefined,
actual: undefined,
expected: undefined
})
);
common.expectsError(() => {
assert.fail('custom message');
}, {
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: 'custom message',
operator: undefined,
actual: undefined,
expected: undefined
});

// Two args only, operator defaults to '!='
assert.throws(
() => { assert.fail('first', 'second'); },
common.expectsError({
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: '\'first\' != \'second\'',
operator: '!=',
actual: 'first',
expected: 'second'

})
);
common.expectsError(() => {
assert.fail('first', 'second');
}, {
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: '\'first\' != \'second\'',
operator: '!=',
actual: 'first',
expected: 'second'
});

// Three args
assert.throws(
() => { assert.fail('ignored', 'ignored', 'another custom message'); },
common.expectsError({
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: 'another custom message',
operator: undefined,
actual: 'ignored',
expected: 'ignored'
})
);
common.expectsError(() => {
assert.fail('ignored', 'ignored', 'another custom message');
}, {
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: 'another custom message',
operator: undefined,
actual: 'ignored',
expected: 'ignored'
});

// No third arg (but a fourth arg)
assert.throws(
() => { assert.fail('first', 'second', undefined, 'operator'); },
common.expectsError({
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: '\'first\' operator \'second\'',
operator: 'operator',
actual: 'first',
expected: 'second'
})
);
common.expectsError(() => {
assert.fail('first', 'second', undefined, 'operator');
}, {
code: 'ERR_ASSERTION',
type: assert.AssertionError,
message: '\'first\' operator \'second\'',
operator: 'operator',
actual: 'first',
expected: 'second'
});

// The stackFrameFunction should exclude the foo frame
assert.throws(
Expand Down

0 comments on commit d6fece1

Please sign in to comment.