tools: add assert.doesNotThrow eslint rule

Prohibit the usage of `assert.doesNotThrow()`.

PR-URL: https://github.com/nodejs/node/pull/18669
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
Ruben Bridgewater 2018-02-12 12:25:04 +01:00
parent 644fdd60d4
commit 15bb8437fd
No known key found for this signature in database
GPG Key ID: F07496B3EB3C1762
4 changed files with 14 additions and 9 deletions

View File

@ -135,8 +135,11 @@ rules:
no-mixed-spaces-and-tabs: error no-mixed-spaces-and-tabs: error
no-multiple-empty-lines: [error, {max: 2, maxEOF: 0, maxBOF: 0}] no-multiple-empty-lines: [error, {max: 2, maxEOF: 0, maxBOF: 0}]
no-restricted-syntax: [error, { no-restricted-syntax: [error, {
selector: "CallExpression[callee.object.name='assert'][callee.property.name='doesNotThrow']",
message: "Please replace `assert.doesNotThrow()` and add a comment next to the code instead."
}, {
selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.1.type='Literal']:not([arguments.1.regex])", selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.1.type='Literal']:not([arguments.1.regex])",
message: "use a regular expression for second argument of assert.throws()" message: "Use a regular expression for second argument of assert.throws()"
}, { }, {
selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.length<2]", selector: "CallExpression[callee.object.name='assert'][callee.property.name='throws'][arguments.length<2]",
message: "assert.throws() must be invoked with at least two arguments." message: "assert.throws() must be invoked with at least two arguments."

View File

@ -26,6 +26,7 @@ function main({ n, method }) {
case 'doesNotThrow': case 'doesNotThrow':
bench.start(); bench.start();
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-syntax
assert.doesNotThrow(doesNotThrow); assert.doesNotThrow(doesNotThrow);
} }
bench.end(n); bench.end(n);

View File

@ -341,6 +341,7 @@ to the caller.
The following, for instance, will throw the [`TypeError`][] because there is no The following, for instance, will throw the [`TypeError`][] because there is no
matching error type in the assertion: matching error type in the assertion:
<!-- eslint-disable no-restricted-syntax -->
```js ```js
assert.doesNotThrow( assert.doesNotThrow(
() => { () => {
@ -353,6 +354,7 @@ assert.doesNotThrow(
However, the following will result in an `AssertionError` with the message However, the following will result in an `AssertionError` with the message
'Got unwanted exception (TypeError)..': 'Got unwanted exception (TypeError)..':
<!-- eslint-disable no-restricted-syntax -->
```js ```js
assert.doesNotThrow( assert.doesNotThrow(
() => { () => {
@ -366,6 +368,7 @@ If an `AssertionError` is thrown and a value is provided for the `message`
parameter, the value of `message` will be appended to the `AssertionError` parameter, the value of `message` will be appended to the `AssertionError`
message: message:
<!-- eslint-disable no-restricted-syntax -->
```js ```js
assert.doesNotThrow( assert.doesNotThrow(
() => { () => {

View File

@ -121,7 +121,7 @@ assert.throws(() => thrower(TypeError));
} }
common.expectsError( common.expectsError(
() => assert.doesNotThrow(() => thrower(Error), 'user message'), () => a.doesNotThrow(() => thrower(Error), 'user message'),
{ {
type: a.AssertionError, type: a.AssertionError,
code: 'ERR_ASSERTION', code: 'ERR_ASSERTION',
@ -131,7 +131,7 @@ common.expectsError(
); );
common.expectsError( common.expectsError(
() => assert.doesNotThrow(() => thrower(Error), 'user message'), () => a.doesNotThrow(() => thrower(Error), 'user message'),
{ {
code: 'ERR_ASSERTION', code: 'ERR_ASSERTION',
message: /Got unwanted exception: user message\n\[object Object\]/ message: /Got unwanted exception: user message\n\[object Object\]/
@ -139,7 +139,7 @@ common.expectsError(
); );
common.expectsError( common.expectsError(
() => assert.doesNotThrow(() => thrower(Error)), () => a.doesNotThrow(() => thrower(Error)),
{ {
code: 'ERR_ASSERTION', code: 'ERR_ASSERTION',
message: /Got unwanted exception\.\n\[object Object\]/ message: /Got unwanted exception\.\n\[object Object\]/
@ -292,7 +292,7 @@ try {
// Verify AssertionError is the result from doesNotThrow with custom Error. // Verify AssertionError is the result from doesNotThrow with custom Error.
try { try {
assert.doesNotThrow(() => { a.doesNotThrow(() => {
throw new TypeError('wrong type'); throw new TypeError('wrong type');
}, TypeError, rangeError); }, TypeError, rangeError);
} catch (e) { } catch (e) {
@ -760,7 +760,6 @@ common.expectsError(
errObj.code = '404'; errObj.code = '404';
common.expectsError( common.expectsError(
// eslint-disable-next-line no-restricted-syntax
() => assert.throws(errFn, errObj), () => assert.throws(errFn, errObj),
{ {
code: 'ERR_ASSERTION', code: 'ERR_ASSERTION',
@ -772,7 +771,6 @@ common.expectsError(
errObj.code = 404; errObj.code = 404;
errObj.foo = 'bar'; errObj.foo = 'bar';
common.expectsError( common.expectsError(
// eslint-disable-next-line no-restricted-syntax
() => assert.throws(errFn, errObj), () => assert.throws(errFn, errObj),
{ {
code: 'ERR_ASSERTION', code: 'ERR_ASSERTION',
@ -791,7 +789,7 @@ common.expectsError(
); );
common.expectsError( common.expectsError(
() => assert.doesNotThrow(() => { throw new Error(); }, { foo: 'bar' }), () => a.doesNotThrow(() => { throw new Error(); }, { foo: 'bar' }),
{ {
type: TypeError, type: TypeError,
code: 'ERR_INVALID_ARG_TYPE', code: 'ERR_INVALID_ARG_TYPE',
@ -822,7 +820,7 @@ common.expectsError(
assert.throws(() => { throw undefined; }, /undefined/); assert.throws(() => { throw undefined; }, /undefined/);
common.expectsError( common.expectsError(
// eslint-disable-next-line no-throw-literal // eslint-disable-next-line no-throw-literal
() => assert.doesNotThrow(() => { throw undefined; }), () => a.doesNotThrow(() => { throw undefined; }),
{ {
type: assert.AssertionError, type: assert.AssertionError,
code: 'ERR_ASSERTION', code: 'ERR_ASSERTION',