From eb3f5d809679cf6d5727752beed06d51836e4477 Mon Sep 17 00:00:00 2001 From: Kai Cataldo Date: Thu, 6 Feb 2020 17:50:32 -0500 Subject: [PATCH] Centralize @babel/eslint-* tests --- eslint/babel-eslint-parser/package.json | 6 +- .../test/fixtures/rules/syntax-error.js | 6 -- .../test/{babel-eslint-parser.js => index.js} | 0 eslint/babel-eslint-tests/package.json | 15 ++++ .../eslint-plugin-import/.eslintrc.yml | 6 +- .../test/fixtures/eslint-plugin-import/a.js | 0 .../test/fixtures/eslint-plugin-import/b.js | 0 .../test/fixtures/eslint-plugin-import/c.js | 0 .../fixtures/rules/strict/function-with.js | 0 .../fixtures/rules/strict/function-without.js | 0 .../rules/strict/global-with-function-with.js | 0 .../strict/global-with-function-without.js | 0 .../test/fixtures/rules/strict/global-with.js | 0 .../test/fixtures/rules/strict/none.js | 0 .../test/helpers/verifyAndAssertMessages.js | 70 +++++++++++++++ .../test/integration/eslint-plugin-import.js | 15 ++++ .../test/integration/eslint/eslint.js} | 85 +------------------ .../test/integration/eslint/rules/strict.js} | 33 ++----- 18 files changed, 113 insertions(+), 123 deletions(-) delete mode 100644 eslint/babel-eslint-parser/test/fixtures/rules/syntax-error.js rename eslint/babel-eslint-parser/test/{babel-eslint-parser.js => index.js} (100%) create mode 100644 eslint/babel-eslint-tests/package.json rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/eslint-plugin-import/.eslintrc.yml (56%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/eslint-plugin-import/a.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/eslint-plugin-import/b.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/eslint-plugin-import/c.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/rules/strict/function-with.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/rules/strict/function-without.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/rules/strict/global-with-function-with.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/rules/strict/global-with-function-without.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/rules/strict/global-with.js (100%) rename eslint/{babel-eslint-parser => babel-eslint-tests}/test/fixtures/rules/strict/none.js (100%) create mode 100644 eslint/babel-eslint-tests/test/helpers/verifyAndAssertMessages.js create mode 100644 eslint/babel-eslint-tests/test/integration/eslint-plugin-import.js rename eslint/{babel-eslint-parser/test/non-regression.js => babel-eslint-tests/test/integration/eslint/eslint.js} (96%) rename eslint/{babel-eslint-parser/test/integration.js => babel-eslint-tests/test/integration/eslint/rules/strict.js} (87%) diff --git a/eslint/babel-eslint-parser/package.json b/eslint/babel-eslint-parser/package.json index bf3ea3e45b05..2d219e6a3375 100644 --- a/eslint/babel-eslint-parser/package.json +++ b/eslint/babel-eslint-parser/package.json @@ -28,10 +28,10 @@ "semver": "^6.3.0" }, "devDependencies": { - "@babel/eslint-shared-fixtures": "*", "@babel/core": "^7.2.0", - "dedent": "^0.7.0", + "@babel/eslint-shared-fixtures": "*", "eslint": "^6.0.1", - "espree": "^6.0.0" + "espree": "^6.0.0", + "lodash.clonedeep": "^4.5.0" } } diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/syntax-error.js b/eslint/babel-eslint-parser/test/fixtures/rules/syntax-error.js deleted file mode 100644 index 6fa194a18f9e..000000000000 --- a/eslint/babel-eslint-parser/test/fixtures/rules/syntax-error.js +++ /dev/null @@ -1,6 +0,0 @@ -class ClassName { - constructor() { - - }, - aMethod() {} -} diff --git a/eslint/babel-eslint-parser/test/babel-eslint-parser.js b/eslint/babel-eslint-parser/test/index.js similarity index 100% rename from eslint/babel-eslint-parser/test/babel-eslint-parser.js rename to eslint/babel-eslint-parser/test/index.js diff --git a/eslint/babel-eslint-tests/package.json b/eslint/babel-eslint-tests/package.json new file mode 100644 index 000000000000..edcabd8bbe04 --- /dev/null +++ b/eslint/babel-eslint-tests/package.json @@ -0,0 +1,15 @@ +{ + "name": "@babel/eslint-tests", + "version": "0.0.0", + "description": "Tests for babel/eslint-* packages", + "license": "MIT", + "private": true, + "devDependencies": { + "@babel/eslint-parser": "*", + "@babel/eslint-plugin": "*", + "@babel/eslint-shared-fixtures": "*", + "dedent": "^0.7.0", + "eslint": "^6.0.0", + "eslint-plugin-import": "^2.20.1" + } +} diff --git a/eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/.eslintrc.yml b/eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/.eslintrc.yml similarity index 56% rename from eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/.eslintrc.yml rename to eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/.eslintrc.yml index 418b3d0c0ceb..861dfa917f87 100644 --- a/eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/.eslintrc.yml +++ b/eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/.eslintrc.yml @@ -1,9 +1,5 @@ root: true - -# babel-eslint -parser: ../../../lib/index.js - -# use eslint-plugin-import +parser: "@babel/eslint-parser" plugins: - import rules: diff --git a/eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/a.js b/eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/a.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/a.js rename to eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/a.js diff --git a/eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/b.js b/eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/b.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/b.js rename to eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/b.js diff --git a/eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/c.js b/eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/c.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/eslint-plugin-import/c.js rename to eslint/babel-eslint-tests/test/fixtures/eslint-plugin-import/c.js diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/strict/function-with.js b/eslint/babel-eslint-tests/test/fixtures/rules/strict/function-with.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/rules/strict/function-with.js rename to eslint/babel-eslint-tests/test/fixtures/rules/strict/function-with.js diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/strict/function-without.js b/eslint/babel-eslint-tests/test/fixtures/rules/strict/function-without.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/rules/strict/function-without.js rename to eslint/babel-eslint-tests/test/fixtures/rules/strict/function-without.js diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/strict/global-with-function-with.js b/eslint/babel-eslint-tests/test/fixtures/rules/strict/global-with-function-with.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/rules/strict/global-with-function-with.js rename to eslint/babel-eslint-tests/test/fixtures/rules/strict/global-with-function-with.js diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/strict/global-with-function-without.js b/eslint/babel-eslint-tests/test/fixtures/rules/strict/global-with-function-without.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/rules/strict/global-with-function-without.js rename to eslint/babel-eslint-tests/test/fixtures/rules/strict/global-with-function-without.js diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/strict/global-with.js b/eslint/babel-eslint-tests/test/fixtures/rules/strict/global-with.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/rules/strict/global-with.js rename to eslint/babel-eslint-tests/test/fixtures/rules/strict/global-with.js diff --git a/eslint/babel-eslint-parser/test/fixtures/rules/strict/none.js b/eslint/babel-eslint-tests/test/fixtures/rules/strict/none.js similarity index 100% rename from eslint/babel-eslint-parser/test/fixtures/rules/strict/none.js rename to eslint/babel-eslint-tests/test/fixtures/rules/strict/none.js diff --git a/eslint/babel-eslint-tests/test/helpers/verifyAndAssertMessages.js b/eslint/babel-eslint-tests/test/helpers/verifyAndAssertMessages.js new file mode 100644 index 000000000000..90a9dd413377 --- /dev/null +++ b/eslint/babel-eslint-tests/test/helpers/verifyAndAssertMessages.js @@ -0,0 +1,70 @@ +import path from "path"; +import eslint from "eslint"; +import unpad from "dedent"; +import * as parser from "@babel/eslint-parser"; + +export default function verifyAndAssertMessages( + code, + rules = {}, + expectedMessages = [], + sourceType, + overrideConfig, +) { + const linter = new eslint.Linter(); + linter.defineParser("@babel/eslint-parser", parser); + + const messages = linter.verify(unpad(`${code}`), { + parser: "@babel/eslint-parser", + rules, + env: { + node: true, + es6: true, + }, + ...overrideConfig, + parserOptions: { + sourceType, + requireConfigFile: false, + babelOptions: { + configFile: require.resolve( + "@babel/eslint-shared-fixtures/config/babel.config.js", + ), + }, + ...overrideConfig?.parserOptions, + }, + }); + + if (messages.length !== expectedMessages.length) { + throw new Error( + `Expected ${expectedMessages.length} message(s), got ${ + messages.length + }\n${JSON.stringify(messages, null, 2)}`, + ); + } + + messages.forEach((message, i) => { + const formattedMessage = `${message.line}:${message.column} ${ + message.message + }${message.ruleId ? ` ${message.ruleId}` : ""}`; + const expectedMessage = expectedMessages[i]; + + if (expectedMessage instanceof RegExp) { + if (!expectedMessage.test(formattedMessage)) { + throw new Error( + ` + Message ${i} does not pass RegExp test: + Test: ${expectedMessage} + Actual: ${formattedMessage} + `, + ); + } + } else if (formattedMessage !== expectedMessage) { + throw new Error( + ` + Message ${i} does not match: + Expected: ${expectedMessage} + Actual: ${formattedMessage} + `, + ); + } + }); +} diff --git a/eslint/babel-eslint-tests/test/integration/eslint-plugin-import.js b/eslint/babel-eslint-tests/test/integration/eslint-plugin-import.js new file mode 100644 index 000000000000..51164a8d7ff5 --- /dev/null +++ b/eslint/babel-eslint-tests/test/integration/eslint-plugin-import.js @@ -0,0 +1,15 @@ +import eslint from "eslint"; +import fs from "fs"; +import path from "path"; +import parser from "@babel/eslint-parser"; + +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( + ["a.js", "b.js", "c.js"].map(file => + path.resolve(__dirname, `../fixtures/eslint-plugin-import/${file}`), + ), + ); + }); +}); diff --git a/eslint/babel-eslint-parser/test/non-regression.js b/eslint/babel-eslint-tests/test/integration/eslint/eslint.js similarity index 96% rename from eslint/babel-eslint-parser/test/non-regression.js rename to eslint/babel-eslint-tests/test/integration/eslint/eslint.js index 13524702e335..1c1284fee239 100644 --- a/eslint/babel-eslint-parser/test/non-regression.js +++ b/eslint/babel-eslint-tests/test/integration/eslint/eslint.js @@ -1,81 +1,4 @@ -import eslint from "eslint"; -import path from "path"; -import unpad from "dedent"; -import * as parser from "../src"; - -function verifyAndAssertMessagesWithSpecificESLint( - code, - rules, - expectedMessages, - sourceType, - overrideConfig, - linter, -) { - const config = { - parser: "current-babel-eslint", - rules, - env: { - node: true, - es6: true, - }, - ...overrideConfig, - parserOptions: { - sourceType, - requireConfigFile: false, - babelOptions: { - configFile: require.resolve( - "@babel/eslint-shared-fixtures/config/babel.config.js", - ), - }, - ...overrideConfig?.parserOptions, - }, - }; - - const messages = linter.verify(code, config); - - if (messages.length !== expectedMessages.length) { - throw new Error( - `Expected ${expectedMessages.length} message(s), got ${ - messages.length - }\n${JSON.stringify(messages, null, 2)}`, - ); - } - - messages.forEach((message, i) => { - const formatedMessage = `${message.line}:${message.column} ${ - message.message - }${message.ruleId ? ` ${message.ruleId}` : ""}`; - if (formatedMessage !== expectedMessages[i]) { - throw new Error( - ` - Message ${i} does not match: - Expected: ${expectedMessages[i]} - Actual: ${formatedMessage} - `, - ); - } - }); -} - -function verifyAndAssertMessages( - code, - rules, - expectedMessages, - sourceType, - overrideConfig, -) { - const linter = new eslint.Linter(); - linter.defineParser("current-babel-eslint", parser); - - verifyAndAssertMessagesWithSpecificESLint( - unpad(`${code}`), - rules || {}, - expectedMessages || [], - sourceType, - overrideConfig, - linter, - ); -} +import verifyAndAssertMessages from "../../helpers/verifyAndAssertMessages"; describe("verify", () => { it("arrow function support (issue #1)", () => { @@ -90,9 +13,9 @@ describe("verify", () => { ); }); - xit("Readable error messages (issue #3)", () => { + it("Readable error messages (issue #3)", () => { verifyAndAssertMessages("{ , res }", {}, [ - "1:3 Parsing error: Unexpected token", + /1:2 Parsing error:.*Unexpected token \(1:2\)/, ]); }); @@ -150,6 +73,7 @@ describe("verify", () => { { strict: [1, "global"] }, [], "script", + { sourceType: "script" }, ); }); @@ -1154,7 +1078,6 @@ describe("verify", () => { ) { const overrideConfig = { parserOptions: { - sourceType, babelOptions: { configFile: require.resolve( "@babel/eslint-shared-fixtures/config/babel.config.decorators-legacy.js", diff --git a/eslint/babel-eslint-parser/test/integration.js b/eslint/babel-eslint-tests/test/integration/eslint/rules/strict.js similarity index 87% rename from eslint/babel-eslint-parser/test/integration.js rename to eslint/babel-eslint-tests/test/integration/eslint/rules/strict.js index d2df877c562e..3df34884030b 100644 --- a/eslint/babel-eslint-parser/test/integration.js +++ b/eslint/babel-eslint-tests/test/integration/eslint/rules/strict.js @@ -1,23 +1,23 @@ import eslint from "eslint"; import fs from "fs"; import path from "path"; -import * as parser from "../src"; +import * as parser from "@babel/eslint-parser"; -eslint.linter.defineParser("current-babel-eslint", parser); +eslint.linter.defineParser("@babel/eslint-parser", parser); const paths = { - fixtures: path.join(__dirname, "fixtures", "rules"), + fixtures: path.join(__dirname, "../../..", "fixtures", "rules"), }; const encoding = "utf8"; const errorLevel = 2; const baseEslintOpts = { - parser: "current-babel-eslint", + parser: "@babel/eslint-parser", parserOptions: { sourceType: "script", requireConfigFile: false, - babelOptions: { configFile: false } + babelOptions: { configFile: false }, }, }; @@ -49,7 +49,6 @@ function readFixture(id, done) { describe("Rules:", () => { describe("`strict`", strictSuite); }); -// describe function strictSuite() { const ruleId = "strict"; @@ -74,10 +73,8 @@ function strictSuite() { }, ); }); - // it }); }); - // describe describe("when set to 'global'", () => { const eslintOpts = Object.assign({}, baseEslintOpts, { @@ -98,7 +95,6 @@ function strictSuite() { }, ); }); - // it it("should error twice on global directive: no and function directive: yes", done => { lint( @@ -115,7 +111,6 @@ function strictSuite() { }, ); }); - // it it("should error on function directive", done => { lint( @@ -135,7 +130,6 @@ function strictSuite() { }, ); }); - // it it("should error on no directive", done => { lint( @@ -150,9 +144,7 @@ function strictSuite() { }, ); }); - // it }); - // describe describe("when set to 'function'", () => { const eslintOpts = Object.assign({}, baseEslintOpts, { @@ -173,7 +165,6 @@ function strictSuite() { }, ); }); - // it it("should error twice on function directive: no and global directive: yes", done => { lint( @@ -190,7 +181,6 @@ function strictSuite() { }, ); }); - // it it("should error on only global directive", done => { lint( @@ -205,7 +195,6 @@ function strictSuite() { }, ); }); - // it it("should error on extraneous global directive", done => { lint( @@ -221,17 +210,5 @@ function strictSuite() { }, ); }); - // it }); } - -describe("https://github.com/babel/babel-eslint/issues/558", () => { - it("doesn't crash with eslint-plugin-import", () => { - const engine = new eslint.CLIEngine({ ignore: false }); - const files = ["a.js", "b.js", "c.js"]; - let fileWithPath = files.map(file => - path.resolve(__dirname, `./fixtures/eslint-plugin-import/${file}`), - ); - engine.executeOnFiles(fileWithPath); - }); -});