aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/.eslintrc.yaml1
-rw-r--r--test/parallel/test-eslint-prefer-common-expectserror.js27
-rw-r--r--tools/eslint-rules/prefer-common-expectserror.js21
3 files changed, 49 insertions, 0 deletions
diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml
index aa320996aa..7a5d002e1b 100644
--- a/test/.eslintrc.yaml
+++ b/test/.eslintrc.yaml
@@ -10,6 +10,7 @@ rules:
# Custom rules in tools/eslint-rules
prefer-assert-iferror: error
prefer-assert-methods: error
+ prefer-common-expectserror: error
prefer-common-mustnotcall: error
crypto-check: error
inspector-check: error
diff --git a/test/parallel/test-eslint-prefer-common-expectserror.js b/test/parallel/test-eslint-prefer-common-expectserror.js
new file mode 100644
index 0000000000..16ce66bc24
--- /dev/null
+++ b/test/parallel/test-eslint-prefer-common-expectserror.js
@@ -0,0 +1,27 @@
+'use strict';
+
+require('../common');
+
+const RuleTester = require('../../tools/eslint').RuleTester;
+const rule = require('../../tools/eslint-rules/prefer-common-expectserror');
+
+const message = 'Please use common.expectsError(fn, err) instead of ' +
+ 'assert.throws(fn, common.expectsError(err)).';
+
+new RuleTester().run('prefer-common-expectserror', rule, {
+ valid: [
+ 'assert.throws(fn, /[a-z]/)',
+ 'assert.throws(function () {}, function() {})',
+ 'common.expectsError(function() {}, err)'
+ ],
+ invalid: [
+ {
+ code: 'assert.throws(function() {}, common.expectsError(err))',
+ errors: [{ message }]
+ },
+ {
+ code: 'assert.throws(fn, common.expectsError(err))',
+ errors: [{ message }]
+ }
+ ]
+});
diff --git a/tools/eslint-rules/prefer-common-expectserror.js b/tools/eslint-rules/prefer-common-expectserror.js
new file mode 100644
index 0000000000..f33241697a
--- /dev/null
+++ b/tools/eslint-rules/prefer-common-expectserror.js
@@ -0,0 +1,21 @@
+'use strict';
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+const msg = 'Please use common.expectsError(fn, err) instead of ' +
+ 'assert.throws(fn, common.expectsError(err)).';
+
+const astSelector =
+ 'CallExpression[arguments.length=2]' +
+ '[callee.object.name="assert"]' +
+ '[callee.property.name="throws"]' +
+ '[arguments.1.callee.object.name="common"]' +
+ '[arguments.1.callee.property.name="expectsError"]';
+
+module.exports = function(context) {
+ return {
+ [astSelector]: (node) => context.report(node, msg)
+ };
+};