Merge pull request #26197 from Microsoft/largeFileEvent

Send event on referencing large file
This commit is contained in:
Sheetal Nandi
2018-08-13 11:14:22 -07:00
committed by GitHub
7 changed files with 124 additions and 18 deletions

View File

@@ -13,9 +13,9 @@ namespace ts.textStorage {
it("text based storage should be have exactly the same as script version cache", () => {
const host = projectSystem.createServerHost([f]);
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path));
const ts2 = new server.TextStorage(host, server.asNormalizedPath(f.path));
// Since script info is not used in these tests, just cheat by passing undefined
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path), /*initialVersion*/ undefined, /*info*/undefined!);
const ts2 = new server.TextStorage(host, server.asNormalizedPath(f.path), /*initialVersion*/ undefined, /*info*/undefined!);
ts1.useScriptVersionCache_TestOnly();
ts2.useText();
@@ -48,7 +48,8 @@ namespace ts.textStorage {
it("should switch to script version cache if necessary", () => {
const host = projectSystem.createServerHost([f]);
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path));
// Since script info is not used in these tests, just cheat by passing undefined
const ts1 = new server.TextStorage(host, server.asNormalizedPath(f.path), /*initialVersion*/ undefined, /*info*/undefined!);
ts1.getSnapshot();
assert.isTrue(!ts1.hasScriptVersionCache_TestOnly(), "should not have script version cache - 1");

View File

@@ -2843,7 +2843,7 @@ namespace ts.projectSystem {
const session = createSession(host, {
canUseEvents: true,
eventHandler: e => {
if (e.eventName === server.ConfigFileDiagEvent || e.eventName === server.ProjectsUpdatedInBackgroundEvent || e.eventName === server.ProjectInfoTelemetryEvent || e.eventName === server.OpenFileInfoTelemetryEvent) {
if (e.eventName === server.ConfigFileDiagEvent || e.eventName === server.ProjectsUpdatedInBackgroundEvent || e.eventName === server.ProjectInfoTelemetryEvent || e.eventName === server.OpenFileInfoTelemetryEvent || e.eventName === server.LargeFileReferencedEvent) {
return;
}
assert.equal(e.eventName, server.ProjectLanguageServiceStateEvent);
@@ -9028,6 +9028,27 @@ export const x = 10;`
fileSize: server.maxFileSize + 1
};
function createSessionWithEventHandler(host: TestServerHost) {
const largeFileReferencedEvents: server.LargeFileReferencedEvent[] = [];
const session = createSession(host, {
eventHandler: e => {
if (e.eventName === server.LargeFileReferencedEvent) {
largeFileReferencedEvents.push(e);
}
}
});
return { session, verifyLargeFileReferencedEvent };
function verifyLargeFileReferencedEvent() {
assert.equal(largeFileReferencedEvents.length, 1);
assert.deepEqual(largeFileReferencedEvents, [{
eventName: server.LargeFileReferencedEvent,
data: { file: largeFile.path, fileSize: largeFile.fileSize, maxFileSize: server.maxFileSize }
}]);
}
}
it("when large file is included by tsconfig", () => {
const file: File = {
path: `${projectRoot}/src/file.ts`,
@@ -9039,13 +9060,15 @@ export const x = 10;`
};
const files = [file, largeFile, libFile, tsconfig];
const host = createServerHost(files);
const service = createProjectService(host);
service.openClientFile(file.path);
service.checkNumberOfProjects({ configuredProjects: 1 });
const { session, verifyLargeFileReferencedEvent } = createSessionWithEventHandler(host);
const service = session.getProjectService();
openFilesForSession([file], session);
checkNumberOfProjects(service, { configuredProjects: 1 });
const project = service.configuredProjects.get(tsconfig.path)!;
checkProjectActualFiles(project, [file.path, libFile.path, largeFile.path, tsconfig.path]);
const info = service.getScriptInfo(largeFile.path)!;
assert.equal(info.cacheSourceFile.sourceFile.text, "");
verifyLargeFileReferencedEvent();
});
it("when large file is included by module resolution", () => {
@@ -9055,13 +9078,15 @@ export const x = 10;`
};
const files = [file, largeFile, libFile];
const host = createServerHost(files);
const service = createProjectService(host);
service.openClientFile(file.path);
service.checkNumberOfProjects({ inferredProjects: 1 });
const { session, verifyLargeFileReferencedEvent } = createSessionWithEventHandler(host);
const service = session.getProjectService();
openFilesForSession([file], session);
checkNumberOfProjects(service, { inferredProjects: 1 });
const project = service.inferredProjects[0];
checkProjectActualFiles(project, [file.path, libFile.path, largeFile.path]);
const info = service.getScriptInfo(largeFile.path)!;
assert.equal(info.cacheSourceFile.sourceFile.text, "");
verifyLargeFileReferencedEvent();
});
});