Separate out LargeFileReferencedEvent test

This commit is contained in:
Sheetal Nandi 2018-12-07 12:47:08 -08:00
parent 04e190abb7
commit f6ac949596
3 changed files with 77 additions and 75 deletions

View File

@ -88,6 +88,7 @@
"unittests/tsconfigParsing.ts",
"unittests/tscWatchEmit.ts",
"unittests/tscWatchMode.ts",
"unittests/tsserverLargeFileReferencedEvent.ts",
"unittests/tsserverProjectLoadingEvents.ts",
"unittests/tsserverProjectSystem.ts",
"unittests/tsserverProjectUpdatedInBackgroundEvent.ts",

View File

@ -0,0 +1,76 @@
namespace ts.projectSystem {
describe("tsserverLargeFileReferencedEvent:: LargeFileReferencedEvent with large file", () => {
const projectRoot = "/user/username/projects/project";
function getLargeFile(useLargeTsFile: boolean) {
return `src/large.${useLargeTsFile ? "ts" : "js"}`;
}
function createSessionWithEventHandler(files: File[], useLargeTsFile: boolean) {
const largeFile: File = {
path: `${projectRoot}/${getLargeFile(useLargeTsFile)}`,
content: "export var x = 10;",
fileSize: server.maxFileSize + 1
};
files.push(largeFile);
const host = createServerHost(files);
const { session, events: largeFileReferencedEvents } = createSessionWithEventTracking<server.LargeFileReferencedEvent>(host, server.LargeFileReferencedEvent);
return { session, verifyLargeFile };
function verifyLargeFile(project: server.Project) {
checkProjectActualFiles(project, files.map(f => f.path));
// large file for non ts file should be empty and for ts file should have content
const service = session.getProjectService();
const info = service.getScriptInfo(largeFile.path)!;
assert.equal(info.cacheSourceFile!.sourceFile.text, useLargeTsFile ? largeFile.content : "");
assert.deepEqual(largeFileReferencedEvents, useLargeTsFile ? emptyArray : [{
eventName: server.LargeFileReferencedEvent,
data: { file: largeFile.path, fileSize: largeFile.fileSize, maxFileSize: server.maxFileSize }
}]);
}
}
function verifyLargeFile(useLargeTsFile: boolean) {
it("when large file is included by tsconfig", () => {
const file: File = {
path: `${projectRoot}/src/file.ts`,
content: "export var y = 10;"
};
const tsconfig: File = {
path: `${projectRoot}/tsconfig.json`,
content: JSON.stringify({ files: ["src/file.ts", getLargeFile(useLargeTsFile)], compilerOptions: { target: 1, allowJs: true } })
};
const files = [file, libFile, tsconfig];
const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile);
const service = session.getProjectService();
openFilesForSession([file], session);
checkNumberOfProjects(service, { configuredProjects: 1 });
verifyLargeFile(service.configuredProjects.get(tsconfig.path)!);
});
it("when large file is included by module resolution", () => {
const file: File = {
path: `${projectRoot}/src/file.ts`,
content: `export var y = 10;import {x} from "./large"`
};
const files = [file, libFile];
const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile);
const service = session.getProjectService();
openFilesForSession([file], session);
checkNumberOfProjects(service, { inferredProjects: 1 });
verifyLargeFile(service.inferredProjects[0]);
});
}
describe("large file is ts file", () => {
verifyLargeFile(/*useLargeTsFile*/ true);
});
describe("large file is js file", () => {
verifyLargeFile(/*useLargeTsFile*/ false);
});
});
}

View File

@ -7102,81 +7102,6 @@ new C();`
});
});
describe("tsserverProjectSystem with large file", () => {
const projectRoot = "/user/username/projects/project";
function getLargeFile(useLargeTsFile: boolean) {
return `src/large.${useLargeTsFile ? "ts" : "js"}`;
}
function createSessionWithEventHandler(files: File[], useLargeTsFile: boolean) {
const largeFile: File = {
path: `${projectRoot}/${getLargeFile(useLargeTsFile)}`,
content: "export var x = 10;",
fileSize: server.maxFileSize + 1
};
files.push(largeFile);
const host = createServerHost(files);
const { session, events: largeFileReferencedEvents } = createSessionWithEventTracking<server.LargeFileReferencedEvent>(host, server.LargeFileReferencedEvent);
return { session, verifyLargeFile };
function verifyLargeFile(project: server.Project) {
checkProjectActualFiles(project, files.map(f => f.path));
// large file for non ts file should be empty and for ts file should have content
const service = session.getProjectService();
const info = service.getScriptInfo(largeFile.path)!;
assert.equal(info.cacheSourceFile!.sourceFile.text, useLargeTsFile ? largeFile.content : "");
assert.deepEqual(largeFileReferencedEvents, useLargeTsFile ? emptyArray : [{
eventName: server.LargeFileReferencedEvent,
data: { file: largeFile.path, fileSize: largeFile.fileSize, maxFileSize: server.maxFileSize }
}]);
}
}
function verifyLargeFile(useLargeTsFile: boolean) {
it("when large file is included by tsconfig", () => {
const file: File = {
path: `${projectRoot}/src/file.ts`,
content: "export var y = 10;"
};
const tsconfig: File = {
path: `${projectRoot}/tsconfig.json`,
content: JSON.stringify({ files: ["src/file.ts", getLargeFile(useLargeTsFile)], compilerOptions: { target: 1, allowJs: true } })
};
const files = [file, libFile, tsconfig];
const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile);
const service = session.getProjectService();
openFilesForSession([file], session);
checkNumberOfProjects(service, { configuredProjects: 1 });
verifyLargeFile(service.configuredProjects.get(tsconfig.path)!);
});
it("when large file is included by module resolution", () => {
const file: File = {
path: `${projectRoot}/src/file.ts`,
content: `export var y = 10;import {x} from "./large"`
};
const files = [file, libFile];
const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile);
const service = session.getProjectService();
openFilesForSession([file], session);
checkNumberOfProjects(service, { inferredProjects: 1 });
verifyLargeFile(service.inferredProjects[0]);
});
}
describe("large file is ts file", () => {
verifyLargeFile(/*useLargeTsFile*/ true);
});
describe("large file is js file", () => {
verifyLargeFile(/*useLargeTsFile*/ false);
});
});
describe("tsserverProjectSystem syntax operations", () => {
function navBarFull(session: TestSession, file: File) {
return JSON.stringify(session.executeCommandSeq<protocol.FileRequest>({