diff --git a/package.json b/package.json index ef9b9608c6..00a121fa80 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "ava": "*", "coveralls": "^2.11.9", "eslint": "^2.7.0", + "eslint-ava-rule-tester": "^0.1.1", "nyc": "^6.4.0", "pify": "^2.3.0", "xo": "*" diff --git a/test/catch-error-name.js b/test/catch-error-name.js index 3b1709f191..54e2c15d34 100644 --- a/test/catch-error-name.js +++ b/test/catch-error-name.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/catch-error-name'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -16,44 +16,42 @@ function testCase(code, name, error) { }; } -test(() => { - ruleTester.run('catch-error-name', rule, { - valid: [ - testCase('try {} catch (err) {}'), - testCase('try {} catch (error) {}', 'error'), - testCase('try {} catch (outerError) { try {} catch (innerError) {} }'), - testCase('obj.catch(err => {})'), - testCase('obj.catch(() => {})'), - testCase('obj.catch(error => {})', 'error'), - testCase('obj.catch(outerError => { return obj2.catch(innerError => {}) })'), - testCase('obj.catch(function (err) {})'), - testCase('obj.catch(function () {})'), - testCase('obj.catch(function (error) {})', 'error'), - testCase('obj.catch(function (outerError) { return obj2.catch(function (innerError) {}) })'), - testCase('obj.catch()'), - testCase('foo(function (err) {})'), - testCase('foo().then(function (err) {})'), - testCase('foo().catch(function (err) {})') - ], - invalid: [ - testCase('try {} catch (error) {}', null, true), - testCase('try {} catch (err) {}', 'error', true), - testCase('try {} catch (outerError) {}', null, true), - testCase('try {} catch (innerError) {}', null, true), - testCase('obj.catch(error => {})', null, true), - testCase('obj.catch(err => {})', 'error', true), - testCase('obj.catch(function (error) {})', null, true), - testCase('obj.catch(function (err) {})', 'error', true), - { - code: ` - obj.catch(error => {}); - obj.catch(error => {}); - `, - errors: [ - {ruleId: 'catch-error-name'}, - {ruleId: 'catch-error-name'} - ] - } - ] - }); +ruleTester.run('catch-error-name', rule, { + valid: [ + testCase('try {} catch (err) {}'), + testCase('try {} catch (error) {}', 'error'), + testCase('try {} catch (outerError) { try {} catch (innerError) {} }'), + testCase('obj.catch(err => {})'), + testCase('obj.catch(() => {})'), + testCase('obj.catch(error => {})', 'error'), + testCase('obj.catch(outerError => { return obj2.catch(innerError => {}) })'), + testCase('obj.catch(function (err) {})'), + testCase('obj.catch(function () {})'), + testCase('obj.catch(function (error) {})', 'error'), + testCase('obj.catch(function (outerError) { return obj2.catch(function (innerError) {}) })'), + testCase('obj.catch()'), + testCase('foo(function (err) {})'), + testCase('foo().then(function (err) {})'), + testCase('foo().catch(function (err) {})') + ], + invalid: [ + testCase('try {} catch (error) {}', null, true), + testCase('try {} catch (err) {}', 'error', true), + testCase('try {} catch (outerError) {}', null, true), + testCase('try {} catch (innerError) {}', null, true), + testCase('obj.catch(error => {})', null, true), + testCase('obj.catch(err => {})', 'error', true), + testCase('obj.catch(function (error) {})', null, true), + testCase('obj.catch(function (err) {})', 'error', true), + { + code: ` + obj.catch(error => {}); + obj.catch(error => {}); + `, + errors: [ + {ruleId: 'catch-error-name'}, + {ruleId: 'catch-error-name'} + ] + } + ] }); diff --git a/test/filename-case.js b/test/filename-case.js index 5857acb581..0252c50c22 100644 --- a/test/filename-case.js +++ b/test/filename-case.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/filename-case'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -20,141 +20,139 @@ function testCase(filename, chosenCase, errorMessage) { }; } -test(() => { - ruleTester.run('filename-case', rule, { - valid: [ - testCase('src/foo/bar.js', 'camelCase'), - testCase('src/foo/fooBar.js', 'camelCase'), - testCase('src/foo/bar.test.js', 'camelCase'), - testCase('src/foo/fooBar.test.js', 'camelCase'), - testCase('src/foo/fooBar.testUtils.js', 'camelCase'), - testCase('src/foo/foo.js', 'snakeCase'), - testCase('src/foo/foo_bar.js', 'snakeCase'), - testCase('src/foo/foo.test.js', 'snakeCase'), - testCase('src/foo/foo_bar.test.js', 'snakeCase'), - testCase('src/foo/foo_bar.test_utils.js', 'snakeCase'), - testCase('src/foo/foo.js', 'kebabCase'), - testCase('src/foo/foo-bar.js', 'kebabCase'), - testCase('src/foo/foo.test.js', 'kebabCase'), - testCase('src/foo/foo-bar.test.js', 'kebabCase'), - testCase('src/foo/foo-bar.test-utils.js', 'kebabCase'), - testCase('src/foo/Foo.js', 'pascalCase'), - testCase('src/foo/FooBar.js', 'pascalCase'), - testCase('src/foo/Foo.Test.js', 'pascalCase'), - testCase('src/foo/FooBar.Test.js', 'pascalCase'), - testCase('src/foo/FooBar.TestUtils.js', 'pascalCase'), - testCase('spec/iss47Spec.js', 'camelCase'), - testCase('spec/iss47Spec100.js', 'camelCase'), - testCase('spec/i18n.js', 'camelCase'), - testCase('spec/iss47-spec.js', 'kebabCase'), - testCase('spec/iss-47-spec.js', 'kebabCase'), - testCase('spec/iss47-100spec.js', 'kebabCase'), - testCase('spec/i18n.js', 'kebabCase'), - testCase('spec/iss47_spec.js', 'snakeCase'), - testCase('spec/iss_47_spec.js', 'snakeCase'), - testCase('spec/iss47_100spec.js', 'snakeCase'), - testCase('spec/i18n.js', 'snakeCase'), - testCase('spec/Iss47Spec.js', 'pascalCase'), - testCase('spec/Iss47.100Spec.js', 'pascalCase'), - testCase('spec/I18n.js', 'pascalCase'), - testCase('', 'camelCase'), - testCase('', 'snakeCase'), - testCase('', 'kebabCase'), - testCase('', 'pascalCase'), - testCase('src/foo/_fooBar.js', 'camelCase'), - testCase('src/foo/___fooBar.js', 'camelCase'), - testCase('src/foo/_foo_bar.js', 'snakeCase'), - testCase('src/foo/___foo_bar.js', 'snakeCase'), - testCase('src/foo/_foo-bar.js', 'kebabCase'), - testCase('src/foo/___foo-bar.js', 'kebabCase'), - testCase('src/foo/_FooBar.js', 'pascalCase'), - testCase('src/foo/___FooBar.js', 'pascalCase') - ], - invalid: [ - testCase('src/foo/foo_bar.js', - undefined, - 'Filename is not in camel case. Rename it to `fooBar.js`.' - ), - testCase('src/foo/foo_bar.js', - 'camelCase', - 'Filename is not in camel case. Rename it to `fooBar.js`.' - ), - testCase('src/foo/foo_bar.test.js', - 'camelCase', - 'Filename is not in camel case. Rename it to `fooBar.test.js`.' - ), - testCase('test/foo/foo_bar.test_utils.js', - 'camelCase', - 'Filename is not in camel case. Rename it to `fooBar.testUtils.js`.' - ), - testCase('test/foo/fooBar.js', - 'snakeCase', - 'Filename is not in snake case. Rename it to `foo_bar.js`.' - ), - testCase('test/foo/fooBar.test.js', - 'snakeCase', - 'Filename is not in snake case. Rename it to `foo_bar.test.js`.' - ), - testCase('test/foo/fooBar.testUtils.js', - 'snakeCase', - 'Filename is not in snake case. Rename it to `foo_bar.test_utils.js`.' - ), - testCase('test/foo/fooBar.js', - 'kebabCase', - 'Filename is not in kebab case. Rename it to `foo-bar.js`.' - ), - testCase('test/foo/fooBar.test.js', - 'kebabCase', - 'Filename is not in kebab case. Rename it to `foo-bar.test.js`.' - ), - testCase('test/foo/fooBar.testUtils.js', - 'kebabCase', - 'Filename is not in kebab case. Rename it to `foo-bar.test-utils.js`.' - ), - testCase('test/foo/fooBar.js', - 'pascalCase', - 'Filename is not in pascal case. Rename it to `FooBar.js`.' - ), - testCase('test/foo/foo_bar.test.js', - 'pascalCase', - 'Filename is not in pascal case. Rename it to `FooBar.Test.js`.' - ), - testCase('test/foo/foo-bar.test-utils.js', - 'pascalCase', - 'Filename is not in pascal case. Rename it to `FooBar.TestUtils.js`.' - ), - testCase('src/foo/_FOO-BAR.js', - 'camelCase', - 'Filename is not in camel case. Rename it to `_fooBar.js`.' - ), - testCase('src/foo/___FOO-BAR.js', - 'camelCase', - 'Filename is not in camel case. Rename it to `___fooBar.js`.' - ), - testCase('src/foo/_FOO-BAR.js', - 'snakeCase', - 'Filename is not in snake case. Rename it to `_foo_bar.js`.' - ), - testCase('src/foo/___FOO-BAR.js', - 'snakeCase', - 'Filename is not in snake case. Rename it to `___foo_bar.js`.' - ), - testCase('src/foo/_FOO-BAR.js', - 'kebabCase', - 'Filename is not in kebab case. Rename it to `_foo-bar.js`.' - ), - testCase('src/foo/___FOO-BAR.js', - 'kebabCase', - 'Filename is not in kebab case. Rename it to `___foo-bar.js`.' - ), - testCase('src/foo/_FOO-BAR.js', - 'pascalCase', - 'Filename is not in pascal case. Rename it to `_FooBar.js`.' - ), - testCase('src/foo/___FOO-BAR.js', - 'pascalCase', - 'Filename is not in pascal case. Rename it to `___FooBar.js`.' - ) - ] - }); +ruleTester.run('filename-case', rule, { + valid: [ + testCase('src/foo/bar.js', 'camelCase'), + testCase('src/foo/fooBar.js', 'camelCase'), + testCase('src/foo/bar.test.js', 'camelCase'), + testCase('src/foo/fooBar.test.js', 'camelCase'), + testCase('src/foo/fooBar.testUtils.js', 'camelCase'), + testCase('src/foo/foo.js', 'snakeCase'), + testCase('src/foo/foo_bar.js', 'snakeCase'), + testCase('src/foo/foo.test.js', 'snakeCase'), + testCase('src/foo/foo_bar.test.js', 'snakeCase'), + testCase('src/foo/foo_bar.test_utils.js', 'snakeCase'), + testCase('src/foo/foo.js', 'kebabCase'), + testCase('src/foo/foo-bar.js', 'kebabCase'), + testCase('src/foo/foo.test.js', 'kebabCase'), + testCase('src/foo/foo-bar.test.js', 'kebabCase'), + testCase('src/foo/foo-bar.test-utils.js', 'kebabCase'), + testCase('src/foo/Foo.js', 'pascalCase'), + testCase('src/foo/FooBar.js', 'pascalCase'), + testCase('src/foo/Foo.Test.js', 'pascalCase'), + testCase('src/foo/FooBar.Test.js', 'pascalCase'), + testCase('src/foo/FooBar.TestUtils.js', 'pascalCase'), + testCase('spec/iss47Spec.js', 'camelCase'), + testCase('spec/iss47Spec100.js', 'camelCase'), + testCase('spec/i18n.js', 'camelCase'), + testCase('spec/iss47-spec.js', 'kebabCase'), + testCase('spec/iss-47-spec.js', 'kebabCase'), + testCase('spec/iss47-100spec.js', 'kebabCase'), + testCase('spec/i18n.js', 'kebabCase'), + testCase('spec/iss47_spec.js', 'snakeCase'), + testCase('spec/iss_47_spec.js', 'snakeCase'), + testCase('spec/iss47_100spec.js', 'snakeCase'), + testCase('spec/i18n.js', 'snakeCase'), + testCase('spec/Iss47Spec.js', 'pascalCase'), + testCase('spec/Iss47.100Spec.js', 'pascalCase'), + testCase('spec/I18n.js', 'pascalCase'), + testCase('', 'camelCase'), + testCase('', 'snakeCase'), + testCase('', 'kebabCase'), + testCase('', 'pascalCase'), + testCase('src/foo/_fooBar.js', 'camelCase'), + testCase('src/foo/___fooBar.js', 'camelCase'), + testCase('src/foo/_foo_bar.js', 'snakeCase'), + testCase('src/foo/___foo_bar.js', 'snakeCase'), + testCase('src/foo/_foo-bar.js', 'kebabCase'), + testCase('src/foo/___foo-bar.js', 'kebabCase'), + testCase('src/foo/_FooBar.js', 'pascalCase'), + testCase('src/foo/___FooBar.js', 'pascalCase') + ], + invalid: [ + testCase('src/foo/foo_bar.js', + undefined, + 'Filename is not in camel case. Rename it to `fooBar.js`.' + ), + testCase('src/foo/foo_bar.js', + 'camelCase', + 'Filename is not in camel case. Rename it to `fooBar.js`.' + ), + testCase('src/foo/foo_bar.test.js', + 'camelCase', + 'Filename is not in camel case. Rename it to `fooBar.test.js`.' + ), + testCase('test/foo/foo_bar.test_utils.js', + 'camelCase', + 'Filename is not in camel case. Rename it to `fooBar.testUtils.js`.' + ), + testCase('test/foo/fooBar.js', + 'snakeCase', + 'Filename is not in snake case. Rename it to `foo_bar.js`.' + ), + testCase('test/foo/fooBar.test.js', + 'snakeCase', + 'Filename is not in snake case. Rename it to `foo_bar.test.js`.' + ), + testCase('test/foo/fooBar.testUtils.js', + 'snakeCase', + 'Filename is not in snake case. Rename it to `foo_bar.test_utils.js`.' + ), + testCase('test/foo/fooBar.js', + 'kebabCase', + 'Filename is not in kebab case. Rename it to `foo-bar.js`.' + ), + testCase('test/foo/fooBar.test.js', + 'kebabCase', + 'Filename is not in kebab case. Rename it to `foo-bar.test.js`.' + ), + testCase('test/foo/fooBar.testUtils.js', + 'kebabCase', + 'Filename is not in kebab case. Rename it to `foo-bar.test-utils.js`.' + ), + testCase('test/foo/fooBar.js', + 'pascalCase', + 'Filename is not in pascal case. Rename it to `FooBar.js`.' + ), + testCase('test/foo/foo_bar.test.js', + 'pascalCase', + 'Filename is not in pascal case. Rename it to `FooBar.Test.js`.' + ), + testCase('test/foo/foo-bar.test-utils.js', + 'pascalCase', + 'Filename is not in pascal case. Rename it to `FooBar.TestUtils.js`.' + ), + testCase('src/foo/_FOO-BAR.js', + 'camelCase', + 'Filename is not in camel case. Rename it to `_fooBar.js`.' + ), + testCase('src/foo/___FOO-BAR.js', + 'camelCase', + 'Filename is not in camel case. Rename it to `___fooBar.js`.' + ), + testCase('src/foo/_FOO-BAR.js', + 'snakeCase', + 'Filename is not in snake case. Rename it to `_foo_bar.js`.' + ), + testCase('src/foo/___FOO-BAR.js', + 'snakeCase', + 'Filename is not in snake case. Rename it to `___foo_bar.js`.' + ), + testCase('src/foo/_FOO-BAR.js', + 'kebabCase', + 'Filename is not in kebab case. Rename it to `_foo-bar.js`.' + ), + testCase('src/foo/___FOO-BAR.js', + 'kebabCase', + 'Filename is not in kebab case. Rename it to `___foo-bar.js`.' + ), + testCase('src/foo/_FOO-BAR.js', + 'pascalCase', + 'Filename is not in pascal case. Rename it to `_FooBar.js`.' + ), + testCase('src/foo/___FOO-BAR.js', + 'pascalCase', + 'Filename is not in pascal case. Rename it to `___FooBar.js`.' + ) + ] }); diff --git a/test/no-abusive-eslint-disable.js b/test/no-abusive-eslint-disable.js index 368fc85922..f0a8c1ab18 100644 --- a/test/no-abusive-eslint-disable.js +++ b/test/no-abusive-eslint-disable.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/no-abusive-eslint-disable'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -13,44 +13,42 @@ const error = (message) => ({ message }); -test(() => { - ruleTester.run('no-abusive-eslint-disable', rule, { - valid: [ - `eval();`, - `eval(); // eslint-disable-line no-eval`, - `eval(); // eslint-disable-line no-eval, no-console`, - `eval(); //eslint-disable-line no-eval`, - `eval(); // eslint-disable-line no-eval`, - `eval(); //\teslint-disable-line no-eval`, - `eval(); /* eslint-disable-line no-eval */`, - `eval(); /* eslint-disable-line no-eval */`, - `eval(); // eslint-line-disable`, - `eval(); // some comment`, - `foo(); - // eslint-disable-line no-eval - eval();`, - '/* eslint-disable no-eval */', - `foo(); - /* eslint-disable no-eval */ - eval();` - ], - invalid: [ - { - code: `eval(); // eslint-disable-line`, - errors: [error('Specify the rules you want to disable at line 1:8')] - }, - { - code: 'foo();\neval(); // eslint-disable-line', - errors: [error('Specify the rules you want to disable at line 2:8')] - }, - { - code: '/* eslint-disable */', - errors: [error('Specify the rules you want to disable at line 1:0')] - }, - { - code: 'foo();\n/* eslint-disable */\neval();', - errors: [error('Specify the rules you want to disable at line 2:0')] - } - ] - }); +ruleTester.run('no-abusive-eslint-disable', rule, { + valid: [ + `eval();`, + `eval(); // eslint-disable-line no-eval`, + `eval(); // eslint-disable-line no-eval, no-console`, + `eval(); //eslint-disable-line no-eval`, + `eval(); // eslint-disable-line no-eval`, + `eval(); //\teslint-disable-line no-eval`, + `eval(); /* eslint-disable-line no-eval */`, + `eval(); /* eslint-disable-line no-eval */`, + `eval(); // eslint-line-disable`, + `eval(); // some comment`, + `foo(); + // eslint-disable-line no-eval + eval();`, + '/* eslint-disable no-eval */', + `foo(); + /* eslint-disable no-eval */ + eval();` + ], + invalid: [ + { + code: `eval(); // eslint-disable-line`, + errors: [error('Specify the rules you want to disable at line 1:8')] + }, + { + code: 'foo();\neval(); // eslint-disable-line', + errors: [error('Specify the rules you want to disable at line 2:8')] + }, + { + code: '/* eslint-disable */', + errors: [error('Specify the rules you want to disable at line 1:0')] + }, + { + code: 'foo();\n/* eslint-disable */\neval();', + errors: [error('Specify the rules you want to disable at line 2:0')] + } + ] }); diff --git a/test/no-process-exit.js b/test/no-process-exit.js index bbd22d43a1..7c64ff9615 100644 --- a/test/no-process-exit.js +++ b/test/no-process-exit.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/no-process-exit'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -10,28 +10,26 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-process-exit'}]; -test(() => { - ruleTester.run('no-process-exit', rule, { - valid: [ - '#!/usr/bin/env node\n\nprocess.exit();', - 'Process.exit()', - 'const x = process.exit;', - 'x(process.exit)', - '' - ], - invalid: [ - { - code: 'process.exit();', - errors - }, - { - code: 'process.exit(1);', - errors - }, - { - code: 'x(process.exit(1));', - errors - } - ] - }); +ruleTester.run('no-process-exit', rule, { + valid: [ + '#!/usr/bin/env node\n\nprocess.exit();', + 'Process.exit()', + 'const x = process.exit;', + 'x(process.exit)', + '' + ], + invalid: [ + { + code: 'process.exit();', + errors + }, + { + code: 'process.exit(1);', + errors + }, + { + code: 'x(process.exit(1));', + errors + } + ] }); diff --git a/test/throw-new-error.js b/test/throw-new-error.js index 75eb90bc5c..0a4ff710e7 100644 --- a/test/throw-new-error.js +++ b/test/throw-new-error.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/throw-new-error'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -10,29 +10,27 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'throw-new-error'}]; -test(() => { - ruleTester.run('new-error', rule, { - valid: [ - 'throw new Error()', - 'new Error()', - 'throw new TypeError()' - ], - invalid: [ - { - code: 'throw Error()', - output: 'throw new Error()', - errors - }, - { - code: `throw Error('foo')`, - output: `throw new Error('foo')`, - errors - }, - { - code: `throw TypeError()`, - output: 'throw new TypeError()', - errors - } - ] - }); +ruleTester.run('new-error', rule, { + valid: [ + 'throw new Error()', + 'new Error()', + 'throw new TypeError()' + ], + invalid: [ + { + code: 'throw Error()', + output: 'throw new Error()', + errors + }, + { + code: `throw Error('foo')`, + output: `throw new Error('foo')`, + errors + }, + { + code: `throw TypeError()`, + output: 'throw new TypeError()', + errors + } + ] });