From f9082ff3f3956a0a5a7d7659de63640a21c4de0f Mon Sep 17 00:00:00 2001 From: fnx Date: Fri, 22 Sep 2023 19:06:55 +0200 Subject: [PATCH] feat: flat-rule-tester make sure default config always matches (#17585) * feat: flat-rule-tester make sure default config always matches * fix: flat rule tester default config also matches paths without file extension * fix: actually test for extensionless paths * fix: use base config to make sure that every file is included * fix: add missing extensionless path tests --- lib/rule-tester/flat-rule-tester.js | 1 + tests/lib/rule-tester/flat-rule-tester.js | 78 +++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/lib/rule-tester/flat-rule-tester.js b/lib/rule-tester/flat-rule-tester.js index 300bcb7447e..51cb73b5f80 100644 --- a/lib/rule-tester/flat-rule-tester.js +++ b/lib/rule-tester/flat-rule-tester.js @@ -535,6 +535,7 @@ class FlatRuleTester { } const baseConfig = [ + { files: ["**"] }, // Make sure the default config matches for all files { plugins: { diff --git a/tests/lib/rule-tester/flat-rule-tester.js b/tests/lib/rule-tester/flat-rule-tester.js index a3be696d0a2..679a87b99da 100644 --- a/tests/lib/rule-tester/flat-rule-tester.js +++ b/tests/lib/rule-tester/flat-rule-tester.js @@ -1116,6 +1116,84 @@ 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 path without extension", () => { + ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), { + valid: [ + { + code: "var foo = 'bar'", + filename: "somefile" + }, + { + code: "var foo = 'bar'", + filename: "path/to/somefile" + } + ], + invalid: [] + }); + }); + + it("should allow setting the filename to a file path with extension", () => { + ruleTester.run("", require("../../fixtures/testers/rule-tester/no-test-filename"), { + valid: [ + { + code: "var foo = 'bar'", + filename: "path/to/somefile.js" + }, + { + code: "var foo = 'bar'", + filename: "src/somefile.ts" + }, + { + code: "var foo = 'bar'", + filename: "components/Component.vue" + } + ], + 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" + }, + { + code: "var foo = 'bar'", + filename: "src/somefile" + } + ], + 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: [