diff --git a/package.json b/package.json index 71cd9e69..78d2167b 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "ava": "*", "coveralls": "^2.11.9", "eslint": "^2.2.0", + "eslint-ava-rule-tester": "^0.1.1", "js-combinatorics": "^0.5.0", "nyc": "^6.4.0", "pify": "^2.3.0", diff --git a/test/assertion-arguments.js b/test/assertion-arguments.js index bb06c0cd..b74a3007 100644 --- a/test/assertion-arguments.js +++ b/test/assertion-arguments.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/assertion-arguments'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -32,185 +32,183 @@ function testCase(message, content, errorMessage, useHeader) { }; } -test(() => { - ruleTester.run('assertion-arguments', rule, { - valid: [ - testCase(false, `t.plan(1);`), - testCase(false, `t.end();`), - testCase(false, `t.deepEqual({}, {}, 'message');`), - testCase(false, `t.fail('message');`), - testCase(false, `t.false(false, 'message');`), - testCase(false, `t.falsy('unicorn', 'message');`), - testCase(false, `t.ifError(new Error(), 'message');`), - testCase(false, `t.is.skip('same', 'same', 'message');`), - testCase(false, `t.is('same', 'same', 'message');`), - testCase(false, `t.not('not', 'same', 'message');`), - testCase(false, `t.notDeepEqual({}, {a: true}, 'message');`), - testCase(false, `t.notThrows(Promise.resolve(), 'message');`), - testCase(false, `t.pass('message');`), - testCase(false, `t.regex(a, /a/, 'message');`), - testCase(false, `t.notRegex(a, /a/, 'message');`), - testCase(false, `t.skip.is('same', 'same', 'message');`), - testCase(false, `t.throws(Promise.reject(), Error, 'message');`), - testCase(false, `t.true(true, 'message');`), - testCase(false, `t.truthy('unicorn', 'message');`), - // shouldn't be triggered since it's not a test file - testCase(false, `t.true(true);`, false, false), +ruleTester.run('assertion-arguments', rule, { + valid: [ + testCase(false, `t.plan(1);`), + testCase(false, `t.end();`), + testCase(false, `t.deepEqual({}, {}, 'message');`), + testCase(false, `t.fail('message');`), + testCase(false, `t.false(false, 'message');`), + testCase(false, `t.falsy('unicorn', 'message');`), + testCase(false, `t.ifError(new Error(), 'message');`), + testCase(false, `t.is.skip('same', 'same', 'message');`), + testCase(false, `t.is('same', 'same', 'message');`), + testCase(false, `t.not('not', 'same', 'message');`), + testCase(false, `t.notDeepEqual({}, {a: true}, 'message');`), + testCase(false, `t.notThrows(Promise.resolve(), 'message');`), + testCase(false, `t.pass('message');`), + testCase(false, `t.regex(a, /a/, 'message');`), + testCase(false, `t.notRegex(a, /a/, 'message');`), + testCase(false, `t.skip.is('same', 'same', 'message');`), + testCase(false, `t.throws(Promise.reject(), Error, 'message');`), + testCase(false, `t.true(true, 'message');`), + testCase(false, `t.truthy('unicorn', 'message');`), + // shouldn't be triggered since it's not a test file + testCase(false, `t.true(true);`, false, false), - testCase(false, `t.deepEqual({}, {});`), - testCase(false, `t.fail();`), - testCase(false, `t.false(false);`), - testCase(false, `t.falsy('unicorn');`), - testCase(false, `t.ifError(new Error());`), - testCase(false, `t.is.skip('same', 'same');`), - testCase(false, `t.is('same', 'same');`), - testCase(false, `t.not('not', 'same');`), - testCase(false, `t.notDeepEqual({}, {a: true});`), - testCase(false, `t.notThrows(Promise.resolve());`), - testCase(false, `t.pass();`), - testCase(false, `t.regex(a, /a/);`), - testCase(false, `t.notRegex(a, /a/);`), - testCase(false, `t.skip.is('same', 'same');`), - testCase(false, `t.throws(Promise.reject());`), - testCase(false, `t.throws(Promise.reject(), Error);`), - testCase(false, `t.true(true);`), - testCase(false, `t.truthy('unicorn');`), - // shouldn't be triggered since it's not a test file - testCase(false, `t.true(true, 'message');`, [], false), + testCase(false, `t.deepEqual({}, {});`), + testCase(false, `t.fail();`), + testCase(false, `t.false(false);`), + testCase(false, `t.falsy('unicorn');`), + testCase(false, `t.ifError(new Error());`), + testCase(false, `t.is.skip('same', 'same');`), + testCase(false, `t.is('same', 'same');`), + testCase(false, `t.not('not', 'same');`), + testCase(false, `t.notDeepEqual({}, {a: true});`), + testCase(false, `t.notThrows(Promise.resolve());`), + testCase(false, `t.pass();`), + testCase(false, `t.regex(a, /a/);`), + testCase(false, `t.notRegex(a, /a/);`), + testCase(false, `t.skip.is('same', 'same');`), + testCase(false, `t.throws(Promise.reject());`), + testCase(false, `t.throws(Promise.reject(), Error);`), + testCase(false, `t.true(true);`), + testCase(false, `t.truthy('unicorn');`), + // shouldn't be triggered since it's not a test file + testCase(false, `t.true(true, 'message');`, [], false), - testCase(false, `t.context.a(1, 2, 3, 4);`), - testCase(false, `t.context.is(1, 2, 3, 4);`), - testCase(false, `t.foo(1, 2, 3, 4);`), + testCase(false, `t.context.a(1, 2, 3, 4);`), + testCase(false, `t.context.is(1, 2, 3, 4);`), + testCase(false, `t.foo(1, 2, 3, 4);`), - testCase('always', `t.plan(1);`), - testCase('always', `t.end();`), - testCase('always', `t.pass('message');`), - testCase('always', `t.fail('message');`), - testCase('always', `t.truthy('unicorn', 'message');`), - testCase('always', `t.falsy('unicorn', 'message');`), - testCase('always', `t.true(true, 'message');`), - testCase('always', `t.false(false, 'message');`), - testCase('always', `t.is('same', 'same', 'message');`), - testCase('always', `t.not('not', 'same', 'message');`), - testCase('always', `t.deepEqual({}, {}, 'message');`), - testCase('always', `t.notDeepEqual({}, {a: true}, 'message');`), - testCase('always', `t.throws(Promise.reject(), Error, 'message');`), - testCase('always', `t.notThrows(Promise.resolve(), 'message');`), - testCase('always', `t.regex(a, /a/, 'message');`), - testCase('always', `t.notRegex(a, /a/, 'message');`), - testCase('always', `t.ifError(new Error(), 'message');`), - testCase('always', `t.skip.is('same', 'same', 'message');`), - testCase('always', `t.is.skip('same', 'same', 'message');`), - // shouldn't be triggered since it's not a test file - testCase('always', `t.true(true);`, [], false), + testCase('always', `t.plan(1);`), + testCase('always', `t.end();`), + testCase('always', `t.pass('message');`), + testCase('always', `t.fail('message');`), + testCase('always', `t.truthy('unicorn', 'message');`), + testCase('always', `t.falsy('unicorn', 'message');`), + testCase('always', `t.true(true, 'message');`), + testCase('always', `t.false(false, 'message');`), + testCase('always', `t.is('same', 'same', 'message');`), + testCase('always', `t.not('not', 'same', 'message');`), + testCase('always', `t.deepEqual({}, {}, 'message');`), + testCase('always', `t.notDeepEqual({}, {a: true}, 'message');`), + testCase('always', `t.throws(Promise.reject(), Error, 'message');`), + testCase('always', `t.notThrows(Promise.resolve(), 'message');`), + testCase('always', `t.regex(a, /a/, 'message');`), + testCase('always', `t.notRegex(a, /a/, 'message');`), + testCase('always', `t.ifError(new Error(), 'message');`), + testCase('always', `t.skip.is('same', 'same', 'message');`), + testCase('always', `t.is.skip('same', 'same', 'message');`), + // shouldn't be triggered since it's not a test file + testCase('always', `t.true(true);`, [], false), - testCase('always', `t.context.a(1, 2, 3, 4);`), - testCase('always', `t.context.is(1, 2, 3, 4);`), - testCase('always', `t.foo(1, 2, 3, 4);`), + testCase('always', `t.context.a(1, 2, 3, 4);`), + testCase('always', `t.context.is(1, 2, 3, 4);`), + testCase('always', `t.foo(1, 2, 3, 4);`), - testCase('never', `t.plan(1);`), - testCase('never', `t.end();`), - testCase('never', `t.pass();`), - testCase('never', `t.fail();`), - testCase('never', `t.truthy('unicorn');`), - testCase('never', `t.falsy('unicorn');`), - testCase('never', `t.true(true);`), - testCase('never', `t.false(false);`), - testCase('never', `t.is('same', 'same');`), - testCase('never', `t.not('not', 'same');`), - testCase('never', `t.deepEqual({}, {});`), - testCase('never', `t.notDeepEqual({}, {a: true});`), - testCase('never', `t.throws(Promise.reject());`), - testCase('never', `t.throws(Promise.reject(), Error);`), - testCase('never', `t.notThrows(Promise.resolve());`), - testCase('never', `t.regex(a, /a/);`), - testCase('never', `t.notRegex(a, /a/);`), - testCase('never', `t.ifError(new Error());`), - testCase('never', `t.skip.is('same', 'same');`), - testCase('never', `t.is.skip('same', 'same');`), - // shouldn't be triggered since it's not a test file - testCase('never', `t.true(true, 'message');`, [], false), + testCase('never', `t.plan(1);`), + testCase('never', `t.end();`), + testCase('never', `t.pass();`), + testCase('never', `t.fail();`), + testCase('never', `t.truthy('unicorn');`), + testCase('never', `t.falsy('unicorn');`), + testCase('never', `t.true(true);`), + testCase('never', `t.false(false);`), + testCase('never', `t.is('same', 'same');`), + testCase('never', `t.not('not', 'same');`), + testCase('never', `t.deepEqual({}, {});`), + testCase('never', `t.notDeepEqual({}, {a: true});`), + testCase('never', `t.throws(Promise.reject());`), + testCase('never', `t.throws(Promise.reject(), Error);`), + testCase('never', `t.notThrows(Promise.resolve());`), + testCase('never', `t.regex(a, /a/);`), + testCase('never', `t.notRegex(a, /a/);`), + testCase('never', `t.ifError(new Error());`), + testCase('never', `t.skip.is('same', 'same');`), + testCase('never', `t.is.skip('same', 'same');`), + // shouldn't be triggered since it's not a test file + testCase('never', `t.true(true, 'message');`, [], false), - testCase('never', `t.context.a(1, 2, 3, 4);`), - testCase('never', `t.context.is(1, 2, 3, 4);`), - testCase('never', `t.foo(1, 2, 3, 4);`) - ], - invalid: [ - // Not enough arguments - testCase(false, `t.plan();`, tooFewError(1)), - testCase(false, `t.truthy();`, tooFewError(1)), - testCase(false, `t.falsy();`, tooFewError(1)), - testCase(false, `t.true();`, tooFewError(1)), - testCase(false, `t.false();`, tooFewError(1)), - testCase(false, `t.is('same');`, tooFewError(2)), - testCase(false, `t.not('not');`, tooFewError(2)), - testCase(false, `t.deepEqual({});`, tooFewError(2)), - testCase(false, `t.notDeepEqual({});`, tooFewError(2)), - testCase(false, `t.throws();`, tooFewError(1)), - testCase(false, `t.notThrows();`, tooFewError(1)), - testCase(false, `t.regex(a);`, tooFewError(2)), - testCase(false, `t.notRegex(a);`, tooFewError(2)), - testCase(false, `t.ifError();`, tooFewError(1)), - testCase(false, `t.skip.is('same');`, tooFewError(2)), - testCase(false, `t.is.skip('same');`, tooFewError(2)), + testCase('never', `t.context.a(1, 2, 3, 4);`), + testCase('never', `t.context.is(1, 2, 3, 4);`), + testCase('never', `t.foo(1, 2, 3, 4);`) + ], + invalid: [ + // Not enough arguments + testCase(false, `t.plan();`, tooFewError(1)), + testCase(false, `t.truthy();`, tooFewError(1)), + testCase(false, `t.falsy();`, tooFewError(1)), + testCase(false, `t.true();`, tooFewError(1)), + testCase(false, `t.false();`, tooFewError(1)), + testCase(false, `t.is('same');`, tooFewError(2)), + testCase(false, `t.not('not');`, tooFewError(2)), + testCase(false, `t.deepEqual({});`, tooFewError(2)), + testCase(false, `t.notDeepEqual({});`, tooFewError(2)), + testCase(false, `t.throws();`, tooFewError(1)), + testCase(false, `t.notThrows();`, tooFewError(1)), + testCase(false, `t.regex(a);`, tooFewError(2)), + testCase(false, `t.notRegex(a);`, tooFewError(2)), + testCase(false, `t.ifError();`, tooFewError(1)), + testCase(false, `t.skip.is('same');`, tooFewError(2)), + testCase(false, `t.is.skip('same');`, tooFewError(2)), - // Too many arguments - testCase(false, `t.plan(1, 'extra argument');`, tooManyError(1)), - testCase(false, `t.end('extra argument');`, tooManyError(0)), - testCase(false, `t.pass('message', 'extra argument');`, tooManyError(1)), - testCase(false, `t.fail('message', 'extra argument');`, tooManyError(1)), - testCase(false, `t.truthy('unicorn', 'message', 'extra argument');`, tooManyError(2)), - testCase(false, `t.falsy('unicorn', 'message', 'extra argument');`, tooManyError(2)), - testCase(false, `t.true(true, 'message', 'extra argument');`, tooManyError(2)), - testCase(false, `t.false(false, 'message', 'extra argument');`, tooManyError(2)), - testCase(false, `t.is('same', 'same', 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.not('not', 'same', 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.deepEqual({}, {}, 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.notDeepEqual({}, {a: true}, 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.throws(Promise.reject(), Error, 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.notThrows(Promise.resolve(), 'message', 'extra argument');`, tooManyError(2)), - testCase(false, `t.regex(a, /a/, 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.notRegex(a, /a/, 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.ifError(new Error(), 'message', 'extra argument');`, tooManyError(2)), - testCase(false, `t.skip.is('same', 'same', 'message', 'extra argument');`, tooManyError(3)), - testCase(false, `t.is.skip('same', 'same', 'message', 'extra argument');`, tooManyError(3)), + // Too many arguments + testCase(false, `t.plan(1, 'extra argument');`, tooManyError(1)), + testCase(false, `t.end('extra argument');`, tooManyError(0)), + testCase(false, `t.pass('message', 'extra argument');`, tooManyError(1)), + testCase(false, `t.fail('message', 'extra argument');`, tooManyError(1)), + testCase(false, `t.truthy('unicorn', 'message', 'extra argument');`, tooManyError(2)), + testCase(false, `t.falsy('unicorn', 'message', 'extra argument');`, tooManyError(2)), + testCase(false, `t.true(true, 'message', 'extra argument');`, tooManyError(2)), + testCase(false, `t.false(false, 'message', 'extra argument');`, tooManyError(2)), + testCase(false, `t.is('same', 'same', 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.not('not', 'same', 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.deepEqual({}, {}, 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.notDeepEqual({}, {a: true}, 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.throws(Promise.reject(), Error, 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.notThrows(Promise.resolve(), 'message', 'extra argument');`, tooManyError(2)), + testCase(false, `t.regex(a, /a/, 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.notRegex(a, /a/, 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.ifError(new Error(), 'message', 'extra argument');`, tooManyError(2)), + testCase(false, `t.skip.is('same', 'same', 'message', 'extra argument');`, tooManyError(3)), + testCase(false, `t.is.skip('same', 'same', 'message', 'extra argument');`, tooManyError(3)), - testCase('always', `t.pass();`, missingError), - testCase('always', `t.fail();`, missingError), - testCase('always', `t.truthy('unicorn');`, missingError), - testCase('always', `t.falsy('unicorn');`, missingError), - testCase('always', `t.true(true);`, missingError), - testCase('always', `t.false(false);`, missingError), - testCase('always', `t.is('same', 'same');`, missingError), - testCase('always', `t.not('not', 'same');`, missingError), - testCase('always', `t.deepEqual({}, {});`, missingError), - testCase('always', `t.notDeepEqual({}, {a: true});`, missingError), - testCase('always', `t.throws(Promise.reject());`, missingError), - testCase('always', `t.throws(Promise.reject(), Error);`, missingError), - testCase('always', `t.notThrows(Promise.resolve());`, missingError), - testCase('always', `t.regex(a, /a/);`, missingError), - testCase('always', `t.notRegex(a, /a/);`, missingError), - testCase('always', `t.ifError(new Error());`, missingError), - testCase('always', `t.skip.is('same', 'same');`, missingError), - testCase('always', `t.is.skip('same', 'same');`, missingError), + testCase('always', `t.pass();`, missingError), + testCase('always', `t.fail();`, missingError), + testCase('always', `t.truthy('unicorn');`, missingError), + testCase('always', `t.falsy('unicorn');`, missingError), + testCase('always', `t.true(true);`, missingError), + testCase('always', `t.false(false);`, missingError), + testCase('always', `t.is('same', 'same');`, missingError), + testCase('always', `t.not('not', 'same');`, missingError), + testCase('always', `t.deepEqual({}, {});`, missingError), + testCase('always', `t.notDeepEqual({}, {a: true});`, missingError), + testCase('always', `t.throws(Promise.reject());`, missingError), + testCase('always', `t.throws(Promise.reject(), Error);`, missingError), + testCase('always', `t.notThrows(Promise.resolve());`, missingError), + testCase('always', `t.regex(a, /a/);`, missingError), + testCase('always', `t.notRegex(a, /a/);`, missingError), + testCase('always', `t.ifError(new Error());`, missingError), + testCase('always', `t.skip.is('same', 'same');`, missingError), + testCase('always', `t.is.skip('same', 'same');`, missingError), - testCase('never', `t.pass('message');`, foundError), - testCase('never', `t.fail('message');`, foundError), - testCase('never', `t.truthy('unicorn', 'message');`, foundError), - testCase('never', `t.falsy('unicorn', 'message');`, foundError), - testCase('never', `t.true(true, 'message');`, foundError), - testCase('never', `t.false(false, 'message');`, foundError), - testCase('never', `t.is('same', 'same', 'message');`, foundError), - testCase('never', `t.not('not', 'same', 'message');`, foundError), - testCase('never', `t.deepEqual({}, {}, 'message');`, foundError), - testCase('never', `t.notDeepEqual({}, {a: true}, 'message');`, foundError), - testCase('never', `t.throws(Promise.reject(), Error, 'message');`, foundError), - testCase('never', `t.notThrows(Promise.resolve(), 'message');`, foundError), - testCase('never', `t.regex(a, /a/, 'message');`, foundError), - testCase('never', `t.notRegex(a, /a/, 'message');`, foundError), - testCase('never', `t.ifError(new Error(), 'message');`, foundError), - testCase('never', `t.skip.is('same', 'same', 'message');`, foundError), - testCase('never', `t.is.skip('same', 'same', 'message');`, foundError) - ] - }); + testCase('never', `t.pass('message');`, foundError), + testCase('never', `t.fail('message');`, foundError), + testCase('never', `t.truthy('unicorn', 'message');`, foundError), + testCase('never', `t.falsy('unicorn', 'message');`, foundError), + testCase('never', `t.true(true, 'message');`, foundError), + testCase('never', `t.false(false, 'message');`, foundError), + testCase('never', `t.is('same', 'same', 'message');`, foundError), + testCase('never', `t.not('not', 'same', 'message');`, foundError), + testCase('never', `t.deepEqual({}, {}, 'message');`, foundError), + testCase('never', `t.notDeepEqual({}, {a: true}, 'message');`, foundError), + testCase('never', `t.throws(Promise.reject(), Error, 'message');`, foundError), + testCase('never', `t.notThrows(Promise.resolve(), 'message');`, foundError), + testCase('never', `t.regex(a, /a/, 'message');`, foundError), + testCase('never', `t.notRegex(a, /a/, 'message');`, foundError), + testCase('never', `t.ifError(new Error(), 'message');`, foundError), + testCase('never', `t.skip.is('same', 'same', 'message');`, foundError), + testCase('never', `t.is.skip('same', 'same', 'message');`, foundError) + ] }); diff --git a/test/assertion-message.js b/test/assertion-message.js index 6f1f96fc..a31660b2 100644 --- a/test/assertion-message.js +++ b/test/assertion-message.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/assertion-message'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -34,90 +34,88 @@ function testCase(option, content, errors, useHeader) { }; } -test(() => { - ruleTester.run('assertion-message', rule, { - valid: [ - testCase('always', `t.pass('message');`), - testCase('always', `t.fail('message');`), - testCase('always', `t.truthy('unicorn', 'message');`), - testCase('always', `t.falsy('unicorn', 'message');`), - testCase('always', `t.true(true, 'message');`), - testCase('always', `t.false(false, 'message');`), - testCase('always', `t.is('same', 'same', 'message');`), - testCase('always', `t.not('not', 'same', 'message');`), - testCase('always', `t.deepEqual({}, {}, 'message');`), - testCase('always', `t.notDeepEqual({}, {a: true}, 'message');`), - testCase('always', `t.throws(Promise.reject(), 'message');`), - testCase('always', `t.notThrows(Promise.resolve(), 'message');`), - testCase('always', `t.regex(a, /a/, 'message');`), - testCase('always', `t.notRegex(a, /a/, 'message');`), - testCase('always', `t.ifError(new Error(), 'message');`), - testCase('always', `t.skip.is('same', 'same', 'message');`), - testCase('always', `t.is.skip('same', 'same', 'message');`), - testCase('always', `t.plan('a', 'b', 'c', 'd', 'message');`), - testCase('always', `t.end('a', 'b', 'c', 'd', 'message');`), - // shouldn't be triggered since it's not a test file - testCase('always', `t.true(true);`, [], false), +ruleTester.run('assertion-message', rule, { + valid: [ + testCase('always', `t.pass('message');`), + testCase('always', `t.fail('message');`), + testCase('always', `t.truthy('unicorn', 'message');`), + testCase('always', `t.falsy('unicorn', 'message');`), + testCase('always', `t.true(true, 'message');`), + testCase('always', `t.false(false, 'message');`), + testCase('always', `t.is('same', 'same', 'message');`), + testCase('always', `t.not('not', 'same', 'message');`), + testCase('always', `t.deepEqual({}, {}, 'message');`), + testCase('always', `t.notDeepEqual({}, {a: true}, 'message');`), + testCase('always', `t.throws(Promise.reject(), 'message');`), + testCase('always', `t.notThrows(Promise.resolve(), 'message');`), + testCase('always', `t.regex(a, /a/, 'message');`), + testCase('always', `t.notRegex(a, /a/, 'message');`), + testCase('always', `t.ifError(new Error(), 'message');`), + testCase('always', `t.skip.is('same', 'same', 'message');`), + testCase('always', `t.is.skip('same', 'same', 'message');`), + testCase('always', `t.plan('a', 'b', 'c', 'd', 'message');`), + testCase('always', `t.end('a', 'b', 'c', 'd', 'message');`), + // shouldn't be triggered since it's not a test file + testCase('always', `t.true(true);`, [], false), - testCase('never', `t.pass();`), - testCase('never', `t.fail();`), - testCase('never', `t.truthy('unicorn');`), - testCase('never', `t.falsy('unicorn');`), - testCase('never', `t.true(true);`), - testCase('never', `t.false(false);`), - testCase('never', `t.is('same', 'same');`), - testCase('never', `t.not('not', 'same');`), - testCase('never', `t.deepEqual({}, {});`), - testCase('never', `t.notDeepEqual({}, {a: true});`), - testCase('never', `t.throws(Promise.reject());`), - testCase('never', `t.notThrows(Promise.resolve());`), - testCase('never', `t.regex(a, /a/);`), - testCase('never', `t.notRegex(a, /a/);`), - testCase('never', `t.ifError(new Error());`), - testCase('never', `t.skip.is('same', 'same');`), - testCase('never', `t.is.skip('same', 'same');`), - testCase('never', `t.plan('a', 'b', 'c', 'd');`), - testCase('never', `t.end('a', 'b', 'c', 'd');`), - // shouldn't be triggered since it's not a test file - testCase('never', `t.true(true, 'message');`, [], false) - ], - invalid: [ - testCase('always', `t.pass();`, missingError), - testCase('always', `t.fail();`, missingError), - testCase('always', `t.truthy('unicorn');`, missingError), - testCase('always', `t.falsy('unicorn');`, missingError), - testCase('always', `t.true(true);`, missingError), - testCase('always', `t.false(false);`, missingError), - testCase('always', `t.is('same', 'same');`, missingError), - testCase('always', `t.not('not', 'same');`, missingError), - testCase('always', `t.deepEqual({}, {});`, missingError), - testCase('always', `t.notDeepEqual({}, {a: true});`, missingError), - testCase('always', `t.throws(Promise.reject());`, missingError), - testCase('always', `t.notThrows(Promise.resolve());`, missingError), - testCase('always', `t.regex(a, /a/);`, missingError), - testCase('always', `t.notRegex(a, /a/);`, missingError), - testCase('always', `t.ifError(new Error());`, missingError), - testCase('always', `t.skip.is('same', 'same');`, missingError), - testCase('always', `t.is.skip('same', 'same');`, missingError), - testCase('always', `t.pass();`, missingError), + testCase('never', `t.pass();`), + testCase('never', `t.fail();`), + testCase('never', `t.truthy('unicorn');`), + testCase('never', `t.falsy('unicorn');`), + testCase('never', `t.true(true);`), + testCase('never', `t.false(false);`), + testCase('never', `t.is('same', 'same');`), + testCase('never', `t.not('not', 'same');`), + testCase('never', `t.deepEqual({}, {});`), + testCase('never', `t.notDeepEqual({}, {a: true});`), + testCase('never', `t.throws(Promise.reject());`), + testCase('never', `t.notThrows(Promise.resolve());`), + testCase('never', `t.regex(a, /a/);`), + testCase('never', `t.notRegex(a, /a/);`), + testCase('never', `t.ifError(new Error());`), + testCase('never', `t.skip.is('same', 'same');`), + testCase('never', `t.is.skip('same', 'same');`), + testCase('never', `t.plan('a', 'b', 'c', 'd');`), + testCase('never', `t.end('a', 'b', 'c', 'd');`), + // shouldn't be triggered since it's not a test file + testCase('never', `t.true(true, 'message');`, [], false) + ], + invalid: [ + testCase('always', `t.pass();`, missingError), + testCase('always', `t.fail();`, missingError), + testCase('always', `t.truthy('unicorn');`, missingError), + testCase('always', `t.falsy('unicorn');`, missingError), + testCase('always', `t.true(true);`, missingError), + testCase('always', `t.false(false);`, missingError), + testCase('always', `t.is('same', 'same');`, missingError), + testCase('always', `t.not('not', 'same');`, missingError), + testCase('always', `t.deepEqual({}, {});`, missingError), + testCase('always', `t.notDeepEqual({}, {a: true});`, missingError), + testCase('always', `t.throws(Promise.reject());`, missingError), + testCase('always', `t.notThrows(Promise.resolve());`, missingError), + testCase('always', `t.regex(a, /a/);`, missingError), + testCase('always', `t.notRegex(a, /a/);`, missingError), + testCase('always', `t.ifError(new Error());`, missingError), + testCase('always', `t.skip.is('same', 'same');`, missingError), + testCase('always', `t.is.skip('same', 'same');`, missingError), + testCase('always', `t.pass();`, missingError), - testCase('never', `t.pass('message');`, foundError), - testCase('never', `t.fail('message');`, foundError), - testCase('never', `t.truthy('unicorn', 'message');`, foundError), - testCase('never', `t.falsy('unicorn', 'message');`, foundError), - testCase('never', `t.true(true, 'message');`, foundError), - testCase('never', `t.false(false, 'message');`, foundError), - testCase('never', `t.is('same', 'same', 'message');`, foundError), - testCase('never', `t.not('not', 'same', 'message');`, foundError), - testCase('never', `t.deepEqual({}, {}, 'message');`, foundError), - testCase('never', `t.notDeepEqual({}, {a: true}, 'message');`, foundError), - testCase('never', `t.throws(Promise.reject(), 'message');`, foundError), - testCase('never', `t.notThrows(Promise.resolve(), 'message');`, foundError), - testCase('never', `t.regex(a, /a/, 'message');`, foundError), - testCase('never', `t.notRegex(a, /a/, 'message');`, foundError), - testCase('never', `t.ifError(new Error(), 'message');`, foundError), - testCase('never', `t.skip.is('same', 'same', 'message');`, foundError), - testCase('never', `t.is.skip('same', 'same', 'message');`, foundError) - ] - }); + testCase('never', `t.pass('message');`, foundError), + testCase('never', `t.fail('message');`, foundError), + testCase('never', `t.truthy('unicorn', 'message');`, foundError), + testCase('never', `t.falsy('unicorn', 'message');`, foundError), + testCase('never', `t.true(true, 'message');`, foundError), + testCase('never', `t.false(false, 'message');`, foundError), + testCase('never', `t.is('same', 'same', 'message');`, foundError), + testCase('never', `t.not('not', 'same', 'message');`, foundError), + testCase('never', `t.deepEqual({}, {}, 'message');`, foundError), + testCase('never', `t.notDeepEqual({}, {a: true}, 'message');`, foundError), + testCase('never', `t.throws(Promise.reject(), 'message');`, foundError), + testCase('never', `t.notThrows(Promise.resolve(), 'message');`, foundError), + testCase('never', `t.regex(a, /a/, 'message');`, foundError), + testCase('never', `t.notRegex(a, /a/, 'message');`, foundError), + testCase('never', `t.ifError(new Error(), 'message');`, foundError), + testCase('never', `t.skip.is('same', 'same', 'message');`, foundError), + testCase('never', `t.is.skip('same', 'same', 'message');`, foundError) + ] }); diff --git a/test/max-asserts.js b/test/max-asserts.js index 5a313f8b..391b7126 100644 --- a/test/max-asserts.js +++ b/test/max-asserts.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/max-asserts'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -15,65 +15,63 @@ function nbAssertions(n) { return Array.from({length: n}).map(() => 't.is(1, 1);').join('\n'); } -test(() => { - ruleTester.run('max-asserts', rule, { - valid: [ - `${header} test(t => { ${nbAssertions(3)} });`, - `${header} - test(t => { ${nbAssertions(3)} }); +ruleTester.run('max-asserts', rule, { + valid: [ + `${header} test(t => { ${nbAssertions(3)} });`, + `${header} + test(t => { ${nbAssertions(3)} }); + test(t => { ${nbAssertions(3)} }); + `, + `${header} test(t => { t.plan(5); ${nbAssertions(5)} });`, + `${header} test(t => { t.is.skip(1, 1); ${nbAssertions(4)} });`, + `${header} test.cb(t => { ${nbAssertions(5)} t.end(); });`, + { + code: `${header} test(t => { ${nbAssertions(3)} });`, + options: [3] + }, + { + code: `${header} test(t => { notT.is(1, 1); notT.is(1, 1); notT.is(1, 1); });`, + options: [2] + }, + // shouldn't be triggered since it's not a test file + `test(t => { ${nbAssertions(10)} });` + ], + invalid: [ + { + code: `${header} test(t => { ${nbAssertions(6)} });`, + errors + }, + { + code: `${header} test(t => { ${nbAssertions(3)} }); + test(t => { ${nbAssertions(6)} }); `, - `${header} test(t => { t.plan(5); ${nbAssertions(5)} });`, - `${header} test(t => { t.is.skip(1, 1); ${nbAssertions(4)} });`, - `${header} test.cb(t => { ${nbAssertions(5)} t.end(); });`, - { - code: `${header} test(t => { ${nbAssertions(3)} });`, - options: [3] - }, - { - code: `${header} test(t => { notT.is(1, 1); notT.is(1, 1); notT.is(1, 1); });`, - options: [2] - }, - // shouldn't be triggered since it's not a test file - `test(t => { ${nbAssertions(10)} });` - ], - invalid: [ - { - code: `${header} test(t => { ${nbAssertions(6)} });`, - errors - }, - { - code: `${header} - test(t => { ${nbAssertions(3)} }); - test(t => { ${nbAssertions(6)} }); - `, - errors - }, - { - code: `${header} test(t => { t.plan(5); ${nbAssertions(6)} });`, - errors - }, - { - code: `${header} test(t => { t.skip.is(1, 1); ${nbAssertions(5)} });`, - errors - }, - { - code: `${header} test.cb(t => { ${nbAssertions(6)} t.end(); });`, - errors - }, - { - code: `${header} test(t => { ${nbAssertions(4)} });`, - options: [3], - errors - }, - { - code: `${header} test(t => { ${nbAssertions(10)} });`, - errors - }, - { - code: `${header} test(t => { ${nbAssertions(10)} }); test(t => { ${nbAssertions(10)} });`, - errors: errors.concat(errors) // Should have two errors, one per test - } - ] - }); + errors + }, + { + code: `${header} test(t => { t.plan(5); ${nbAssertions(6)} });`, + errors + }, + { + code: `${header} test(t => { t.skip.is(1, 1); ${nbAssertions(5)} });`, + errors + }, + { + code: `${header} test.cb(t => { ${nbAssertions(6)} t.end(); });`, + errors + }, + { + code: `${header} test(t => { ${nbAssertions(4)} });`, + options: [3], + errors + }, + { + code: `${header} test(t => { ${nbAssertions(10)} });`, + errors + }, + { + code: `${header} test(t => { ${nbAssertions(10)} }); test(t => { ${nbAssertions(10)} });`, + errors: errors.concat(errors) // Should have two errors, one per test + } + ] }); diff --git a/test/no-cb-test.js b/test/no-cb-test.js index ee17c8a7..5464f80d 100644 --- a/test/no-cb-test.js +++ b/test/no-cb-test.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-cb-test'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,28 +11,26 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-cb-test'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-cb-test', rule, { - valid: [ - header + 'test("my test name", t => { t.pass(); });', - header + 'test.only("my test name", t => { t.pass(); });', - header + 'notTest.cb(t => { t.pass(); });', - // shouldn't be triggered since it's not a test file - 'test.cb(t => {});' - ], - invalid: [ - { - code: header + 'test.cb(t => { t.pass(); });', - errors - }, - { - code: header + 'test.cb.skip(t => { t.pass(); t.end(); });', - errors - }, - { - code: header + 'test.skip.cb(t => { t.pass(); t.end(); });', - errors - } - ] - }); +ruleTester.run('no-cb-test', rule, { + valid: [ + header + 'test("my test name", t => { t.pass(); });', + header + 'test.only("my test name", t => { t.pass(); });', + header + 'notTest.cb(t => { t.pass(); });', + // shouldn't be triggered since it's not a test file + 'test.cb(t => {});' + ], + invalid: [ + { + code: header + 'test.cb(t => { t.pass(); });', + errors + }, + { + code: header + 'test.cb.skip(t => { t.pass(); t.end(); });', + errors + }, + { + code: header + 'test.skip.cb(t => { t.pass(); t.end(); });', + errors + } + ] }); diff --git a/test/no-identical-title.js b/test/no-identical-title.js index 040dec5a..f611d1f9 100644 --- a/test/no-identical-title.js +++ b/test/no-identical-title.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-identical-title'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,64 +11,62 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-identical-title'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-identical-title', rule, { - valid: [ - header + 'test("my test name", t => {});', - header + 'test("a", t => {}); test(t => {});', - header + 'test("a", t => {}); test("b", t => {});', - header + 'test("a", t => {}); test.cb("b", t => {});', - header + 'test.todo("a"); test.todo("b");', - header + 'test("a", t => {}); notTest("a", t => {});', - header + 'test(`foo ${name}`, t => {}); test(`foo ${name}`, t => {});', - header + 'const name = "foo"; test(name + " 1", t => {}); test(name + " 1", t => {});', - header + 'test("a", t => {}); notTest("a", t => {});', - header + 'notTest("a", t => {}); notTest("a", t => {});', - header + 'test.before(t => {}); test.before(t => {});', - header + 'test.after(t => {}); test.after(t => {});', - header + 'test.beforeEach(t => {}); test.beforeEach(t => {});', - header + 'test.afterEach(t => {}); test.afterEach(t => {});', - header + 'test.cb.before(t => {}); test.before.cb(t => {});', - // multiple anonymous tests covered by the if-multiple rule - header + 'test(t => {}); test(t => {});', - header + 'test(t => {}); test.cb(t => {});', - // shouldn't be triggered since it's not a test file - 'test(t => {}); test(t => {});', - 'test("a", t => {}); test("a", t => {});' - ], - invalid: [ - { - code: header + 'test("a", t => {}); test("a", t => {});', - errors - }, - { - code: header + 'test(`a`, t => {}); test(`a`, t => {});', - errors - }, - { - code: header + 'test("a", t => {}); test.cb("a", t => {});', - errors - }, - { - code: header + 'test(`a`, t => {}); test.cb(`a`, t => {});', - errors - }, - { - code: header + 'test("a", t => {}); test.cb.skip("a", t => {});', - errors - }, - { - code: header + 'test("foo" + 1, t => {}); test("foo" + 1, t => {});', - errors - }, - { - code: header + 'test(`${"foo" + 1}`, t => {}); test(`${"foo" + 1}`, t => {});', - errors - }, - { - code: header + 'test.todo("a"); test.todo("a");', - errors - } - ] - }); +ruleTester.run('no-identical-title', rule, { + valid: [ + header + 'test("my test name", t => {});', + header + 'test("a", t => {}); test(t => {});', + header + 'test("a", t => {}); test("b", t => {});', + header + 'test("a", t => {}); test.cb("b", t => {});', + header + 'test.todo("a"); test.todo("b");', + header + 'test("a", t => {}); notTest("a", t => {});', + header + 'test(`foo ${name}`, t => {}); test(`foo ${name}`, t => {});', + header + 'const name = "foo"; test(name + " 1", t => {}); test(name + " 1", t => {});', + header + 'test("a", t => {}); notTest("a", t => {});', + header + 'notTest("a", t => {}); notTest("a", t => {});', + header + 'test.before(t => {}); test.before(t => {});', + header + 'test.after(t => {}); test.after(t => {});', + header + 'test.beforeEach(t => {}); test.beforeEach(t => {});', + header + 'test.afterEach(t => {}); test.afterEach(t => {});', + header + 'test.cb.before(t => {}); test.before.cb(t => {});', + // multiple anonymous tests covered by the if-multiple rule + header + 'test(t => {}); test(t => {});', + header + 'test(t => {}); test.cb(t => {});', + // shouldn't be triggered since it's not a test file + 'test(t => {}); test(t => {});', + 'test("a", t => {}); test("a", t => {});' + ], + invalid: [ + { + code: header + 'test("a", t => {}); test("a", t => {});', + errors + }, + { + code: header + 'test(`a`, t => {}); test(`a`, t => {});', + errors + }, + { + code: header + 'test("a", t => {}); test.cb("a", t => {});', + errors + }, + { + code: header + 'test(`a`, t => {}); test.cb(`a`, t => {});', + errors + }, + { + code: header + 'test("a", t => {}); test.cb.skip("a", t => {});', + errors + }, + { + code: header + 'test("foo" + 1, t => {}); test("foo" + 1, t => {});', + errors + }, + { + code: header + 'test(`${"foo" + 1}`, t => {}); test(`${"foo" + 1}`, t => {});', + errors + }, + { + code: header + 'test.todo("a"); test.todo("a");', + errors + } + ] }); diff --git a/test/no-ignored-test-files-with-package.js b/test/no-ignored-test-files-with-package.js new file mode 100644 index 00000000..31e41176 --- /dev/null +++ b/test/no-ignored-test-files-with-package.js @@ -0,0 +1,86 @@ +import path from 'path'; +import test from 'ava'; +import avaRuleTester from 'eslint-ava-rule-tester'; +import util from '../util'; +import rule from '../rules/no-ignored-test-files'; + +const ruleTester = avaRuleTester(test, { + env: { + es6: true + } +}); + +const header = `const test = require('ava');\n`; +const rootDir = path.dirname(process.cwd()); + +function toPath(subPath) { + return path.join(rootDir, subPath); +} + +function code(hasHeader) { + return (hasHeader ? header : '') + 'test(t => { t.pass(); });'; +} + +util.getAvaConfig = function mockGetAvaConfig() { + return { + files: ['lib/**/*.test.js'] + }; +}; + +ruleTester.run('no-ignored-test-files', rule, { + valid: [ + { + code: code(true), + filename: toPath('lib/foo.test.js') + }, + { + code: code(true), + filename: toPath('bar/foo.test.js'), + options: [{files: ['bar/**/*.test.js']}] + }, + { + code: code(true), + filename: toPath('bar/foo.test.js'), + options: [{files: 'bar/**/*.test.js'}] + }, + { + code: code(true), + filename: '', + options: [{files: ['lib/**/*.spec.js']}] + } + ], + invalid: [ + { + code: code(true), + filename: toPath('lib/foo/fixtures/bar.test.js'), + errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] + }, + { + code: code(true), + filename: toPath('lib/foo/helpers/bar.test.js'), + errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] + }, + { + code: code(true), + filename: toPath('test.js'), + errors: [{message: 'Test file is ignored because it is not in `lib/**/*.test.js`.'}] + }, + { + code: code(true), + filename: toPath('bar/foo.test.js'), + errors: [{message: 'Test file is ignored because it is not in `lib/**/*.test.js`.'}] + }, + { + code: code(true), + filename: toPath('lib/foo.test.js'), + options: [{files: ['bar/**/*.test.js']}], + errors: [{message: 'Test file is ignored because it is not in `bar/**/*.test.js`.'}] + }, + { + code: code(true), + filename: toPath('lib/foo.test.js'), + options: [{files: 'bar/**/*.test.js'}], + errors: [{message: 'Test file is ignored because it is not in `bar/**/*.test.js`.'}] + } + ] +}); diff --git a/test/no-ignored-test-files-without-package.js b/test/no-ignored-test-files-without-package.js new file mode 100644 index 00000000..75671a14 --- /dev/null +++ b/test/no-ignored-test-files-without-package.js @@ -0,0 +1,105 @@ +import path from 'path'; +import test from 'ava'; +import avaRuleTester from 'eslint-ava-rule-tester'; +import rule from '../rules/no-ignored-test-files'; + +const ruleTester = avaRuleTester(test, { + env: { + es6: true + } +}); + +const header = `const test = require('ava');\n`; +const rootDir = path.dirname(process.cwd()); + +function toPath(subPath) { + return path.join(rootDir, subPath); +} + +function code(hasHeader) { + return (hasHeader ? header : '') + 'test(t => { t.pass(); });'; +} + +ruleTester.run('no-ignored-test-files', rule, { + valid: [ + { + code: code(true), + filename: toPath('test/foo/bar.js') + }, + { + code: code(true), + filename: toPath('test/foo/not-fixtures/bar.js') + }, + { + code: code(true), + filename: toPath('test/foo/not-helpers/bar.js') + }, + { + code: header + 'foo(t => {});', + filename: toPath('test/foo/fixtures/bar.js') + }, + { + code: header + 'foo(t => {});', + filename: toPath('test/foo/helpers/bar.js') + }, + { + code: code(false), + filename: toPath('test/foo/fixtures/bar.js') + }, + { + code: code(false), + filename: toPath('test/foo/helpers/bar.js') + }, + { + code: code(true), + filename: toPath('test.js') + }, + { + code: code(true), + filename: toPath('test-foo.js') + }, + { + code: code(true), + filename: toPath('lib/foo.test.js') + }, + { + code: code(true), + filename: toPath('lib/foo.spec.js'), + options: [{files: ['lib/**/*.spec.js']}] + }, + { + code: code(true), + filename: '', + options: [{files: ['lib/**/*.spec.js']}] + } + ], + invalid: [ + { + code: code(true), + filename: toPath('test/foo/fixtures/bar.js'), + errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] + }, + { + code: code(true), + filename: toPath('test/foo/helpers/bar.js'), + errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] + }, + { + code: code(true), + filename: toPath('lib/foo.spec.js'), + errors: [{message: 'Test file is ignored because it is not in `test.js test-*.js test/**/*.js **/__tests__/**/*.js **/*.test.js`.'}] + }, + { + code: code(true), + filename: toPath('test/foo/bar.js'), + options: [{files: ['lib/**/*.spec.js']}], + errors: [{message: 'Test file is ignored because it is not in `lib/**/*.spec.js`.'}] + }, + { + code: code(true), + filename: toPath('lib/foo.not-test.js'), + options: [{files: ['lib/**/*.spec.js']}], + errors: [{message: 'Test file is ignored because it is not in `lib/**/*.spec.js`.'}] + } + ] +}); diff --git a/test/no-ignored-test-files.js b/test/no-ignored-test-files.js deleted file mode 100644 index 619b7497..00000000 --- a/test/no-ignored-test-files.js +++ /dev/null @@ -1,178 +0,0 @@ -import path from 'path'; -import test from 'ava'; -import {RuleTester} from 'eslint'; -import util from '../util'; -import rule from '../rules/no-ignored-test-files'; - -const ruleTester = new RuleTester({ - env: { - es6: true - } -}); - -const header = `const test = require('ava');\n`; -const rootDir = path.dirname(process.cwd()); - -function toPath(subPath) { - return path.join(rootDir, subPath); -} - -function code(hasHeader) { - return (hasHeader ? header : '') + 'test(t => { t.pass(); });'; -} - -test('without AVA config in package.json', () => { - ruleTester.run('no-ignored-test-files', rule, { - valid: [ - { - code: code(true), - filename: toPath('test/foo/bar.js') - }, - { - code: code(true), - filename: toPath('test/foo/not-fixtures/bar.js') - }, - { - code: code(true), - filename: toPath('test/foo/not-helpers/bar.js') - }, - { - code: header + 'foo(t => {});', - filename: toPath('test/foo/fixtures/bar.js') - }, - { - code: header + 'foo(t => {});', - filename: toPath('test/foo/helpers/bar.js') - }, - { - code: code(false), - filename: toPath('test/foo/fixtures/bar.js') - }, - { - code: code(false), - filename: toPath('test/foo/helpers/bar.js') - }, - { - code: code(true), - filename: toPath('test.js') - }, - { - code: code(true), - filename: toPath('test-foo.js') - }, - { - code: code(true), - filename: toPath('lib/foo.test.js') - }, - { - code: code(true), - filename: toPath('lib/foo.spec.js'), - options: [{files: ['lib/**/*.spec.js']}] - }, - { - code: code(true), - filename: '', - options: [{files: ['lib/**/*.spec.js']}] - } - ], - invalid: [ - { - code: code(true), - filename: toPath('test/foo/fixtures/bar.js'), - errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] - }, - { - code: code(true), - filename: toPath('test/foo/helpers/bar.js'), - errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] - }, - { - code: code(true), - filename: toPath('lib/foo.spec.js'), - errors: [{message: 'Test file is ignored because it is not in `test.js test-*.js test/**/*.js **/__tests__/**/*.js **/*.test.js`.'}] - }, - { - code: code(true), - filename: toPath('test/foo/bar.js'), - options: [{files: ['lib/**/*.spec.js']}], - errors: [{message: 'Test file is ignored because it is not in `lib/**/*.spec.js`.'}] - }, - { - code: code(true), - filename: toPath('lib/foo.not-test.js'), - options: [{files: ['lib/**/*.spec.js']}], - errors: [{message: 'Test file is ignored because it is not in `lib/**/*.spec.js`.'}] - } - ] - }); -}); - -test('with AVA config in package.json', () => { - const oldGetAvaConfig = util.getAvaConfig; - - util.getAvaConfig = function mockGetAvaConfig() { - return { - files: ['lib/**/*.test.js'] - }; - }; - - ruleTester.run('no-ignored-test-files', rule, { - valid: [ - { - code: code(true), - filename: toPath('lib/foo.test.js') - }, - { - code: code(true), - filename: toPath('bar/foo.test.js'), - options: [{files: ['bar/**/*.test.js']}] - }, - { - code: code(true), - filename: toPath('bar/foo.test.js'), - options: [{files: 'bar/**/*.test.js'}] - }, - { - code: code(true), - filename: '', - options: [{files: ['lib/**/*.spec.js']}] - } - ], - invalid: [ - { - code: code(true), - filename: toPath('lib/foo/fixtures/bar.test.js'), - errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] - }, - { - code: code(true), - filename: toPath('lib/foo/helpers/bar.test.js'), - errors: [{message: 'Test file is ignored because it is in `**/fixtures/** **/helpers/**`.'}] - }, - { - code: code(true), - filename: toPath('test.js'), - errors: [{message: 'Test file is ignored because it is not in `lib/**/*.test.js`.'}] - }, - { - code: code(true), - filename: toPath('bar/foo.test.js'), - errors: [{message: 'Test file is ignored because it is not in `lib/**/*.test.js`.'}] - }, - { - code: code(true), - filename: toPath('lib/foo.test.js'), - options: [{files: ['bar/**/*.test.js']}], - errors: [{message: 'Test file is ignored because it is not in `bar/**/*.test.js`.'}] - }, - { - code: code(true), - filename: toPath('lib/foo.test.js'), - options: [{files: 'bar/**/*.test.js'}], - errors: [{message: 'Test file is ignored because it is not in `bar/**/*.test.js`.'}] - } - ] - }); - - util.getAvaConfig = oldGetAvaConfig; -}); diff --git a/test/no-invalid-end.js b/test/no-invalid-end.js index 2fb39a3f..6900ca49 100644 --- a/test/no-invalid-end.js +++ b/test/no-invalid-end.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-invalid-end'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,32 +11,30 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-invalid-end'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-invalid-end', rule, { - valid: [ - header + 'test(t => {});', - header + 'test(t => { t.is(1, 1); });', - header + 'test.only(t => {});', - header + 'test.cb(t => { t.end(); });', - header + 'test.cb(t => { t.end.skip(); });', - header + 'test.cb.only(t => { t.end(); });', - header + 'notTest(t => { t.end(); });', - // shouldn't be triggered since it's not a test file - 'test(t => { t.end(); });' - ], - invalid: [ - { - code: header + 'test(t => { t.end(); });', - errors - }, - { - code: header + 'test.only(t => { t.end(); });', - errors - }, - { - code: header + 'test(t => { t.end.skip(); });', - errors - } - ] - }); +ruleTester.run('no-invalid-end', rule, { + valid: [ + header + 'test(t => {});', + header + 'test(t => { t.is(1, 1); });', + header + 'test.only(t => {});', + header + 'test.cb(t => { t.end(); });', + header + 'test.cb(t => { t.end.skip(); });', + header + 'test.cb.only(t => { t.end(); });', + header + 'notTest(t => { t.end(); });', + // shouldn't be triggered since it's not a test file + 'test(t => { t.end(); });' + ], + invalid: [ + { + code: header + 'test(t => { t.end(); });', + errors + }, + { + code: header + 'test.only(t => { t.end(); });', + errors + }, + { + code: header + 'test(t => { t.end.skip(); });', + errors + } + ] }); diff --git a/test/no-only-test.js b/test/no-only-test.js index 3f63ab24..e98b0fef 100644 --- a/test/no-only-test.js +++ b/test/no-only-test.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-only-test'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,29 +11,27 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-only-test'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-only-test', rule, { - valid: [ - header + 'test("my test name", t => { t.pass(); });', - header + 'test.cb("my test name", t => { t.pass(); t.end(); });', - header + 'test(t => { t.pass(); }); test(t => { t.pass(); });', - header + 'notTest.only();', - // shouldn't be triggered since it's not a test file - 'test.only(t => {});' - ], - invalid: [ - { - code: header + 'test.only(t => { t.pass(); });', - errors - }, - { - code: header + 'test.cb.only(t => { t.pass(); t.end(); });', - errors - }, - { - code: header + 'test.only.cb(t => { t.pass(); t.end(); });', - errors - } - ] - }); +ruleTester.run('no-only-test', rule, { + valid: [ + header + 'test("my test name", t => { t.pass(); });', + header + 'test.cb("my test name", t => { t.pass(); t.end(); });', + header + 'test(t => { t.pass(); }); test(t => { t.pass(); });', + header + 'notTest.only();', + // shouldn't be triggered since it's not a test file + 'test.only(t => {});' + ], + invalid: [ + { + code: header + 'test.only(t => { t.pass(); });', + errors + }, + { + code: header + 'test.cb.only(t => { t.pass(); t.end(); });', + errors + }, + { + code: header + 'test.only.cb(t => { t.pass(); t.end(); });', + errors + } + ] }); diff --git a/test/no-skip-assert.js b/test/no-skip-assert.js index 77db61b9..11aa9bee 100644 --- a/test/no-skip-assert.js +++ b/test/no-skip-assert.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-skip-assert'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,28 +11,26 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-skip-assert'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-skip-assert', rule, { - valid: [ - header + 'test(t => { t.is(1, 1); });', - header + 'test.skip(t => { t.is(1, 1); });', - header + 'test(t => { notT.skip.is(1, 1); });', +ruleTester.run('no-skip-assert', rule, { + valid: [ + header + 'test(t => { t.is(1, 1); });', + header + 'test.skip(t => { t.is(1, 1); });', + header + 'test(t => { notT.skip.is(1, 1); });', // shouldn't be triggered since it's not a test file - 'test(t => { t.skip.is(1, 1); });' - ], - invalid: [ - { - code: header + 'test(t => { t.skip.is(1, 1); });', - errors - }, - { - code: header + 'test.cb(t => { t.skip.is(1, 1); t.end(); });', - errors - }, - { - code: header + 'test.skip(t => { t.skip.is(1, 1); });', - errors - } - ] - }); + 'test(t => { t.skip.is(1, 1); });' + ], + invalid: [ + { + code: header + 'test(t => { t.skip.is(1, 1); });', + errors + }, + { + code: header + 'test.cb(t => { t.skip.is(1, 1); t.end(); });', + errors + }, + { + code: header + 'test.skip(t => { t.skip.is(1, 1); });', + errors + } + ] }); diff --git a/test/no-skip-test.js b/test/no-skip-test.js index 17c5e558..b255d577 100644 --- a/test/no-skip-test.js +++ b/test/no-skip-test.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-skip-test'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,30 +11,28 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-skip-test'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-skip-test', rule, { - valid: [ - header + 'test("my test name", t => { t.pass(); });', - header + 'test.cb("my test name", t => { t.pass(); t.end(); });', - header + 'test(t => { t.pass(); }); test(t => { t.pass(); });', - header + 'test(t => { t.skip.is(1, 2); });', - header + 'notTest.skip();', +ruleTester.run('no-skip-test', rule, { + valid: [ + header + 'test("my test name", t => { t.pass(); });', + header + 'test.cb("my test name", t => { t.pass(); t.end(); });', + header + 'test(t => { t.pass(); }); test(t => { t.pass(); });', + header + 'test(t => { t.skip.is(1, 2); });', + header + 'notTest.skip();', // shouldn't be triggered since it's not a test file - 'test.skip(t => {});' - ], - invalid: [ - { - code: header + 'test.skip(t => { t.pass(); });', - errors - }, - { - code: header + 'test.cb.skip(t => { t.pass(); t.end(); });', - errors - }, - { - code: header + 'test.skip.cb(t => { t.pass(); t.end(); });', - errors - } - ] - }); + 'test.skip(t => {});' + ], + invalid: [ + { + code: header + 'test.skip(t => { t.pass(); });', + errors + }, + { + code: header + 'test.cb.skip(t => { t.pass(); t.end(); });', + errors + }, + { + code: header + 'test.skip.cb(t => { t.pass(); t.end(); });', + errors + } + ] }); diff --git a/test/no-statement-after-end.js b/test/no-statement-after-end.js index cf49dd91..5c3bb96f 100644 --- a/test/no-statement-after-end.js +++ b/test/no-statement-after-end.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-statement-after-end'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -21,35 +21,33 @@ function cbTest(contents, prependHeader) { return ret; } -test(() => { - ruleTester.run('no-statement-after-end', rule, { - valid: [ - cbTest('t.end();'), - cbTest('t.is(1, 1); t.end();'), - cbTest('notT.end(); t.is(1, 1);'), - cbTest('if (t.context.a === 1) { return t.end(); } \n t.is(1, 1); t.end();'), - cbTest('return t.end();'), - cbTest('t.end(); return;'), +ruleTester.run('no-statement-after-end', rule, { + valid: [ + cbTest('t.end();'), + cbTest('t.is(1, 1); t.end();'), + cbTest('notT.end(); t.is(1, 1);'), + cbTest('if (t.context.a === 1) { return t.end(); } \n t.is(1, 1); t.end();'), + cbTest('return t.end();'), + cbTest('t.end(); return;'), // valid because it is not a test file (no header) - cbTest('t.end(); t.is(1, 1);', false) - ], - invalid: [ - { - code: cbTest('t.end(); t.is(1, 1);'), - errors - }, - { - code: cbTest('t.end(); return 3 + 4;'), - errors - }, - { - code: cbTest('t.end(); console.log("end");'), - errors - }, - { - code: cbTest('if (t.context.a === 1) { t.end(); }\nt.is(1, 1); t.end();'), - errors - } - ] - }); + cbTest('t.end(); t.is(1, 1);', false) + ], + invalid: [ + { + code: cbTest('t.end(); t.is(1, 1);'), + errors + }, + { + code: cbTest('t.end(); return 3 + 4;'), + errors + }, + { + code: cbTest('t.end(); console.log("end");'), + errors + }, + { + code: cbTest('if (t.context.a === 1) { t.end(); }\nt.is(1, 1); t.end();'), + errors + } + ] }); diff --git a/test/no-todo-test.js b/test/no-todo-test.js index 271f0434..d22cd755 100644 --- a/test/no-todo-test.js +++ b/test/no-todo-test.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-todo-test'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,28 +11,26 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'no-todo-test'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-todo-test', rule, { - valid: [ - header + 'test("my test name", t => { t.pass(); });', - header + 'test.only("my test name", t => { t.pass(); });', - header + 'notTest.todo(t => { t.pass(); });', +ruleTester.run('no-todo-test', rule, { + valid: [ + header + 'test("my test name", t => { t.pass(); });', + header + 'test.only("my test name", t => { t.pass(); });', + header + 'notTest.todo(t => { t.pass(); });', // shouldn't be triggered since it's not a test file - 'test.todo("my test name");' - ], - invalid: [ - { - code: header + 'test.todo("my test name");', - errors - }, - { - code: header + 'test.todo.cb("my test name");', - errors - }, - { - code: header + 'test.cb.todo("my test name");', - errors - } - ] - }); + 'test.todo("my test name");' + ], + invalid: [ + { + code: header + 'test.todo("my test name");', + errors + }, + { + code: header + 'test.todo.cb("my test name");', + errors + }, + { + code: header + 'test.cb.todo("my test name");', + errors + } + ] }); diff --git a/test/no-unknown-modifiers.js b/test/no-unknown-modifiers.js index 55e2a8c5..54685251 100644 --- a/test/no-unknown-modifiers.js +++ b/test/no-unknown-modifiers.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-unknown-modifiers'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,75 +11,73 @@ const ruleTester = new RuleTester({ const ruleError = {ruleId: 'no-unknown-modifiers'}; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('no-unknown-modifiers', rule, { - valid: [ - `${header} test(t => {});`, - `${header} test.after(t => {});`, - `${header} test.afterEach(t => {});`, - `${header} test.before(t => {});`, - `${header} test.beforeEach(t => {});`, - `${header} test.cb(t => {});`, - `${header} test.cb.only(t => {});`, - `${header} test.only(t => {});`, - `${header} test.serial(t => {});`, - `${header} test.skip(t => {});`, - `${header} test.todo(t => {});`, - `${header} test.after.always(t => {});`, - `${header} test.afterEach.always(t => {});`, - `${header} test.failing(t => {});`, - // shouldn't be triggered since it's not a test file - `test.foo(t => {});` - ], - invalid: [ - { - code: `${header} test.foo(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `foo`.'} - ] - }, - { - code: `${header} test.onlu(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `onlu`.'} - ] - }, - { - code: `${header} test.beforeeach(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `beforeeach`.'} - ] - }, - { - code: `${header} test.c.only(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `c`.'} - ] - }, - { - code: `${header} test.cb.onlu(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `onlu`.'} - ] - }, - { - code: `${header} test.foo.bar.baz(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `foo`.'} - ] - }, - { - code: `${header} test.default(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `default`.'} - ] - }, - { - code: `${header} test.test(t => {});`, - errors: [ - {...ruleError, message: 'Unknown test modifier `test`.'} - ] - } - ] - }); +ruleTester.run('no-unknown-modifiers', rule, { + valid: [ + `${header} test(t => {});`, + `${header} test.after(t => {});`, + `${header} test.afterEach(t => {});`, + `${header} test.before(t => {});`, + `${header} test.beforeEach(t => {});`, + `${header} test.cb(t => {});`, + `${header} test.cb.only(t => {});`, + `${header} test.only(t => {});`, + `${header} test.serial(t => {});`, + `${header} test.skip(t => {});`, + `${header} test.todo(t => {});`, + `${header} test.after.always(t => {});`, + `${header} test.afterEach.always(t => {});`, + `${header} test.failing(t => {});`, + // shouldn't be triggered since it's not a test file + `test.foo(t => {});` + ], + invalid: [ + { + code: `${header} test.foo(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `foo`.'} + ] + }, + { + code: `${header} test.onlu(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `onlu`.'} + ] + }, + { + code: `${header} test.beforeeach(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `beforeeach`.'} + ] + }, + { + code: `${header} test.c.only(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `c`.'} + ] + }, + { + code: `${header} test.cb.onlu(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `onlu`.'} + ] + }, + { + code: `${header} test.foo.bar.baz(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `foo`.'} + ] + }, + { + code: `${header} test.default(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `default`.'} + ] + }, + { + code: `${header} test.test(t => {});`, + errors: [ + {...ruleError, message: 'Unknown test modifier `test`.'} + ] + } + ] }); diff --git a/test/test-ended.js b/test/test-ended.js index 59fac4cc..fc5cc90f 100644 --- a/test/test-ended.js +++ b/test/test-ended.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/test-ended'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,44 +11,42 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'test-ended'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('test-ended', rule, { - valid: [ - header + 'test.cb(function (t) { t.pass(); t.end(); });', - header + 'test.cb(function foo(t) { t.pass(); t.end(); });', - header + 'test.cb(t => { t.pass(); t.end(); });', - header + 'test.cb(t => { t.end(); });', - header + 'test.cb(t => { t.end(); t.pass(); });', - header + 'test.cb(t => { fn(t.end); });', - header + 'test.cb.only(t => { t.end(); });', - header + 'test.cb.skip.only(t => { t.end(); });', - header + 'test.only.cb.skip(t => { t.end(); });', +ruleTester.run('test-ended', rule, { + valid: [ + header + 'test.cb(function (t) { t.pass(); t.end(); });', + header + 'test.cb(function foo(t) { t.pass(); t.end(); });', + header + 'test.cb(t => { t.pass(); t.end(); });', + header + 'test.cb(t => { t.end(); });', + header + 'test.cb(t => { t.end(); t.pass(); });', + header + 'test.cb(t => { fn(t.end); });', + header + 'test.cb.only(t => { t.end(); });', + header + 'test.cb.skip.only(t => { t.end(); });', + header + 'test.only.cb.skip(t => { t.end(); });', // shouldn't be triggered since it's not a callback test - header + 'test(t => { t.pass(); });', + header + 'test(t => { t.pass(); });', // shouldn't be triggered since it's not a test file - 'test.cb(t => {});' - ], - invalid: [ - { - code: header + 'test.cb(function (t) { t.pass(); });', - errors - }, - { - code: header + 'test.cb(t => { t.pass(); });', - errors - }, - { - code: header + 'test.cb(t => {});', - errors - }, - { - code: header + 'test.cb.skip.only(t => {});', - errors - }, - { - code: header + 'test.only.cb.skip(t => {});', - errors - } - ] - }); + 'test.cb(t => {});' + ], + invalid: [ + { + code: header + 'test.cb(function (t) { t.pass(); });', + errors + }, + { + code: header + 'test.cb(t => { t.pass(); });', + errors + }, + { + code: header + 'test.cb(t => {});', + errors + }, + { + code: header + 'test.cb.skip.only(t => {});', + errors + }, + { + code: header + 'test.only.cb.skip(t => {});', + errors + } + ] }); diff --git a/test/test-title.js b/test/test-title.js index df59503f..5be91434 100644 --- a/test/test-title.js +++ b/test/test-title.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/test-title'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -11,104 +11,102 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'test-title'}]; const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('test-title', rule, { - valid: [ +ruleTester.run('test-title', rule, { + valid: [ // default options should be `['if-multiple']` - header + 'test(t => { t.pass(); t.end(); });', - { - code: header + 'test("my test name", t => { t.pass(); t.end(); });', - options: ['always'] - }, - { - code: header + 'test(`my test name`, t => { t.pass(); t.end(); });', - options: ['always'] - }, - { - code: header + 'test(\'my test name\', t => { t.pass(); t.end(); });', - options: ['always'] - }, - { - code: header + 'test.cb("my test name", t => { t.pass(); t.end(); });', - options: ['always'] - }, - { - code: header + 'test.todo("my test name");', - options: ['always'] - }, - { - code: header + 'test.before(t => {});', - options: ['always'] - }, - { - code: header + 'test.after(t => {});', - options: ['always'] - }, - { - code: header + 'test.beforeEach(t => {});', - options: ['always'] - }, - { - code: header + 'test.afterEach(t => {});', - options: ['always'] - }, - { - code: header + 'test.cb.before(t => {}); test.before.cb(t => {});', - options: ['always'] - }, - { - code: header + 'test(t => { t.pass(); t.end(); });', - options: ['if-multiple'] - }, - { - code: header + 'notTest(t => { t.pass(); t.end(); });', - options: ['always'] - }, - { - code: header + 'test(macroFn, arg1, arg2);', - options: ['always'] - }, + header + 'test(t => { t.pass(); t.end(); });', + { + code: header + 'test("my test name", t => { t.pass(); t.end(); });', + options: ['always'] + }, + { + code: header + 'test(`my test name`, t => { t.pass(); t.end(); });', + options: ['always'] + }, + { + code: header + 'test(\'my test name\', t => { t.pass(); t.end(); });', + options: ['always'] + }, + { + code: header + 'test.cb("my test name", t => { t.pass(); t.end(); });', + options: ['always'] + }, + { + code: header + 'test.todo("my test name");', + options: ['always'] + }, + { + code: header + 'test.before(t => {});', + options: ['always'] + }, + { + code: header + 'test.after(t => {});', + options: ['always'] + }, + { + code: header + 'test.beforeEach(t => {});', + options: ['always'] + }, + { + code: header + 'test.afterEach(t => {});', + options: ['always'] + }, + { + code: header + 'test.cb.before(t => {}); test.before.cb(t => {});', + options: ['always'] + }, + { + code: header + 'test(t => { t.pass(); t.end(); });', + options: ['if-multiple'] + }, + { + code: header + 'notTest(t => { t.pass(); t.end(); });', + options: ['always'] + }, + { + code: header + 'test(macroFn, arg1, arg2);', + options: ['always'] + }, // shouldn't be triggered since it's not a test file - { - code: 'test(t => {});', - options: ['always'] - } - ], - invalid: [ - { - code: header + 'test(t => {}); test(t => {});', - errors - }, - { - code: header + 'test(t => { t.pass(); t.end(); });', - options: ['always'], - errors - }, - { - code: header + 'test.cb(t => { t.pass(); t.end(); });', - options: ['always'], - errors - }, - { - code: header + 'test.cb.skip(t => { t.pass(); t.end(); });', - options: ['always'], - errors - }, - { - code: header + 'test(t => { t.pass(); t.end(); });', - options: ['always'], - errors - }, - { - code: header + 'test.todo();', - options: ['always'], - errors - }, - { - code: header + 'test(t => {}); test(t => {});', - options: ['if-multiple'], - errors - } - ] - }); + { + code: 'test(t => {});', + options: ['always'] + } + ], + invalid: [ + { + code: header + 'test(t => {}); test(t => {});', + errors + }, + { + code: header + 'test(t => { t.pass(); t.end(); });', + options: ['always'], + errors + }, + { + code: header + 'test.cb(t => { t.pass(); t.end(); });', + options: ['always'], + errors + }, + { + code: header + 'test.cb.skip(t => { t.pass(); t.end(); });', + options: ['always'], + errors + }, + { + code: header + 'test(t => { t.pass(); t.end(); });', + options: ['always'], + errors + }, + { + code: header + 'test.todo();', + options: ['always'], + errors + }, + { + code: header + 'test(t => {}); test(t => {});', + options: ['if-multiple'], + errors + } + ] }); diff --git a/test/use-t-well.js b/test/use-t-well.js index fd150194..66c3db0a 100644 --- a/test/use-t-well.js +++ b/test/use-t-well.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/use-t-well'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -21,118 +21,116 @@ function testCase(contents, prependHeader) { return content; } -test(() => { - ruleTester.run('use-t-well', rule, { - valid: [ - testCase('t;'), - testCase('fn(t);'), - testCase('t.end();'), - testCase('t.pass();'), - testCase('t.fail();'), - testCase('t.truthy(v);'), - testCase('t.falsy(v);'), - testCase('t.true(v);'), - testCase('t.false(v);'), - testCase('t.is(v);'), - testCase('t.not(v);'), - testCase('t.deepEqual(v, v);'), - testCase('t.notDeepEqual(v, v);'), - testCase('t.throws(fn);'), - testCase('t.notThrows(fn);'), - testCase('t.regex(v, /v/);'), - testCase('t.notRegex(v, /v/);'), - testCase('t.ifError(error);'), - testCase('t.deepEqual.skip(a, a);'), - testCase('t.skip.deepEqual(a, a);'), - testCase('t.context.a = 1;'), - testCase('t.context.foo.skip();'), - testCase('setImmediate(t.end);'), - testCase('t.deepEqual;'), - testCase('t.plan(1);'), - testCase('a.foo();'), - // shouldn't be triggered since it's not a test file - testCase('t.foo(a, a);', false), - testCase('t.foo;', false) - ], - invalid: [ - { - code: testCase('t();'), - errors: [ - {...ruleError, message: '`t` is not a function.'} - ] - }, - { - code: testCase('t.foo(a, a);'), - errors: [ - {...ruleError, message: 'Unknown assertion method `foo`.'} - ] - }, - { - code: testCase('t.depEqual(a, a);'), - errors: [ - {...ruleError, message: 'Unknown assertion method `depEqual`.'} - ] - }, - { - code: testCase('t.deepEqual.skp(a, a);'), - errors: [ - {...ruleError, message: 'Unknown assertion method `skp`.'} - ] - }, - { - code: testCase('t.skp.deepEqual(a, a);'), - errors: [ - {...ruleError, message: 'Unknown assertion method `skp`.'} - ] - }, - { - code: testCase('t.context();'), - errors: [ - {...ruleError, message: 'Unknown assertion method `context`.'} - ] - }, - { - code: testCase('t.a = 1;'), - errors: [ - {...ruleError, message: 'Unknown member `a`. Use `context.a` instead.'} - ] - }, - { - code: testCase('t.ctx.a = 1;'), - errors: [ - {...ruleError, message: 'Unknown member `ctx`. Use `context.ctx` instead.'} - ] - }, - { - code: testCase('t.deepEqu;'), - errors: [ - {...ruleError, message: 'Unknown member `deepEqu`. Use `context.deepEqu` instead.'} - ] - }, - { - code: testCase('t.deepEqual.is(a, a);'), - errors: [ - {...ruleError, message: `Can't chain assertion methods.`} - ] - }, - { - code: testCase('t.paln(1);'), - errors: [ - {...ruleError, message: 'Unknown assertion method `paln`.'} - ] - }, - { - code: testCase('t.skip();'), - errors: [ - {...ruleError, message: 'Missing assertion method.'} - ] - }, - { - code: testCase('t.deepEqual.skip.skip(a, a);'), - errors: [ - {...ruleError, message: 'Too many chained uses of `skip`.'} - ] - } - ] - }); +ruleTester.run('use-t-well', rule, { + valid: [ + testCase('t;'), + testCase('fn(t);'), + testCase('t.end();'), + testCase('t.pass();'), + testCase('t.fail();'), + testCase('t.truthy(v);'), + testCase('t.falsy(v);'), + testCase('t.true(v);'), + testCase('t.false(v);'), + testCase('t.is(v);'), + testCase('t.not(v);'), + testCase('t.deepEqual(v, v);'), + testCase('t.notDeepEqual(v, v);'), + testCase('t.throws(fn);'), + testCase('t.notThrows(fn);'), + testCase('t.regex(v, /v/);'), + testCase('t.notRegex(v, /v/);'), + testCase('t.ifError(error);'), + testCase('t.deepEqual.skip(a, a);'), + testCase('t.skip.deepEqual(a, a);'), + testCase('t.context.a = 1;'), + testCase('t.context.foo.skip();'), + testCase('setImmediate(t.end);'), + testCase('t.deepEqual;'), + testCase('t.plan(1);'), + testCase('a.foo();'), + // shouldn't be triggered since it's not a test file + testCase('t.foo(a, a);', false), + testCase('t.foo;', false) + ], + invalid: [ + { + code: testCase('t();'), + errors: [ + {...ruleError, message: '`t` is not a function.'} + ] + }, + { + code: testCase('t.foo(a, a);'), + errors: [ + {...ruleError, message: 'Unknown assertion method `foo`.'} + ] + }, + { + code: testCase('t.depEqual(a, a);'), + errors: [ + {...ruleError, message: 'Unknown assertion method `depEqual`.'} + ] + }, + { + code: testCase('t.deepEqual.skp(a, a);'), + errors: [ + {...ruleError, message: 'Unknown assertion method `skp`.'} + ] + }, + { + code: testCase('t.skp.deepEqual(a, a);'), + errors: [ + {...ruleError, message: 'Unknown assertion method `skp`.'} + ] + }, + { + code: testCase('t.context();'), + errors: [ + {...ruleError, message: 'Unknown assertion method `context`.'} + ] + }, + { + code: testCase('t.a = 1;'), + errors: [ + {...ruleError, message: 'Unknown member `a`. Use `context.a` instead.'} + ] + }, + { + code: testCase('t.ctx.a = 1;'), + errors: [ + {...ruleError, message: 'Unknown member `ctx`. Use `context.ctx` instead.'} + ] + }, + { + code: testCase('t.deepEqu;'), + errors: [ + {...ruleError, message: 'Unknown member `deepEqu`. Use `context.deepEqu` instead.'} + ] + }, + { + code: testCase('t.deepEqual.is(a, a);'), + errors: [ + {...ruleError, message: `Can't chain assertion methods.`} + ] + }, + { + code: testCase('t.paln(1);'), + errors: [ + {...ruleError, message: 'Unknown assertion method `paln`.'} + ] + }, + { + code: testCase('t.skip();'), + errors: [ + {...ruleError, message: 'Missing assertion method.'} + ] + }, + { + code: testCase('t.deepEqual.skip.skip(a, a);'), + errors: [ + {...ruleError, message: 'Too many chained uses of `skip`.'} + ] + } + ] }); diff --git a/test/use-t.js b/test/use-t.js index ecab09aa..116de3ac 100644 --- a/test/use-t.js +++ b/test/use-t.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/use-t'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true }, @@ -23,49 +23,47 @@ const tooManyParametersErrors = [{ const header = `const test = require('ava');\n`; -test(() => { - ruleTester.run('use-t', rule, { - valid: [ - header + 'test();', - header + 'test(() => {});', - header + 'test(t => {});', - header + 'test.cb(t => {});', +ruleTester.run('use-t', rule, { + valid: [ + header + 'test();', + header + 'test(() => {});', + header + 'test(t => {});', + header + 'test.cb(t => {});', // header + 'test("test name", t => {});', - header + 'test(function (t) {});', - header + 'test(testFunction);', - header + 'test.todo("test name");', + header + 'test(function (t) {});', + header + 'test(testFunction);', + header + 'test.todo("test name");', // shouldn't be triggered since it's not a test file - 'test(foo => {});' - ], - invalid: [ - { - code: header + 'test(foo => {});', - errors: parameterNotNamedTErrors - }, - { - code: header + 'test("test name", foo => {});', - errors: parameterNotNamedTErrors - }, - { - code: header + 'test.cb(foo => { foo.end(); });', - errors: parameterNotNamedTErrors - }, - { - code: header + 'test(function (foo) {});', - errors: parameterNotNamedTErrors - }, - { - code: header + 'test((t, foo) => {});', - errors: tooManyParametersErrors - }, - { - code: header + 'test((foo, t) => {});', - errors: tooManyParametersErrors - }, - { - code: header + 'test("test name", (t, foo) => {});', - errors: tooManyParametersErrors - } - ] - }); + 'test(foo => {});' + ], + invalid: [ + { + code: header + 'test(foo => {});', + errors: parameterNotNamedTErrors + }, + { + code: header + 'test("test name", foo => {});', + errors: parameterNotNamedTErrors + }, + { + code: header + 'test.cb(foo => { foo.end(); });', + errors: parameterNotNamedTErrors + }, + { + code: header + 'test(function (foo) {});', + errors: parameterNotNamedTErrors + }, + { + code: header + 'test((t, foo) => {});', + errors: tooManyParametersErrors + }, + { + code: header + 'test((foo, t) => {});', + errors: tooManyParametersErrors + }, + { + code: header + 'test("test name", (t, foo) => {});', + errors: tooManyParametersErrors + } + ] }); diff --git a/test/use-test.js b/test/use-test.js index 8dbe5313..63bd8fab 100644 --- a/test/use-test.js +++ b/test/use-test.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/use-test'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true }, @@ -13,39 +13,37 @@ const ruleTester = new RuleTester({ const errors = [{ruleId: 'use-test'}]; -test(() => { - ruleTester.run('use-test', rule, { - valid: [ - `var test = require('ava');`, - `let test = require('ava');`, - `const test = require('ava');`, - `const a = 1, test = require('ava'), b = 2;`, - `const test = require('foo');`, - `import test from 'ava';`, - `import test, {} from 'ava';`, - `import test from 'foo';` - ], - invalid: [ - { - code: `var ava = require('ava');`, - errors - }, - { - code: `let ava = require('ava');`, - errors - }, - { - code: `const ava = require('ava');`, - errors - }, - { - code: `const a = 1, ava = require('ava'), b = 2;`, - errors - }, - { - code: `import ava from 'ava';`, - errors - } - ] - }); +ruleTester.run('use-test', rule, { + valid: [ + `var test = require('ava');`, + `let test = require('ava');`, + `const test = require('ava');`, + `const a = 1, test = require('ava'), b = 2;`, + `const test = require('foo');`, + `import test from 'ava';`, + `import test, {} from 'ava';`, + `import test from 'foo';` + ], + invalid: [ + { + code: `var ava = require('ava');`, + errors + }, + { + code: `let ava = require('ava');`, + errors + }, + { + code: `const ava = require('ava');`, + errors + }, + { + code: `const a = 1, ava = require('ava'), b = 2;`, + errors + }, + { + code: `import ava from 'ava';`, + errors + } + ] }); diff --git a/test/use-true-false.js b/test/use-true-false.js index 76d8f26b..600009dc 100644 --- a/test/use-true-false.js +++ b/test/use-true-false.js @@ -1,8 +1,8 @@ import test from 'ava'; -import {RuleTester} from 'eslint'; +import avaRuleTester from 'eslint-ava-rule-tester'; import rule from '../rules/use-true-false'; -const ruleTester = new RuleTester({ +const ruleTester = avaRuleTester(test, { env: { es6: true } @@ -30,94 +30,92 @@ function testCase(contents, prependHeader) { return content; } -test(() => { - ruleTester.run('use-true-false', rule, { - valid: [ - testCase('t.true(true)'), - testCase('t.true(false)'), - testCase('t.true(value == 1)'), - testCase('t.true(value === 1)'), - testCase('t.true(value != 1)'), - testCase('t.true(value !== 1)'), - testCase('t.true(value < 1)'), - testCase('t.true(value <= 1)'), - testCase('t.true(value > 1)'), - testCase('t.true(value >= 1)'), - testCase('t.true(!value)'), - testCase('t.true(!!value)'), - testCase('t.false(value === 1)'), - testCase('t.truthy(value)'), - testCase('t.truthy(value())'), - testCase('t.truthy(value + value)'), - testCase('t.falsy(value)'), - testCase('t.falsy(value())'), - testCase('t.falsy(value + value)'), - testCase('t.truthy()'), - testCase('t.falsy()'), +ruleTester.run('use-true-false', rule, { + valid: [ + testCase('t.true(true)'), + testCase('t.true(false)'), + testCase('t.true(value == 1)'), + testCase('t.true(value === 1)'), + testCase('t.true(value != 1)'), + testCase('t.true(value !== 1)'), + testCase('t.true(value < 1)'), + testCase('t.true(value <= 1)'), + testCase('t.true(value > 1)'), + testCase('t.true(value >= 1)'), + testCase('t.true(!value)'), + testCase('t.true(!!value)'), + testCase('t.false(value === 1)'), + testCase('t.truthy(value)'), + testCase('t.truthy(value())'), + testCase('t.truthy(value + value)'), + testCase('t.falsy(value)'), + testCase('t.falsy(value())'), + testCase('t.falsy(value + value)'), + testCase('t.truthy()'), + testCase('t.falsy()'), // shouldn't be triggered since it's not a test file - testCase('t.truthy(value === 1)', false) - ], - invalid: [ - { - code: testCase('t.truthy(true)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(false)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value == 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value === 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value != 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value !== 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value < 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value <= 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value > 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(value >= 1)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(!value)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(!!value)'), - errors: trueErrors - }, - { - code: testCase('t.truthy(Array.isArray(value))'), - errors: trueErrors - }, - { - code: testCase('t.truthy(isFinite(3))'), - errors: trueErrors - }, - { - code: testCase('t.falsy(value === 1)'), - errors: falseErrors - } - ] - }); + testCase('t.truthy(value === 1)', false) + ], + invalid: [ + { + code: testCase('t.truthy(true)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(false)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value == 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value === 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value != 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value !== 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value < 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value <= 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value > 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(value >= 1)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(!value)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(!!value)'), + errors: trueErrors + }, + { + code: testCase('t.truthy(Array.isArray(value))'), + errors: trueErrors + }, + { + code: testCase('t.truthy(isFinite(3))'), + errors: trueErrors + }, + { + code: testCase('t.falsy(value === 1)'), + errors: falseErrors + } + ] });