Skip to content

Commit

Permalink
Centralize @babel/eslint-* tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kaicataldo committed Feb 6, 2020
1 parent 5e58903 commit eb3f5d8
Show file tree
Hide file tree
Showing 18 changed files with 113 additions and 123 deletions.
6 changes: 3 additions & 3 deletions eslint/babel-eslint-parser/package.json
Expand Up @@ -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"
}
}

This file was deleted.

File renamed without changes.
15 changes: 15 additions & 0 deletions 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"
}
}
@@ -1,9 +1,5 @@
root: true

# babel-eslint
parser: ../../../lib/index.js

# use eslint-plugin-import
parser: "@babel/eslint-parser"
plugins:
- import
rules:
Expand Down
70 changes: 70 additions & 0 deletions 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}
`,
);
}
});
}
15 changes: 15 additions & 0 deletions 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}`),
),
);
});
});
@@ -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)", () => {
Expand All @@ -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\)/,
]);
});

Expand Down Expand Up @@ -150,6 +73,7 @@ describe("verify", () => {
{ strict: [1, "global"] },
[],
"script",
{ sourceType: "script" },
);
});

Expand Down Expand Up @@ -1154,7 +1078,6 @@ describe("verify", () => {
) {
const overrideConfig = {
parserOptions: {
sourceType,
babelOptions: {
configFile: require.resolve(
"@babel/eslint-shared-fixtures/config/babel.config.decorators-legacy.js",
Expand Down
@@ -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 },
},
};

Expand Down Expand Up @@ -49,7 +49,6 @@ function readFixture(id, done) {
describe("Rules:", () => {
describe("`strict`", strictSuite);
});
// describe

function strictSuite() {
const ruleId = "strict";
Expand All @@ -74,10 +73,8 @@ function strictSuite() {
},
);
});
// it
});
});
// describe

describe("when set to 'global'", () => {
const eslintOpts = Object.assign({}, baseEslintOpts, {
Expand All @@ -98,7 +95,6 @@ function strictSuite() {
},
);
});
// it

it("should error twice on global directive: no and function directive: yes", done => {
lint(
Expand All @@ -115,7 +111,6 @@ function strictSuite() {
},
);
});
// it

it("should error on function directive", done => {
lint(
Expand All @@ -135,7 +130,6 @@ function strictSuite() {
},
);
});
// it

it("should error on no directive", done => {
lint(
Expand All @@ -150,9 +144,7 @@ function strictSuite() {
},
);
});
// it
});
// describe

describe("when set to 'function'", () => {
const eslintOpts = Object.assign({}, baseEslintOpts, {
Expand All @@ -173,7 +165,6 @@ function strictSuite() {
},
);
});
// it

it("should error twice on function directive: no and global directive: yes", done => {
lint(
Expand All @@ -190,7 +181,6 @@ function strictSuite() {
},
);
});
// it

it("should error on only global directive", done => {
lint(
Expand All @@ -205,7 +195,6 @@ function strictSuite() {
},
);
});
// it

it("should error on extraneous global directive", done => {
lint(
Expand All @@ -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);
});
});

0 comments on commit eb3f5d8

Please sign in to comment.