Centralize @babel/eslint-* tests (#11106)
* Centralize @babel/eslint-* tests * Enable linting of @babel/eslint-* test files * Add missing sourceType
This commit is contained in:
parent
1599e9025d
commit
5aa368cec1
@ -26,5 +26,4 @@ packages/babel-parser/test/expressions
|
||||
|
||||
eslint/*/lib
|
||||
eslint/*/node_modules
|
||||
eslint/*/test
|
||||
eslint/*/tests
|
||||
eslint/*/test/fixtures
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
class ClassName {
|
||||
constructor() {
|
||||
|
||||
},
|
||||
aMethod() {}
|
||||
}
|
||||
@ -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
|
||||
{
|
||||
|
||||
15
eslint/babel-eslint-tests/package.json
Normal file
15
eslint/babel-eslint-tests/package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,5 @@
|
||||
root: true
|
||||
|
||||
# babel-eslint
|
||||
parser: ../../../lib/index.js
|
||||
|
||||
# use eslint-plugin-import
|
||||
parser: "@babel/eslint-parser"
|
||||
plugins:
|
||||
- import
|
||||
rules:
|
||||
@ -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}
|
||||
`,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -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}`),
|
||||
),
|
||||
);
|
||||
});
|
||||
});
|
||||
@ -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" },
|
||||
);
|
||||
});
|
||||
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user