Add tests where module resolution caches should reuse the resolutions from buildInfo

This commit is contained in:
Sheetal Nandi
2022-07-25 13:53:39 -07:00
parent 959206d3e9
commit 0446430aaa
19 changed files with 18250 additions and 667 deletions

View File

@@ -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)`
]
},
]
});
});

View File

@@ -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),
};
}

View File

@@ -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(),
},
]
});
}

View File

@@ -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)`
]
},
]
});
});

View File

@@ -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(),
},
]
});
}

View File

@@ -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);
});
}