Skip to content

Commit

Permalink
Get nice feedback with RuleTester using AVA (#35)
Browse files Browse the repository at this point in the history
  • Loading branch information
jfmengels authored and sindresorhus committed Jun 14, 2016
1 parent 5494fbb commit e3126a7
Show file tree
Hide file tree
Showing 6 changed files with 267 additions and 276 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": "*"
Expand Down
82 changes: 40 additions & 42 deletions test/catch-error-name.js
Original file line number Diff line number Diff line change
@@ -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
}
Expand All @@ -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'}
]
}
]
});
276 changes: 137 additions & 139 deletions test/filename-case.js
Original file line number Diff line number Diff line change
@@ -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
}
Expand All @@ -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('<text>', 'camelCase'),
testCase('<text>', 'snakeCase'),
testCase('<text>', 'kebabCase'),
testCase('<text>', '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('<text>', 'camelCase'),
testCase('<text>', 'snakeCase'),
testCase('<text>', 'kebabCase'),
testCase('<text>', '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`.'
)
]
});
Loading

0 comments on commit e3126a7

Please sign in to comment.