Centralize @babel/eslint-* tests (#11106)

* Centralize @babel/eslint-* tests

* Enable linting of @babel/eslint-* test files

* Add missing sourceType
This commit is contained in:
Kai Cataldo 2020-02-08 10:04:49 -05:00 committed by GitHub
parent 1599e9025d
commit 5aa368cec1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 112 additions and 132 deletions

View File

@ -26,5 +26,4 @@ packages/babel-parser/test/expressions
eslint/*/lib
eslint/*/node_modules
eslint/*/test
eslint/*/tests
eslint/*/test/fixtures

View File

@ -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"
}
}

View File

@ -1,6 +0,0 @@
class ClassName {
constructor() {
},
aMethod() {}
}

View File

@ -77,11 +77,6 @@ function extractPatterns(patterns, type) {
// Tests
//------------------------------------------------------------------------------
const errors = [
{ message: "Unexpected 'this'.", type: "ThisExpression" },
{ message: "Unexpected 'this'.", type: "ThisExpression" },
];
const patterns = [
// Class private fields
{

View File

@ -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"
}
}

View File

@ -1,9 +1,5 @@
root: true
# babel-eslint
parser: ../../../lib/index.js
# use eslint-plugin-import
parser: "@babel/eslint-parser"
plugins:
- import
rules:

View File

@ -0,0 +1,69 @@
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}
`,
);
}
});
}

View File

@ -0,0 +1,13 @@
import eslint from "eslint";
import path from "path";
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}`),
),
);
});
});

View File

@ -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" },
);
});

View File

@ -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(
@ -108,14 +104,11 @@ function strictSuite() {
},
(err, report) => {
if (err) return done(err);
[0, 1].forEach(i => {
expect(report[0].ruleId).toBe(ruleId);
});
expect(report[0].ruleId).toBe(ruleId);
done();
},
);
});
// it
it("should error on function directive", done => {
lint(
@ -135,7 +128,6 @@ function strictSuite() {
},
);
});
// it
it("should error on no directive", done => {
lint(
@ -150,9 +142,7 @@ function strictSuite() {
},
);
});
// it
});
// describe
describe("when set to 'function'", () => {
const eslintOpts = Object.assign({}, baseEslintOpts, {
@ -173,7 +163,6 @@ function strictSuite() {
},
);
});
// it
it("should error twice on function directive: no and global directive: yes", done => {
lint(
@ -190,7 +179,6 @@ function strictSuite() {
},
);
});
// it
it("should error on only global directive", done => {
lint(
@ -205,7 +193,6 @@ function strictSuite() {
},
);
});
// it
it("should error on extraneous global directive", done => {
lint(
@ -221,17 +208,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);
});
});