Skip to content

Commit 905a0b4

Browse files
authored
Create baselines for tsserver event tests (#53330)
1 parent bf369f1 commit 905a0b4

File tree

98 files changed

+19171
-933
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+19171
-933
lines changed

src/server/session.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,12 @@ function convertToLocation(lineAndCharacter: LineAndCharacter): protocol.Locatio
267267
return { line: lineAndCharacter.line + 1, offset: lineAndCharacter.character + 1 };
268268
}
269269

270-
function formatDiagnosticToProtocol(diag: Diagnostic, includeFileName: true): protocol.DiagnosticWithFileName;
271-
function formatDiagnosticToProtocol(diag: Diagnostic, includeFileName: false): protocol.Diagnostic;
272-
function formatDiagnosticToProtocol(diag: Diagnostic, includeFileName: boolean): protocol.Diagnostic | protocol.DiagnosticWithFileName {
270+
/** @internal */
271+
export function formatDiagnosticToProtocol(diag: Diagnostic, includeFileName: true): protocol.DiagnosticWithFileName;
272+
/** @internal */
273+
export function formatDiagnosticToProtocol(diag: Diagnostic, includeFileName: false): protocol.Diagnostic;
274+
/** @internal */
275+
export function formatDiagnosticToProtocol(diag: Diagnostic, includeFileName: boolean): protocol.Diagnostic | protocol.DiagnosticWithFileName {
273276
const start = (diag.file && convertToLocation(getLineAndCharacterOfPosition(diag.file, diag.start!)))!; // TODO: GH#18217
274277
const end = (diag.file && convertToLocation(getLineAndCharacterOfPosition(diag.file, diag.start! + diag.length!)))!; // TODO: GH#18217
275278
const text = flattenDiagnosticMessageText(diag.messageText, "\n");

src/testRunner/unittests/tsserver/configuredProjects.ts

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
createLoggerWithInMemoryLogs,
2222
createProjectService,
2323
createSession,
24-
createSessionWithEventTracking,
2524
openFilesForSession,
2625
verifyGetErrRequest,
2726
} from "./helpers";
@@ -751,25 +750,22 @@ describe("unittests:: tsserver:: ConfiguredProjects", () => {
751750
const originalGetFileSize = host.getFileSize;
752751
host.getFileSize = (filePath: string) =>
753752
filePath === f2.path ? ts.server.maxProgramSizeForNonTsFiles + 1 : originalGetFileSize.call(host, filePath);
754-
const { session, events } = createSessionWithEventTracking<ts.server.ProjectLanguageServiceStateEvent>(host, ts.server.ProjectLanguageServiceStateEvent);
753+
const session = createSession(host, { canUseEvents: true, logger: createLoggerWithInMemoryLogs(host) });
755754
session.executeCommand({
756755
seq: 0,
757756
type: "request",
758757
command: "open",
759758
arguments: { file: f1.path }
760759
} as ts.server.protocol.OpenRequest);
760+
session.logger.log(`Language languageServiceEnabled:: ${session.getProjectService().configuredProjects.get(config.path)!.languageServiceEnabled}`);
761761

762-
const projectService = session.getProjectService();
763-
checkNumberOfProjects(projectService, { configuredProjects: 1 });
764-
const project = configuredProjectAt(projectService, 0);
765-
assert.isFalse(project.languageServiceEnabled, "Language service enabled");
766-
assert.equal(events.length, 1, "should receive event");
767-
assert.equal(events[0].data.project, project, "project name");
768-
assert.isFalse(events[0].data.languageServiceEnabled, "Language service state");
769-
770-
const options = projectService.getFormatCodeOptions(f1.path as ts.server.NormalizedPath);
771-
const edits = project.getLanguageService().getFormattingEditsForDocument(f1.path, options);
772-
assert.deepEqual(edits, [{ span: ts.createTextSpan(/*start*/ 7, /*length*/ 3), newText: " " }]);
762+
session.executeCommandSeq({
763+
command: ts.server.protocol.CommandTypes.FormatFull,
764+
arguments: {
765+
file: f1.path,
766+
}
767+
});
768+
baselineTsserverLogs("configuredProjects", "syntactic features work even if language service is disabled", session);
773769
});
774770

775771
it("when multiple projects are open, detects correct default project", () => {
@@ -1263,7 +1259,7 @@ describe("unittests:: tsserver:: ConfiguredProjects:: when reading tsconfig file
12631259
};
12641260

12651261
const host = createServerHost([file1, libFile, configFile]);
1266-
const { session, events } = createSessionWithEventTracking<ts.server.ConfigFileDiagEvent>(host, ts.server.ConfigFileDiagEvent);
1262+
const session = createSession(host, { canUseEvents: true, logger: createLoggerWithInMemoryLogs(host) });
12671263
const originalReadFile = host.readFile;
12681264
host.readFile = f => {
12691265
return f === configFile.path ?
@@ -1272,15 +1268,6 @@ describe("unittests:: tsserver:: ConfiguredProjects:: when reading tsconfig file
12721268
};
12731269
openFilesForSession([file1], session);
12741270

1275-
assert.deepEqual(events, [{
1276-
eventName: ts.server.ConfigFileDiagEvent,
1277-
data: {
1278-
triggerFile: file1.path,
1279-
configFileName: configFile.path,
1280-
diagnostics: [
1281-
ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0, configFile.path)
1282-
]
1283-
}
1284-
}]);
1271+
baselineTsserverLogs("configuredProjects", "should be tolerated without crashing the server", session);
12851272
});
12861273
});

src/testRunner/unittests/tsserver/events/largeFileReferenced.ts

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ import {
55
libFile,
66
} from "../../virtualFileSystemWithWatch";
77
import {
8-
checkNumberOfProjects,
9-
checkProjectActualFiles,
10-
createSessionWithEventTracking,
8+
baselineTsserverLogs,
9+
createLoggerWithInMemoryLogs,
10+
createSession,
1111
openFilesForSession,
1212
} from "../helpers";
1313

1414
describe("unittests:: tsserver:: events:: LargeFileReferencedEvent with large file", () => {
15-
15+
function getFileType(useLargeTsFile: boolean) {
16+
return useLargeTsFile ? "ts" : "js";
17+
}
1618
function getLargeFile(useLargeTsFile: boolean) {
17-
return `src/large.${useLargeTsFile ? "ts" : "js"}`;
19+
return `src/large.${getFileType(useLargeTsFile)}`;
1820
}
1921

2022
function createSessionWithEventHandler(files: File[], useLargeTsFile: boolean) {
@@ -25,23 +27,9 @@ describe("unittests:: tsserver:: events:: LargeFileReferencedEvent with large fi
2527
};
2628
files.push(largeFile);
2729
const host = createServerHost(files);
28-
const { session, events: largeFileReferencedEvents } = createSessionWithEventTracking<ts.server.LargeFileReferencedEvent>(host, ts.server.LargeFileReferencedEvent);
29-
30-
return { session, verifyLargeFile };
31-
32-
function verifyLargeFile(project: ts.server.Project) {
33-
checkProjectActualFiles(project, files.map(f => f.path));
34-
35-
// large file for non ts file should be empty and for ts file should have content
36-
const service = session.getProjectService();
37-
const info = service.getScriptInfo(largeFile.path)!;
38-
assert.equal(info.cacheSourceFile!.sourceFile.text, useLargeTsFile ? largeFile.content : "");
30+
const session = createSession(host, { canUseEvents: true, logger: createLoggerWithInMemoryLogs(host) });
3931

40-
assert.deepEqual(largeFileReferencedEvents, useLargeTsFile ? ts.emptyArray : [{
41-
eventName: ts.server.LargeFileReferencedEvent,
42-
data: { file: largeFile.path, fileSize: largeFile.fileSize, maxFileSize: ts.server.maxFileSize }
43-
}]);
44-
}
32+
return session;
4533
}
4634

4735
function verifyLargeFile(useLargeTsFile: boolean) {
@@ -55,11 +43,9 @@ describe("unittests:: tsserver:: events:: LargeFileReferencedEvent with large fi
5543
content: JSON.stringify({ files: ["src/file.ts", getLargeFile(useLargeTsFile)], compilerOptions: { target: 1, allowJs: true } })
5644
};
5745
const files = [file, libFile, tsconfig];
58-
const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile);
59-
const service = session.getProjectService();
46+
const session = createSessionWithEventHandler(files, useLargeTsFile);
6047
openFilesForSession([file], session);
61-
checkNumberOfProjects(service, { configuredProjects: 1 });
62-
verifyLargeFile(service.configuredProjects.get(tsconfig.path)!);
48+
baselineTsserverLogs("events/largeFileReferenced", `when large ${getFileType(useLargeTsFile)} file is included by tsconfig`, session);
6349
});
6450

6551
it("when large file is included by module resolution", () => {
@@ -68,11 +54,9 @@ describe("unittests:: tsserver:: events:: LargeFileReferencedEvent with large fi
6854
content: `export var y = 10;import {x} from "./large"`
6955
};
7056
const files = [file, libFile];
71-
const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile);
72-
const service = session.getProjectService();
57+
const session = createSessionWithEventHandler(files, useLargeTsFile);
7358
openFilesForSession([file], session);
74-
checkNumberOfProjects(service, { inferredProjects: 1 });
75-
verifyLargeFile(service.inferredProjects[0]);
59+
baselineTsserverLogs("events/largeFileReferenced", `when large ${getFileType(useLargeTsFile)} file is included by module resolution`, session);
7660
});
7761
}
7862

src/testRunner/unittests/tsserver/events/projectLanguageServiceState.ts

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@ import {
66
} from "../../virtualFileSystemWithWatch";
77
import {
88
baselineTsserverLogs,
9-
checkNumberOfProjects,
10-
configuredProjectAt,
119
createLoggerWithInMemoryLogs,
1210
createProjectService,
13-
createSessionWithEventTracking,
11+
createSession,
1412
} from "../helpers";
1513

1614
describe("unittests:: tsserver:: events:: ProjectLanguageServiceStateEvent", () => {
@@ -36,30 +34,19 @@ describe("unittests:: tsserver:: events:: ProjectLanguageServiceStateEvent", ()
3634
host.getFileSize = (filePath: string) =>
3735
filePath === f2.path ? ts.server.maxProgramSizeForNonTsFiles + 1 : originalGetFileSize.call(host, filePath);
3836

39-
const { session, events } = createSessionWithEventTracking<ts.server.ProjectLanguageServiceStateEvent>(host, ts.server.ProjectLanguageServiceStateEvent);
37+
const session = createSession(host, { canUseEvents: true, logger: createLoggerWithInMemoryLogs(host) });
4038
session.executeCommand({
4139
seq: 0,
4240
type: "request",
4341
command: "open",
4442
arguments: { file: f1.path }
4543
} as ts.server.protocol.OpenRequest);
46-
const projectService = session.getProjectService();
47-
checkNumberOfProjects(projectService, { configuredProjects: 1 });
48-
const project = configuredProjectAt(projectService, 0);
49-
assert.isFalse(project.languageServiceEnabled, "Language service enabled");
50-
assert.equal(events.length, 1, "should receive event");
51-
assert.equal(events[0].data.project, project, "project name");
52-
assert.equal(events[0].data.project.getProjectName(), config.path, "config path");
53-
assert.isFalse(events[0].data.languageServiceEnabled, "Language service state");
44+
session.logger.log(`Language service enabled: ${session.getProjectService().configuredProjects.get(config.path)!.languageServiceEnabled}`);
5445

5546
host.writeFile(configWithExclude.path, configWithExclude.content);
5647
host.checkTimeoutQueueLengthAndRun(2);
57-
checkNumberOfProjects(projectService, { configuredProjects: 1 });
58-
assert.isTrue(project.languageServiceEnabled, "Language service enabled");
59-
assert.equal(events.length, 2, "should receive event");
60-
assert.equal(events[1].data.project, project, "project");
61-
assert.equal(events[1].data.project.getProjectName(), config.path, "config path");
62-
assert.isTrue(events[1].data.languageServiceEnabled, "Language service state");
48+
session.logger.log(`Language service enabled: ${session.getProjectService().configuredProjects.get(config.path)!.languageServiceEnabled}`);
49+
baselineTsserverLogs("events/projectLanguageServiceState", "language service disabled events are triggered", session);
6350
});
6451

6552
it("Large file size is determined correctly", () => {
@@ -87,6 +74,6 @@ describe("unittests:: tsserver:: events:: ProjectLanguageServiceStateEvent", ()
8774
const project = service.configuredProjects.get(config.path)!;
8875
service.logger.info(`languageServiceEnabled: ${project.languageServiceEnabled}`);
8976
service.logger.info(`lastFileExceededProgramSize: ${project.lastFileExceededProgramSize}`);
90-
baselineTsserverLogs("projectLanguageServiceStateEvent", "large file size is determined correctly", service);
77+
baselineTsserverLogs("events/projectLanguageServiceState", "large file size is determined correctly", service);
9178
});
9279
});

0 commit comments

Comments
 (0)