Skip to content

Commit 1135377

Browse files
authored
Fix ReloadRequest in protocol found while updating to use session in tests (#57158)
1 parent b7f691d commit 1135377

21 files changed

+5566
-1571
lines changed

src/server/protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ export interface Request extends Message {
211211
/**
212212
* Request to reload the project structure for all the opened files
213213
*/
214-
export interface ReloadProjectsRequest extends Message {
214+
export interface ReloadProjectsRequest extends Request {
215215
command: CommandTypes.ReloadProjects;
216216
}
217217

src/testRunner/unittests/tsserver/autoImportProvider.ts

Lines changed: 41 additions & 43 deletions
Large diffs are not rendered by default.

src/testRunner/unittests/tsserver/projectErrors.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -583,8 +583,7 @@ describe("unittests:: tsserver:: projectErrors:: dont include overwrite emit err
583583
const session = new TestSession(host);
584584
openFilesForSession([f1], session);
585585

586-
const projectService = session.getProjectService();
587-
const projectFileName = projectService.inferredProjects[0].getProjectName();
586+
const projectFileName = session.getProjectService().inferredProjects[0].getProjectName();
588587
session.executeCommandSeq<ts.server.protocol.CompilerOptionsDiagnosticsRequest>({
589588
command: ts.server.protocol.CommandTypes.CompilerOptionsDiagnosticsFull,
590589
arguments: { projectFileName },

src/testRunner/unittests/tsserver/projectReferences.ts

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
} from "../helpers/solutionBuilder";
1111
import {
1212
baselineTsserverLogs,
13+
closeFilesForSession,
1314
createHostWithSolutionBuild,
1415
openFilesForSession,
1516
protocolFileLocationFromSubstring,
@@ -121,12 +122,16 @@ describe("unittests:: tsserver:: with project references and tsbuild", () => {
121122

122123
it("does not error on container only project", () => {
123124
const { files, session, containerConfig } = setup();
124-
const service = session.getProjectService();
125-
service.openExternalProjects([{
126-
projectFileName: "/user/username/projects/container/container",
127-
rootFiles: files.map(f => ({ fileName: f.path })),
128-
options: {},
129-
}]);
125+
session.executeCommandSeq<ts.server.protocol.OpenExternalProjectsRequest>({
126+
command: ts.server.protocol.CommandTypes.OpenExternalProjects,
127+
arguments: {
128+
projects: [{
129+
projectFileName: "/user/username/projects/container/container",
130+
rootFiles: files.map(f => ({ fileName: f.path })),
131+
options: {},
132+
}],
133+
},
134+
});
130135
files.forEach(f => {
131136
const args: ts.server.protocol.FileRequestArgs = {
132137
file: f.path,
@@ -141,7 +146,7 @@ describe("unittests:: tsserver:: with project references and tsbuild", () => {
141146
arguments: args,
142147
});
143148
});
144-
const containerProject = service.configuredProjects.get(containerConfig.path)!;
149+
const containerProject = session.getProjectService().configuredProjects.get(containerConfig.path)!;
145150
session.executeCommandSeq<ts.server.protocol.CompilerOptionsDiagnosticsRequest>({
146151
command: ts.server.protocol.CommandTypes.CompilerOptionsDiagnosticsFull,
147152
arguments: { projectFileName: containerProject.projectName },
@@ -168,7 +173,6 @@ describe("unittests:: tsserver:: with project references and tsbuild", () => {
168173
};
169174
const { session, containerCompositeExecIndex } = setup(tempFile);
170175
openFilesForSession([containerCompositeExecIndex], session);
171-
const service = session.getProjectService();
172176

173177
// Open temp file and verify all projects alive
174178
openFilesForSession([tempFile], session);
@@ -184,12 +188,11 @@ describe("unittests:: tsserver:: with project references and tsbuild", () => {
184188
});
185189

186190
// Open temp file and verify all projects alive
187-
service.closeClientFile(tempFile.path);
191+
closeFilesForSession([tempFile], session);
188192
openFilesForSession([tempFile], session);
189193

190194
// Close all files and open temp file, only inferred project should be alive
191-
service.closeClientFile(containerCompositeExecIndex.path);
192-
service.closeClientFile(tempFile.path);
195+
closeFilesForSession([containerCompositeExecIndex, tempFile], session);
193196
openFilesForSession([tempFile], session);
194197
baselineTsserverLogs("projectReferences", `ancestor and project ref management`, session);
195198
});
@@ -1044,48 +1047,46 @@ export function bar() {}`,
10441047
...additionalFiles,
10451048
]);
10461049
const session = new TestSession(host);
1047-
const service = session.getProjectService();
1048-
service.openClientFile(main.path);
1049-
return { session, service, host };
1050+
openFilesForSession([main], session);
1051+
return { session, host };
10501052
}
10511053

10521054
function verifySolutionScenario(input: Setup) {
1053-
const { session, service } = setup(input);
1055+
const { session } = setup(input);
10541056

1055-
const info = service.getScriptInfoForPath(main.path as ts.Path)!;
1057+
const info = session.getProjectService().getScriptInfoForPath(main.path as ts.Path)!;
10561058
session.logger.startGroup();
10571059
session.logger.info(`getDefaultProject for ${main.path}: ${info.getDefaultProject().projectName}`);
1058-
session.logger.info(`findDefaultConfiguredProject for ${main.path}: ${service.findDefaultConfiguredProject(info)!.projectName}`);
1060+
session.logger.info(`findDefaultConfiguredProject for ${main.path}: ${session.getProjectService().findDefaultConfiguredProject(info)!.projectName}`);
10591061
session.logger.endGroup();
10601062

10611063
// Verify errors
10621064
verifyGetErrRequest({ session, files: [main] });
10631065

10641066
// Verify collection of script infos
1065-
service.openClientFile(dummyFilePath);
1067+
openFilesForSession([dummyFilePath], session);
10661068

1067-
service.closeClientFile(main.path);
1068-
service.closeClientFile(dummyFilePath);
1069-
service.openClientFile(dummyFilePath);
1069+
closeFilesForSession([main, dummyFilePath], session);
1070+
openFilesForSession([dummyFilePath, main], session);
10701071

1071-
service.openClientFile(main.path);
1072-
service.closeClientFile(dummyFilePath);
1073-
service.openClientFile(dummyFilePath);
1072+
closeFilesForSession([dummyFilePath], session);
1073+
openFilesForSession([dummyFilePath], session);
10741074

10751075
// Verify Reload projects
1076-
service.reloadProjects();
1076+
session.executeCommandSeq<ts.server.protocol.ReloadProjectsRequest>({
1077+
command: ts.server.protocol.CommandTypes.ReloadProjects,
1078+
});
10771079

10781080
// Find all refs
10791081
session.executeCommandSeq<ts.server.protocol.ReferencesRequest>({
10801082
command: ts.server.protocol.CommandTypes.References,
10811083
arguments: protocolFileLocationFromSubstring(main, "foo", { index: 1 }),
10821084
}).response as ts.server.protocol.ReferencesResponseBody;
10831085

1084-
service.closeClientFile(main.path);
1085-
service.closeClientFile(dummyFilePath);
1086+
closeFilesForSession([main, dummyFilePath], session);
10861087

10871088
// Verify when declaration map references the file
1088-
service.openClientFile(fileResolvingToMainDts.path);
1089+
openFilesForSession([fileResolvingToMainDts], session);
10891090

10901091
// Find all refs from dts include
10911092
session.executeCommandSeq<ts.server.protocol.ReferencesRequest>({
@@ -1117,25 +1118,24 @@ export function bar() {}`,
11171118
}
11181119

11191120
function verifyDisableReferencedProjectLoad(input: Setup) {
1120-
const { session, service } = setup(input);
1121+
const { session } = setup(input);
11211122

1122-
const info = service.getScriptInfoForPath(main.path as ts.Path)!;
1123+
const info = session.getProjectService().getScriptInfoForPath(main.path as ts.Path)!;
11231124
session.logger.startGroup();
11241125
session.logger.info(`getDefaultProject for ${main.path}: ${info.getDefaultProject().projectName}`);
1125-
session.logger.info(`findDefaultConfiguredProject for ${main.path}: ${service.findDefaultConfiguredProject(info)?.projectName}`);
1126+
session.logger.info(`findDefaultConfiguredProject for ${main.path}: ${session.getProjectService().findDefaultConfiguredProject(info)?.projectName}`);
11261127
session.logger.endGroup();
11271128

11281129
// Verify collection of script infos
1129-
service.openClientFile(dummyFilePath);
1130-
1131-
service.closeClientFile(main.path);
1132-
service.closeClientFile(dummyFilePath);
1133-
service.openClientFile(dummyFilePath);
1130+
openFilesForSession([dummyFilePath], session);
11341131

1135-
service.openClientFile(main.path);
1132+
closeFilesForSession([main, dummyFilePath], session);
1133+
openFilesForSession([dummyFilePath, main], session);
11361134

11371135
// Verify Reload projects
1138-
service.reloadProjects();
1136+
session.executeCommandSeq<ts.server.protocol.ReloadProjectsRequest>({
1137+
command: ts.server.protocol.CommandTypes.ReloadProjects,
1138+
});
11391139
baselineTsserverLogs("projectReferences", input.scenario, session);
11401140
}
11411141

src/testRunner/unittests/tsserver/projects.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,7 +1115,6 @@ describe("unittests:: tsserver:: projects::", () => {
11151115

11161116
const host = createServerHost([file1, file2, tsconfig]);
11171117
const session = new TestSession(host);
1118-
const projectService = session.getProjectService();
11191118
session.executeCommandSeq<ts.server.protocol.ConfigureRequest>({
11201119
command: ts.server.protocol.CommandTypes.Configure,
11211120
arguments: { preferences: { lazyConfiguredProjectsFromExternalProject } },
@@ -1139,7 +1138,7 @@ describe("unittests:: tsserver:: projects::", () => {
11391138
if (lazyConfiguredProjectsFromExternalProject) {
11401139
// configured project is just created and not yet loaded
11411140
session.logger.info("Calling ensureInferredProjectsUpToDate_TestOnly");
1142-
projectService.ensureInferredProjectsUpToDate_TestOnly();
1141+
session.getProjectService().ensureInferredProjectsUpToDate_TestOnly();
11431142
}
11441143

11451144
// Allow allowNonTsExtensions will be set to true for deferred extensions.
@@ -1440,10 +1439,9 @@ describe("unittests:: tsserver:: projects::", () => {
14401439
const host = createServerHost([commonFile1, commonFile2, randomFile, libFile]);
14411440
const session = new TestSession(host);
14421441
openFilesForSession([commonFile1], session);
1443-
const service = session.getProjectService();
1444-
const project = service.inferredProjects[0];
1442+
const project = session.getProjectService().inferredProjects[0];
14451443
// Intentionally create scriptinfo and attach it to project
1446-
const info = service.getOrCreateScriptInfoForNormalizedPath(commonFile2.path as ts.server.NormalizedPath, /*openedByClient*/ false)!;
1444+
const info = session.getProjectService().getOrCreateScriptInfoForNormalizedPath(commonFile2.path as ts.server.NormalizedPath, /*openedByClient*/ false)!;
14471445
info.attachToProject(project);
14481446
try {
14491447
session.executeCommandSeq<ts.server.protocol.ApplyChangedToOpenFilesRequest>({

src/testRunner/unittests/tsserver/reload.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ describe("unittests:: tsserver:: reload", () => {
3434
});
3535

3636
// verify content
37-
const projectService = session.getProjectService();
38-
const snap1 = projectService.getScriptInfo(f1.path)!.getSnapshot();
37+
const snap1 = session.getProjectService().getScriptInfo(f1.path)!.getSnapshot();
3938
session.logger.log(`Content of ${f1.path}:: ${ts.getSnapshotText(snap1)}`);
4039

4140
// reload from original file file
@@ -45,7 +44,7 @@ describe("unittests:: tsserver:: reload", () => {
4544
});
4645

4746
// verify content
48-
const snap2 = projectService.getScriptInfo(f1.path)!.getSnapshot();
47+
const snap2 = session.getProjectService().getScriptInfo(f1.path)!.getSnapshot();
4948
session.logger.log(`Content of ${f1.path}:: ${ts.getSnapshotText(snap2)}`);
5049
baselineTsserverLogs("reload", "should work with temp file", session);
5150
});

src/testRunner/unittests/tsserver/symlinkCache.ts

Lines changed: 41 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import {
1010
SymLink,
1111
} from "../helpers/virtualFileSystemWithWatch";
1212

13-
const appTsconfigJson: File = {
14-
path: "/packages/app/tsconfig.json",
15-
content: `
13+
describe("unittests:: tsserver:: symlinkCache", () => {
14+
it("contains symlinks discovered by project references resolution after program creation", () => {
15+
const appTsconfigJson: File = {
16+
path: "/packages/app/tsconfig.json",
17+
content: `
1618
{
1719
"compilerOptions": {
1820
"module": "commonjs",
@@ -22,47 +24,53 @@ const appTsconfigJson: File = {
2224
}
2325
"references": [{ "path": "../dep" }]
2426
}`,
25-
};
27+
};
2628

27-
const appSrcIndexTs: File = {
28-
path: "/packages/app/src/index.ts",
29-
content: `import "dep/does/not/exist";`,
30-
};
29+
const appSrcIndexTs: File = {
30+
path: "/packages/app/src/index.ts",
31+
content: `import "dep/does/not/exist";`,
32+
};
3133

32-
const depPackageJson: File = {
33-
path: "/packages/dep/package.json",
34-
content: `{ "name": "dep", "main": "dist/index.js", "types": "dist/index.d.ts" }`,
35-
};
34+
const depPackageJson: File = {
35+
path: "/packages/dep/package.json",
36+
content: `{ "name": "dep", "main": "dist/index.js", "types": "dist/index.d.ts" }`,
37+
};
3638

37-
const depTsconfigJson: File = {
38-
path: "/packages/dep/tsconfig.json",
39-
content: `
39+
const depTsconfigJson: File = {
40+
path: "/packages/dep/tsconfig.json",
41+
content: `
4042
{
4143
"compilerOptions": { "outDir": "dist", "rootDir": "src", "module": "commonjs" }
4244
}`,
43-
};
45+
};
4446

45-
const depSrcIndexTs: File = {
46-
path: "/packages/dep/src/index.ts",
47-
content: `
47+
const depSrcIndexTs: File = {
48+
path: "/packages/dep/src/index.ts",
49+
content: `
4850
import "./sub/folder";`,
49-
};
50-
51-
const depSrcSubFolderIndexTs: File = {
52-
path: "/packages/dep/src/sub/folder/index.ts",
53-
content: `export const dep = 0;`,
54-
};
51+
};
5552

56-
const link: SymLink = {
57-
path: "/packages/app/node_modules/dep",
58-
symLink: "../../dep",
59-
};
53+
const depSrcSubFolderIndexTs: File = {
54+
path: "/packages/dep/src/sub/folder/index.ts",
55+
content: `export const dep = 0;`,
56+
};
6057

61-
describe("unittests:: tsserver:: symlinkCache", () => {
62-
it("contains symlinks discovered by project references resolution after program creation", () => {
63-
const { session, projectService } = setup();
58+
const link: SymLink = {
59+
path: "/packages/app/node_modules/dep",
60+
symLink: "../../dep",
61+
};
62+
const host = createServerHost([
63+
appTsconfigJson,
64+
appSrcIndexTs,
65+
depPackageJson,
66+
depTsconfigJson,
67+
depSrcIndexTs,
68+
depSrcSubFolderIndexTs,
69+
link,
70+
]);
71+
const session = new TestSession(host);
6472
openFilesForSession([appSrcIndexTs], session);
65-
const project = projectService.configuredProjects.get(appTsconfigJson.path)!;
73+
const project = session.getProjectService().configuredProjects.get(appTsconfigJson.path)!;
6674
assert.deepEqual(
6775
project.getSymlinkCache()?.getSymlinkedDirectories()?.get(link.path + "/" as ts.Path),
6876
{ real: "/packages/dep/", realPath: "/packages/dep/" as ts.Path },
@@ -84,22 +92,3 @@ describe("unittests:: tsserver:: symlinkCache", () => {
8492
cache.setSymlinksFromResolutions(ts.noop, ts.noop, map);
8593
});
8694
});
87-
88-
function setup() {
89-
const host = createServerHost([
90-
appTsconfigJson,
91-
appSrcIndexTs,
92-
depPackageJson,
93-
depTsconfigJson,
94-
depSrcIndexTs,
95-
depSrcSubFolderIndexTs,
96-
link,
97-
]);
98-
const session = new TestSession(host);
99-
const projectService = session.getProjectService();
100-
return {
101-
host,
102-
projectService,
103-
session,
104-
};
105-
}

src/testRunner/unittests/tsserver/typingsInstaller.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,8 +1144,7 @@ describe("unittests:: tsserver:: typingsInstaller:: General functionality", () =
11441144
},
11451145
};
11461146
session.executeCommandSeq(openRequest);
1147-
const projectService = session.getProjectService();
1148-
const proj = projectService.inferredProjects[0];
1147+
const proj = session.getProjectService().inferredProjects[0];
11491148
const version1 = proj.lastCachedUnresolvedImportsList;
11501149

11511150
// make a change that should not affect the structure of the program

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ declare namespace ts {
205205
/**
206206
* Request to reload the project structure for all the opened files
207207
*/
208-
interface ReloadProjectsRequest extends Message {
208+
interface ReloadProjectsRequest extends Request {
209209
command: CommandTypes.ReloadProjects;
210210
}
211211
/**

0 commit comments

Comments
 (0)