diff --git a/test/vitest-unit-config.test.ts b/test/vitest-unit-config.test.ts index d0b1fad07a7..92ffd1c37b5 100644 --- a/test/vitest-unit-config.test.ts +++ b/test/vitest-unit-config.test.ts @@ -109,4 +109,33 @@ describe("unit vitest config", () => { expect.arrayContaining(["src/commands/**", "src/config/**", "src/security/**"]), ); }); + + it("keeps bundled unit include files out of the resolved exclude list", () => { + const unitConfig = createUnitVitestConfigWithOptions( + {}, + { + includePatterns: [ + "src/infra/matrix-plugin-helper.test.ts", + "src/plugin-sdk/facade-runtime.test.ts", + "src/plugins/loader.test.ts", + ], + }, + ); + + expect(unitConfig.test?.include).toEqual([ + "src/infra/matrix-plugin-helper.test.ts", + "src/plugin-sdk/facade-runtime.test.ts", + "src/plugins/loader.test.ts", + ]); + expect(unitConfig.test?.exclude).not.toEqual( + expect.arrayContaining([ + "src/infra/**", + "src/plugin-sdk/**", + "src/plugins/**", + "src/infra/matrix-plugin-helper.test.ts", + "src/plugin-sdk/facade-runtime.test.ts", + "src/plugins/loader.test.ts", + ]), + ); + }); }); diff --git a/vitest.unit.config.ts b/vitest.unit.config.ts index 2cf70411714..52c26cb89e5 100644 --- a/vitest.unit.config.ts +++ b/vitest.unit.config.ts @@ -3,6 +3,7 @@ import { loadPatternListFromEnv, narrowIncludePatternsForCli } from "./vitest.pa import { resolveVitestIsolation } from "./vitest.scoped-config.ts"; import { sharedVitestConfig } from "./vitest.shared.config.ts"; import { + isBundledPluginDependentUnitTestFile, unitTestAdditionalExcludePatterns, unitTestIncludePatterns, } from "./vitest.unit-paths.mjs"; @@ -34,6 +35,15 @@ export function createUnitVitestConfigWithOptions( const isolate = resolveVitestIsolation(env); const defaultIncludePatterns = options.includePatterns ?? unitTestIncludePatterns; const cliIncludePatterns = narrowIncludePatternsForCli(defaultIncludePatterns, options.argv); + const protectedIncludeFiles = new Set( + defaultIncludePatterns.filter((pattern) => isBundledPluginDependentUnitTestFile(pattern)), + ); + const baseExcludePatterns = unitTestAdditionalExcludePatterns.filter((pattern) => { + if (protectedIncludeFiles.size === 0) { + return true; + } + return ![...protectedIncludeFiles].some((file) => pattern === file || pattern.endsWith("/**")); + }); return defineProject({ ...sharedVitestConfig, test: { @@ -48,7 +58,7 @@ export function createUnitVitestConfigWithOptions( exclude: [ ...new Set([ ...exclude, - ...unitTestAdditionalExcludePatterns, + ...baseExcludePatterns, ...(options.extraExcludePatterns ?? []), ...loadExtraExcludePatternsFromEnv(env), ]),