mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-13 18:14:48 -05:00
Add tests where module resolution caches should reuse the resolutions from buildInfo
This commit is contained in:
@@ -148,6 +148,20 @@ describe("unittests:: tsbuild:: cacheResolutions::", () => {
|
||||
caption: "modify c/ca/caa/randomFileForImport by adding import",
|
||||
edit: fs => prependText(fs, "/src/project/c/ca/caa/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
},
|
||||
{
|
||||
caption: "modify d/da/daa/daaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: fs => prependText(fs, "/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
discrepancyExplanation: () => [
|
||||
`Incremental is currently not reusing resolution so tsbuildinfo has two same resolutions instead of one TODO: (shkamat)`
|
||||
]
|
||||
},
|
||||
{
|
||||
caption: "modify e/ea/eaa/eaaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: fs => prependText(fs, "/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
discrepancyExplanation: () => [
|
||||
`Incremental is currently not reusing resolution so tsbuildinfo has two same resolutions instead of one TODO: (shkamat)`
|
||||
]
|
||||
},
|
||||
]
|
||||
});
|
||||
});
|
||||
@@ -261,12 +261,14 @@ function getFsMapWithSameResolutionFromMultiplePlaces(): { [path: string]: strin
|
||||
"c/ca/caa/randomFileForImport.ts",
|
||||
"c/ca/caa/caaa/fileWithImports.ts",
|
||||
"c/cb/fileWithImports.ts",
|
||||
"d/da/daa/daaa/x/y/z/randomFileForImport.ts",
|
||||
"d/da/daa/daaa/fileWithImports.ts",
|
||||
"d/da/daa/fileWithImports.ts",
|
||||
"d/da/fileWithImports.ts",
|
||||
"e/ea/fileWithImports.ts",
|
||||
"e/ea/eaa/fileWithImports.ts",
|
||||
"e/ea/eaa/eaaa/fileWithImports.ts",
|
||||
"e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts",
|
||||
],
|
||||
}),
|
||||
"/src/project/fileWithImports.ts": Utils.dedent`
|
||||
@@ -290,6 +292,7 @@ function getFsMapWithSameResolutionFromMultiplePlaces(): { [path: string]: strin
|
||||
"/src/project/c/cb/fileWithImports.ts": Utils.dedent`
|
||||
import type { ImportInterface0 } from "pkg0";
|
||||
`,
|
||||
"/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts": getRandomFileContent(),
|
||||
"/src/project/d/da/daa/daaa/fileWithImports.ts": Utils.dedent`
|
||||
import type { ImportInterface0 } from "pkg0";
|
||||
`,
|
||||
@@ -308,6 +311,7 @@ function getFsMapWithSameResolutionFromMultiplePlaces(): { [path: string]: strin
|
||||
"/src/project/e/ea/eaa/eaaa/fileWithImports.ts": Utils.dedent`
|
||||
import type { ImportInterface0 } from "pkg0";
|
||||
`,
|
||||
"/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts": getRandomFileContent(),
|
||||
"/src/project/node_modules/pkg0/index.d.ts": getPkgImportContent("Import", 0),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -158,6 +158,17 @@ describe("unittests:: tsbuildWatch:: watchMode:: cacheResolutions::", () => {
|
||||
describe("resolution reuse from multiple places", () => {
|
||||
verifyTscWatchMultiPlaces("multiple places", getWatchSystemWithSameResolutionFromMultiplePlaces);
|
||||
verifyTscWatchMultiPlaces("multiple places already built", getWatchSystemWithSameResolutionFromMultiplePlacesWithBuild);
|
||||
verifyTscWatch({
|
||||
scenario: "cacheResolutions",
|
||||
subScenario: "multiple places first pass",
|
||||
sys: () => {
|
||||
const sys = getWatchSystemWithSameResolutionFromMultiplePlacesWithBuild();
|
||||
sys.prependFile("/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`);
|
||||
return sys;
|
||||
},
|
||||
commandLineArgs: ["-b", "-w", "--explainFiles"],
|
||||
baselineModulesAndTypeRefs: true,
|
||||
});
|
||||
function verifyTscWatchMultiPlaces(subScenario: string, sys: () => TestServerHost) {
|
||||
verifyTscWatch({
|
||||
scenario: "cacheResolutions",
|
||||
@@ -181,6 +192,16 @@ describe("unittests:: tsbuildWatch:: watchMode:: cacheResolutions::", () => {
|
||||
edit: sys => sys.prependFile("/src/project/c/ca/caa/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
timeouts: sys => sys.runQueuedTimeoutCallbacks(),
|
||||
},
|
||||
{
|
||||
caption: "modify d/da/daa/daaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: sys => sys.prependFile("/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
timeouts: sys => sys.runQueuedTimeoutCallbacks(),
|
||||
},
|
||||
{
|
||||
caption: "modify e/ea/eaa/eaaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: sys => sys.prependFile("/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
timeouts: sys => sys.runQueuedTimeoutCallbacks(),
|
||||
},
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -244,6 +244,20 @@ describe("unittests:: tsc:: cacheResolutions::", () => {
|
||||
caption: "modify c/ca/caa/randomFileForImport by adding import",
|
||||
edit: fs => prependText(fs, "/src/project/c/ca/caa/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
},
|
||||
{
|
||||
caption: "modify d/da/daa/daaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: fs => prependText(fs, "/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
discrepancyExplanation: () => [
|
||||
`Incremental is currently not reusing resolution so tsbuildinfo has two same resolutions instead of one TODO: (shkamat)`
|
||||
]
|
||||
},
|
||||
{
|
||||
caption: "modify e/ea/eaa/eaaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: fs => prependText(fs, "/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
discrepancyExplanation: () => [
|
||||
`Incremental is currently not reusing resolution so tsbuildinfo has two same resolutions instead of one TODO: (shkamat)`
|
||||
]
|
||||
},
|
||||
]
|
||||
});
|
||||
});
|
||||
@@ -168,6 +168,17 @@ describe("unittests:: tsc-watch:: cacheResolutions::", () => {
|
||||
describe("resolution reuse from multiple places", () => {
|
||||
verifyTscWatchMultiPlaces("multiple places", getWatchSystemWithSameResolutionFromMultiplePlaces);
|
||||
verifyTscWatchMultiPlaces("multiple places already built", getWatchSystemWithSameResolutionFromMultiplePlacesWithBuild);
|
||||
verifyTscWatch({
|
||||
scenario: "cacheResolutions",
|
||||
subScenario: "multiple places first pass",
|
||||
sys: () => {
|
||||
const sys = getWatchSystemWithSameResolutionFromMultiplePlacesWithBuild();
|
||||
sys.prependFile("/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`);
|
||||
return sys;
|
||||
},
|
||||
commandLineArgs: ["-w", "--explainFiles"],
|
||||
baselineModulesAndTypeRefs: true,
|
||||
});
|
||||
function verifyTscWatchMultiPlaces(subScenario: string, sys: () => TestServerHost) {
|
||||
verifyTscWatch({
|
||||
scenario: "cacheResolutions",
|
||||
@@ -191,6 +202,16 @@ describe("unittests:: tsc-watch:: cacheResolutions::", () => {
|
||||
edit: sys => sys.prependFile("/src/project/c/ca/caa/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
timeouts: sys => sys.runQueuedTimeoutCallbacks(),
|
||||
},
|
||||
{
|
||||
caption: "modify d/da/daa/daaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: sys => sys.prependFile("/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
timeouts: sys => sys.runQueuedTimeoutCallbacks(),
|
||||
},
|
||||
{
|
||||
caption: "modify e/ea/eaa/eaaa/x/y/z/randomFileForImport by adding import",
|
||||
edit: sys => sys.prependFile("/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`),
|
||||
timeouts: sys => sys.runQueuedTimeoutCallbacks(),
|
||||
},
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
@@ -202,11 +202,25 @@ describe("unittests:: tsserver:: cacheResolutions:: tsserverProjectSystem cachin
|
||||
describe("resolution reuse from multiple places", () => {
|
||||
verifyTsserverMultiPlaces("multiple places not built", getServerHostWithSameResolutionFromMultiplePlaces);
|
||||
verifyTsserverMultiPlaces("multiple places", getServerHostWithSameResolutionFromMultiplePlacesWithBuild);
|
||||
it("multiple places first pass", () => {
|
||||
const host = getServerHostWithSameResolutionFromMultiplePlacesWithBuild();
|
||||
host.prependFile("/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts", `import type { ImportInterface0 } from "pkg0";\n`);
|
||||
fakes.patchHostForBuildInfoReadWrite(host);
|
||||
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
|
||||
openFilesForSession(["/src/project/randomFileForImport.ts"], session);
|
||||
baselineTsserverLogs("cacheResolutions", "multiple places first pass", session);
|
||||
});
|
||||
function verifyTsserverMultiPlaces(scenario: string, createHost: () => TestServerHost) {
|
||||
it(scenario, () => {
|
||||
const host = fakes.patchHostForBuildInfoReadWrite(createHost());
|
||||
const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) });
|
||||
openFilesForSession(["/src/project/randomFileForImport.ts", "/src/project/b/randomFileForImport.ts", "/src/project/c/ca/caa/randomFileForImport.ts"], session);
|
||||
openFilesForSession([
|
||||
"/src/project/randomFileForImport.ts",
|
||||
"/src/project/b/randomFileForImport.ts",
|
||||
"/src/project/c/ca/caa/randomFileForImport.ts",
|
||||
"/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts",
|
||||
"/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts",
|
||||
], session);
|
||||
|
||||
session.logger.info("modify randomFileForImport by adding import");
|
||||
session.executeCommandSeq<ts.server.protocol.ChangeRequest>({
|
||||
@@ -250,6 +264,34 @@ describe("unittests:: tsserver:: cacheResolutions:: tsserverProjectSystem cachin
|
||||
});
|
||||
ts.server.updateProjectIfDirty(session.getProjectService().configuredProjects.get("/src/project/tsconfig.json")!);
|
||||
|
||||
session.logger.info("modify d/da/daa/daaa/x/y/z/randomFileForImport by adding import");
|
||||
session.executeCommandSeq<ts.server.protocol.ChangeRequest>({
|
||||
command: ts.server.protocol.CommandTypes.Change,
|
||||
arguments: {
|
||||
file: "/src/project/d/da/daa/daaa/x/y/z/randomFileForImport.ts",
|
||||
line: 1,
|
||||
offset: 1,
|
||||
endLine: 1,
|
||||
endOffset: 1,
|
||||
insertString: `import type { ImportInterface0 } from "pkg0";\n`,
|
||||
}
|
||||
});
|
||||
ts.server.updateProjectIfDirty(session.getProjectService().configuredProjects.get("/src/project/tsconfig.json")!);
|
||||
|
||||
session.logger.info("modify e/ea/eaa/eaaa/x/y/z/randomFileForImport by adding import");
|
||||
session.executeCommandSeq<ts.server.protocol.ChangeRequest>({
|
||||
command: ts.server.protocol.CommandTypes.Change,
|
||||
arguments: {
|
||||
file: "/src/project/e/ea/eaa/eaaa/x/y/z/randomFileForImport.ts",
|
||||
line: 1,
|
||||
offset: 1,
|
||||
endLine: 1,
|
||||
endOffset: 1,
|
||||
insertString: `import type { ImportInterface0 } from "pkg0";\n`,
|
||||
}
|
||||
});
|
||||
ts.server.updateProjectIfDirty(session.getProjectService().configuredProjects.get("/src/project/tsconfig.json")!);
|
||||
|
||||
baselineTsserverLogs("cacheResolutions", scenario, session);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user