From f087cf842fc1011ab6047a40900e93fa0c2cbabe Mon Sep 17 00:00:00 2001 From: Raja Sekar Date: Sat, 16 Nov 2019 12:32:19 +0100 Subject: [PATCH] Mocha to jest migration for eslint packages (#10716) * migrated mocha to jest * migrated mocha to jest - 2 * migrated mocha to jest - removed preversion hook from script * migrated mocha to jest - 3 * migrated mocha to jest - 4 * cleanup * review * review --- eslint/babel-eslint-parser/package.json | 4 +- .../test/{specs => }/babel-eslint.js | 29 +++++++++----- .../{ => fixtures/config}/babel.config.js | 0 .../test/{specs => }/integration.js | 38 +++++++++---------- .../test/{specs => }/non-regression.js | 12 ++++-- .../package.json | 6 +-- .../rules/no-deprecated-clone.js | 0 .../rules/no-undefined-identifier.js | 0 .../{tests => test}/rules/plugin-name.js | 0 eslint/babel-eslint-plugin/package.json | 6 +-- .../{tests => test/helpers}/RuleTester.js | 0 .../{tests => test}/rules/camelcase.js | 2 +- .../{tests => test}/rules/new-cap.js | 2 +- .../{tests => test}/rules/no-invalid-this.js | 4 +- .../rules/no-unused-expressions.js | 2 +- .../rules/object-curly-spacing.js | 2 +- .../{tests => test}/rules/quotes.js | 2 +- .../{tests => test}/rules/semi.js | 2 +- .../{tests => test}/rules/valid-typeof.js | 2 +- package.json | 6 ++- scripts/test.sh | 2 +- 21 files changed, 63 insertions(+), 58 deletions(-) rename eslint/babel-eslint-parser/test/{specs => }/babel-eslint.js (96%) rename eslint/babel-eslint-parser/test/{ => fixtures/config}/babel.config.js (100%) rename eslint/babel-eslint-parser/test/{specs => }/integration.js (85%) rename eslint/babel-eslint-parser/test/{specs => }/non-regression.js (99%) rename eslint/babel-eslint-plugin-development/{tests => test}/rules/no-deprecated-clone.js (100%) rename eslint/babel-eslint-plugin-development/{tests => test}/rules/no-undefined-identifier.js (100%) rename eslint/babel-eslint-plugin-development/{tests => test}/rules/plugin-name.js (100%) rename eslint/babel-eslint-plugin/{tests => test/helpers}/RuleTester.js (100%) rename eslint/babel-eslint-plugin/{tests => test}/rules/camelcase.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/new-cap.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/no-invalid-this.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/no-unused-expressions.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/object-curly-spacing.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/quotes.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/semi.js (99%) rename eslint/babel-eslint-plugin/{tests => test}/rules/valid-typeof.js (99%) diff --git a/eslint/babel-eslint-parser/package.json b/eslint/babel-eslint-parser/package.json index 7192d29cdf..6cb74e76f2 100644 --- a/eslint/babel-eslint-parser/package.json +++ b/eslint/babel-eslint-parser/package.json @@ -14,7 +14,6 @@ }, "homepage": "https://github.com/babel/babel-eslint", "scripts": { - "test": "cd test && mocha specs && cd -", "changelog": "git log `git describe --tags --abbrev=0`..HEAD --pretty=format:' * %s (%an)' | grep -v 'Merge pull request'" }, "engines": { @@ -50,7 +49,6 @@ "@babel/preset-react": "^7.0.0", "dedent": "^0.7.0", "eslint": "^6.0.1", - "espree": "^6.0.0", - "mocha": "^6.1.4" + "espree": "^6.0.0" } } diff --git a/eslint/babel-eslint-parser/test/specs/babel-eslint.js b/eslint/babel-eslint-parser/test/babel-eslint.js similarity index 96% rename from eslint/babel-eslint-parser/test/specs/babel-eslint.js rename to eslint/babel-eslint-parser/test/babel-eslint.js index 7dedf38192..6d812e4c54 100644 --- a/eslint/babel-eslint-parser/test/specs/babel-eslint.js +++ b/eslint/babel-eslint-parser/test/babel-eslint.js @@ -1,11 +1,19 @@ "use strict"; const assert = require("assert"); -const babelEslint = require("../.."); +const path = require("path"); +const babelEslint = require("../"); const espree = require("espree"); const escope = require("eslint-scope"); const unpad = require("dedent"); -const assertImplementsAST = require("../helpers/assert-implements-ast"); +const assertImplementsAST = require("./helpers/assert-implements-ast"); + +const babelOptions = { + configFile: path.resolve( + __dirname, + "./fixtures/config/babel.config.js" + ), +} function parseAndAssertSame(code) { code = unpad(code); @@ -30,6 +38,7 @@ function parseAndAssertSame(code) { const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, + babelOptions, }).ast; assertImplementsAST(esAST, babylonAST); } @@ -40,15 +49,11 @@ describe("babylon-to-espree", () => { const esAST = babelEslint.parseForESLint("`test`", { eslintScopeManager: true, eslintVisitorKeys: true, + babelOptions, }).ast; - - assert.doesNotThrow( - () => { - escope.analyze(esAST); - }, - TypeError, - "Should allow no options argument." - ); + expect(() => { + escope.analyze(esAST) + }).not.toThrow(new TypeError('Should allow no options argument.')); }); }); @@ -243,6 +248,7 @@ describe("babylon-to-espree", () => { const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, + babelOptions, }).ast; assert.strictEqual(babylonAST.tokens[1].type, "Punctuator"); }); @@ -253,6 +259,7 @@ describe("babylon-to-espree", () => { const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, + babelOptions, }).ast; assert.strictEqual(babylonAST.tokens[1].type, "Punctuator"); }); @@ -263,6 +270,7 @@ describe("babylon-to-espree", () => { const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, + babelOptions, }).ast; assert.strictEqual(babylonAST.tokens[1].type, "Punctuator"); }); @@ -273,6 +281,7 @@ describe("babylon-to-espree", () => { const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, + babelOptions, }).ast; assert.strictEqual(babylonAST.tokens[3].type, "Punctuator"); assert.strictEqual(babylonAST.tokens[3].value, "#"); diff --git a/eslint/babel-eslint-parser/test/babel.config.js b/eslint/babel-eslint-parser/test/fixtures/config/babel.config.js similarity index 100% rename from eslint/babel-eslint-parser/test/babel.config.js rename to eslint/babel-eslint-parser/test/fixtures/config/babel.config.js diff --git a/eslint/babel-eslint-parser/test/specs/integration.js b/eslint/babel-eslint-parser/test/integration.js similarity index 85% rename from eslint/babel-eslint-parser/test/specs/integration.js rename to eslint/babel-eslint-parser/test/integration.js index d13a5aa3ff..8503bd5826 100644 --- a/eslint/babel-eslint-parser/test/specs/integration.js +++ b/eslint/babel-eslint-parser/test/integration.js @@ -1,16 +1,15 @@ "use strict"; -const assert = require("assert"); const eslint = require("eslint"); const fs = require("fs"); const path = require("path"); -const parser = require("../.."); +const parser = require("../"); eslint.linter.defineParser("current-babel-eslint", parser); const paths = { - fixtures: path.join(__dirname, "..", "fixtures", "rules"), + fixtures: path.join(__dirname, "fixtures", "rules"), }; const encoding = "utf8"; @@ -71,7 +70,7 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(report[0].ruleId === ruleId); + expect(report[0].ruleId).toBe(ruleId); done(); } ); @@ -95,7 +94,7 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(!report.length); + expect(report.length).toBe(0); done(); } ); @@ -111,7 +110,7 @@ function strictSuite() { (err, report) => { if (err) return done(err); [0, 1].forEach(i => { - assert(report[i].ruleId === ruleId); + expect(report[0].ruleId).toBe(ruleId); }); done(); } @@ -127,13 +126,12 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(report[0].ruleId === ruleId); - + expect(report[0].ruleId).toBe(ruleId); // This is to make sure the test fails prior to adapting Babel AST // directive representation to ESLint format. Otherwise it reports an // error for missing global directive that masquerades as the expected // result of the previous assertion. - assert(report[0].nodeType !== "Program"); + expect(report[0].nodeType).not.toBe("Program"); done(); } ); @@ -148,7 +146,7 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(report[0].ruleId === ruleId); + expect(report[0].ruleId).toBe(ruleId); done(); } ); @@ -171,7 +169,7 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(!report.length); + expect(report.length).toBe(0); done(); } ); @@ -187,7 +185,7 @@ function strictSuite() { (err, report) => { if (err) return done(err); [0, 1].forEach(i => { - assert(report[i].ruleId === ruleId); + expect(report[i].ruleId).toBe(ruleId); }); done(); } @@ -203,7 +201,7 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(report[0].ruleId === ruleId); + expect(report[0].ruleId).toBe(ruleId); done(); } ); @@ -218,8 +216,8 @@ function strictSuite() { }, (err, report) => { if (err) return done(err); - assert(report[0].ruleId === ruleId); - assert(report[0].nodeType.indexOf("Function") === -1); + expect(report[0].ruleId).toBe(ruleId); + expect(report[0].nodeType.indexOf("Function")).toBe(-1); done(); } ); @@ -231,10 +229,10 @@ function strictSuite() { describe("https://github.com/babel/babel-eslint/issues/558", () => { it("doesn't crash with eslint-plugin-import", () => { const engine = new eslint.CLIEngine({ ignore: false }); - engine.executeOnFiles([ - "fixtures/eslint-plugin-import/a.js", - "fixtures/eslint-plugin-import/b.js", - "fixtures/eslint-plugin-import/c.js", - ]); + const files = ['a.js', 'b.js', 'c.js']; + let fileWithPath = files.map(file => + path.resolve(__dirname, `./fixtures/eslint-plugin-import/${file}`)); + engine.executeOnFiles(fileWithPath); }); }); + diff --git a/eslint/babel-eslint-parser/test/specs/non-regression.js b/eslint/babel-eslint-parser/test/non-regression.js similarity index 99% rename from eslint/babel-eslint-parser/test/specs/non-regression.js rename to eslint/babel-eslint-parser/test/non-regression.js index 58d7056c42..c4add4ab08 100644 --- a/eslint/babel-eslint-parser/test/specs/non-regression.js +++ b/eslint/babel-eslint-parser/test/non-regression.js @@ -4,7 +4,7 @@ const eslint = require("eslint"); const path = require("path"); const unpad = require("dedent"); -const parser = require("../.."); +const parser = require("../"); function verifyAndAssertMessagesWithSpecificESLint( code, @@ -26,7 +26,13 @@ function verifyAndAssertMessagesWithSpecificESLint( ecmaFeatures: { globalReturn: true, }, - }, + babelOptions: { + configFile: path.resolve( + __dirname, + "./fixtures/config/babel.config.js" + ), + }, + } }; if (overrideConfig) { @@ -1162,7 +1168,7 @@ describe("verify", () => { babelOptions: { configFile: path.resolve( __dirname, - "../fixtures/config/babel.config.decorators-legacy.js" + "./fixtures/config/babel.config.decorators-legacy.js" ), }, }, diff --git a/eslint/babel-eslint-plugin-development/package.json b/eslint/babel-eslint-plugin-development/package.json index 96199d9cbd..1cb2805898 100644 --- a/eslint/babel-eslint-plugin-development/package.json +++ b/eslint/babel-eslint-plugin-development/package.json @@ -14,12 +14,8 @@ "url": "https://github.com/nicolo-ribaudo" }, "main": "src/index.js", - "scripts": { - "test": "mocha tests --recursive" - }, "devDependencies": { - "eslint": "^5.9.0", - "mocha": "^5.2.0" + "eslint": "^5.9.0" }, "engines": { "node": ">=8.0.0" diff --git a/eslint/babel-eslint-plugin-development/tests/rules/no-deprecated-clone.js b/eslint/babel-eslint-plugin-development/test/rules/no-deprecated-clone.js similarity index 100% rename from eslint/babel-eslint-plugin-development/tests/rules/no-deprecated-clone.js rename to eslint/babel-eslint-plugin-development/test/rules/no-deprecated-clone.js diff --git a/eslint/babel-eslint-plugin-development/tests/rules/no-undefined-identifier.js b/eslint/babel-eslint-plugin-development/test/rules/no-undefined-identifier.js similarity index 100% rename from eslint/babel-eslint-plugin-development/tests/rules/no-undefined-identifier.js rename to eslint/babel-eslint-plugin-development/test/rules/no-undefined-identifier.js diff --git a/eslint/babel-eslint-plugin-development/tests/rules/plugin-name.js b/eslint/babel-eslint-plugin-development/test/rules/plugin-name.js similarity index 100% rename from eslint/babel-eslint-plugin-development/tests/rules/plugin-name.js rename to eslint/babel-eslint-plugin-development/test/rules/plugin-name.js diff --git a/eslint/babel-eslint-plugin/package.json b/eslint/babel-eslint-plugin/package.json index 32b7d09e1c..b4780d73d6 100644 --- a/eslint/babel-eslint-plugin/package.json +++ b/eslint/babel-eslint-plugin/package.json @@ -3,9 +3,6 @@ "version": "5.3.0", "description": "an eslint rule plugin companion to babel-eslint", "main": "index.js", - "scripts": { - "test": "mocha ./tests/rules/*.js" - }, "repository": { "type": "git", "url": "git+https://github.com/babel/eslint-plugin-babel.git" @@ -36,7 +33,6 @@ "devDependencies": { "babel-eslint": "^8.2.2", "eslint": "^4.19.1", - "lodash.clonedeep": "^4.5.0", - "mocha": "^5.2.0" + "lodash.clonedeep": "^4.5.0" } } diff --git a/eslint/babel-eslint-plugin/tests/RuleTester.js b/eslint/babel-eslint-plugin/test/helpers/RuleTester.js similarity index 100% rename from eslint/babel-eslint-plugin/tests/RuleTester.js rename to eslint/babel-eslint-plugin/test/helpers/RuleTester.js diff --git a/eslint/babel-eslint-plugin/tests/rules/camelcase.js b/eslint/babel-eslint-plugin/test/rules/camelcase.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/camelcase.js rename to eslint/babel-eslint-plugin/test/rules/camelcase.js index 0344018515..af399b4133 100644 --- a/eslint/babel-eslint-plugin/tests/rules/camelcase.js +++ b/eslint/babel-eslint-plugin/test/rules/camelcase.js @@ -10,7 +10,7 @@ //------------------------------------------------------------------------------ const rule = require("../../rules/camelcase"), - RuleTester = require("../RuleTester"); + RuleTester = require("../helpers/RuleTester"); //------------------------------------------------------------------------------ // Tests diff --git a/eslint/babel-eslint-plugin/tests/rules/new-cap.js b/eslint/babel-eslint-plugin/test/rules/new-cap.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/new-cap.js rename to eslint/babel-eslint-plugin/test/rules/new-cap.js index c37f2e9f06..225867e597 100644 --- a/eslint/babel-eslint-plugin/tests/rules/new-cap.js +++ b/eslint/babel-eslint-plugin/test/rules/new-cap.js @@ -4,7 +4,7 @@ */ var rule = require('../../rules/new-cap'), - RuleTester = require('../RuleTester'); + RuleTester = require("../helpers/RuleTester"); var ruleTester = new RuleTester(); ruleTester.run('babel/new-cap', rule, { diff --git a/eslint/babel-eslint-plugin/tests/rules/no-invalid-this.js b/eslint/babel-eslint-plugin/test/rules/no-invalid-this.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/no-invalid-this.js rename to eslint/babel-eslint-plugin/test/rules/no-invalid-this.js index e28c77aa5e..b4c385b466 100644 --- a/eslint/babel-eslint-plugin/tests/rules/no-invalid-this.js +++ b/eslint/babel-eslint-plugin/test/rules/no-invalid-this.js @@ -10,8 +10,8 @@ //------------------------------------------------------------------------------ const cloneDeep = require("lodash.clonedeep"); -const rule = require("../../rules/no-invalid-this"); -const RuleTester = require("../RuleTester"); +const rule = require("../../rules/no-invalid-this"), + RuleTester = require("../helpers/RuleTester"); //------------------------------------------------------------------------------ // Helpers diff --git a/eslint/babel-eslint-plugin/tests/rules/no-unused-expressions.js b/eslint/babel-eslint-plugin/test/rules/no-unused-expressions.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/no-unused-expressions.js rename to eslint/babel-eslint-plugin/test/rules/no-unused-expressions.js index 8ecbf68f26..b7d4ca6e7b 100644 --- a/eslint/babel-eslint-plugin/tests/rules/no-unused-expressions.js +++ b/eslint/babel-eslint-plugin/test/rules/no-unused-expressions.js @@ -10,7 +10,7 @@ //------------------------------------------------------------------------------ const rule = require("../../rules/no-unused-expressions"), - RuleTester = require("../RuleTester"); + RuleTester = require("../helpers/RuleTester"); //------------------------------------------------------------------------------ // Tests diff --git a/eslint/babel-eslint-plugin/tests/rules/object-curly-spacing.js b/eslint/babel-eslint-plugin/test/rules/object-curly-spacing.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/object-curly-spacing.js rename to eslint/babel-eslint-plugin/test/rules/object-curly-spacing.js index a982ba5d39..cf5315102d 100644 --- a/eslint/babel-eslint-plugin/tests/rules/object-curly-spacing.js +++ b/eslint/babel-eslint-plugin/test/rules/object-curly-spacing.js @@ -7,7 +7,7 @@ */ var rule = require('../../rules/object-curly-spacing'), - RuleTester = require('../RuleTester'); + RuleTester = require("../helpers/RuleTester"); var ruleTester = new RuleTester(); ruleTester.run('babel/object-curly-spacing', rule, { diff --git a/eslint/babel-eslint-plugin/tests/rules/quotes.js b/eslint/babel-eslint-plugin/test/rules/quotes.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/quotes.js rename to eslint/babel-eslint-plugin/test/rules/quotes.js index 96b93e674a..17fde24b6c 100644 --- a/eslint/babel-eslint-plugin/tests/rules/quotes.js +++ b/eslint/babel-eslint-plugin/test/rules/quotes.js @@ -1,5 +1,5 @@ var rule = require('../../rules/quotes'), - RuleTester = require('../RuleTester'); + RuleTester = require("../helpers/RuleTester"); var ruleTester = new RuleTester(); ruleTester.run('babel/quotes', rule, { diff --git a/eslint/babel-eslint-plugin/tests/rules/semi.js b/eslint/babel-eslint-plugin/test/rules/semi.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/semi.js rename to eslint/babel-eslint-plugin/test/rules/semi.js index 15ebea037f..b76ef6e2e0 100644 --- a/eslint/babel-eslint-plugin/tests/rules/semi.js +++ b/eslint/babel-eslint-plugin/test/rules/semi.js @@ -11,7 +11,7 @@ //------------------------------------------------------------------------------ const rule = require("../../rules/semi"), - RuleTester = require("../RuleTester"); + RuleTester = require("../helpers/RuleTester"); const ruleTester = new RuleTester(); diff --git a/eslint/babel-eslint-plugin/tests/rules/valid-typeof.js b/eslint/babel-eslint-plugin/test/rules/valid-typeof.js similarity index 99% rename from eslint/babel-eslint-plugin/tests/rules/valid-typeof.js rename to eslint/babel-eslint-plugin/test/rules/valid-typeof.js index 8e474f6bb1..6b8bc7c54c 100644 --- a/eslint/babel-eslint-plugin/tests/rules/valid-typeof.js +++ b/eslint/babel-eslint-plugin/test/rules/valid-typeof.js @@ -10,7 +10,7 @@ //------------------------------------------------------------------------------ const rule = require("../../rules/valid-typeof"), - RuleTester = require("../RuleTester"); + RuleTester = require("../helpers/RuleTester"); //------------------------------------------------------------------------------ // Tests diff --git a/package.json b/package.json index a601cabc9e..7157e3d57f 100644 --- a/package.json +++ b/package.json @@ -95,9 +95,11 @@ "packages/*/src/**/*.mjs", "packages/*/src/**/*.js", "codemods/*/src/**/*.mjs", - "codemods/*/src/**/*.js" + "codemods/*/src/**/*.js", + "eslint/*/src/**/*.mjs", + "eslint/*/src/**/*.js" ], - "testRegex": "./(packages|codemods)/[^/]+/test/.+\\.m?js$", + "testRegex": "./(packages|codemods|eslint)/[^/]+/test/.+\\.m?js$", "testPathIgnorePatterns": [ "/node_modules/", "/test/fixtures/", diff --git a/scripts/test.sh b/scripts/test.sh index f9c9e384e2..b14189e28a 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -20,7 +20,7 @@ if [ -n "$TEST_GREP" ]; then fi if [ -n "$TEST_ONLY" ]; then - jestArgs+=("(packages|codemods)/.*$TEST_ONLY.*/test") + jestArgs+=("(packages|codemods|eslint)/.*$TEST_ONLY.*/test") fi $node node_modules/jest/bin/jest.js "${jestArgs[@]}"