Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: flat-rule-tester make sure default config always matches #17585

Merged
merged 5 commits into from Sep 22, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 9 additions & 6 deletions lib/rule-tester/flat-rule-tester.js
Expand Up @@ -84,13 +84,15 @@ const { ConfigArraySymbol } = require("@humanwhocodes/config-array");
* testerDefaultConfig must not be modified as it allows to reset the tester to
* the initial default configuration
*/
const testerDefaultConfig = { rules: {} };
const testerDefaultConfig = { files: ["**"], rules: {} };

/*
* RuleTester uses this config as its default. This can be overwritten via
* setDefaultConfig().
* Files is required to also match non-JavaScript files when
* a test case defines a "filename".
*/
let sharedDefaultConfig = { rules: {} };
let sharedDefaultConfig = { ...testerDefaultConfig };
DMartens marked this conversation as resolved.
Show resolved Hide resolved

/*
* List every parameters possible on a test case that are not related to eslint
Expand Down Expand Up @@ -368,7 +370,10 @@ class FlatRuleTester {
sharedDefaultConfig = config;

// Make sure the rules object exists since it is assumed to exist later
sharedDefaultConfig.rules = sharedDefaultConfig.rules || {};
sharedDefaultConfig.rules = sharedDefaultConfig.rules || testerDefaultConfig.rules;

// Make sure the config is always matching if no files are specified
sharedDefaultConfig.files = sharedDefaultConfig.files || testerDefaultConfig.files;
}

/**
Expand All @@ -386,9 +391,7 @@ class FlatRuleTester {
*/
static resetDefaultConfig() {
sharedDefaultConfig = {
rules: {
...testerDefaultConfig.rules
}
...testerDefaultConfig
DMartens marked this conversation as resolved.
Show resolved Hide resolved
};
}

Expand Down
52 changes: 51 additions & 1 deletion tests/lib/rule-tester/flat-rule-tester.js
Expand Up @@ -124,7 +124,7 @@ describe("FlatRuleTester", () => {
FlatRuleTester.resetDefaultConfig();
assert.deepStrictEqual(
FlatRuleTester.getDefaultConfig(),
{ rules: {} },
{ rules: {}, files: ["**"] },
"The default configuration has not reset correctly"
);
});
Expand Down Expand Up @@ -1116,6 +1116,56 @@ describe("FlatRuleTester", () => {
}());
});

it("should allow setting the filename to a non-JavaScript file", () => {
ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), {
valid: [
{
code: "var foo = 'bar'",
filename: "somefile.ts"
}
],
invalid: []
});
});

it("should allow setting the filename to a file name without extension", () => {
ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), {
valid: [
{
code: "var foo = 'bar'",
filename: "somefile"
}
],
invalid: []
});
});

it("should allow setting the filename to a file path without extension", () => {
ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), {
valid: [
{
code: "var foo = 'bar'",
filename: "path/to/somefile.js"
mdjermanovic marked this conversation as resolved.
Show resolved Hide resolved
}
],
invalid: []
});
});

it("should keep allowing non-JavaScript files if the default config does not specify files", () => {
FlatRuleTester.setDefaultConfig({ rules: {} });
ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), {
valid: [
{
code: "var foo = 'bar'",
filename: "somefile.ts"
}
],
invalid: []
});
FlatRuleTester.resetDefaultConfig();
});

it("should pass-through the options to the rule", () => {
ruleTester.run("no-invalid-args", require("../../fixtures/testers/rule-tester/no-invalid-args"), {
valid: [
Expand Down