1namespace ts.projectSystem { 2 describe("unittests:: tsserver:: events:: LargeFileReferencedEvent with large file", () => { 3 4 function getLargeFile(useLargeTsFile: boolean) { 5 return `src/large.${useLargeTsFile ? "ts" : "js"}`; 6 } 7 8 function createSessionWithEventHandler(files: File[], useLargeTsFile: boolean) { 9 const largeFile: File = { 10 path: `${tscWatch.projectRoot}/${getLargeFile(useLargeTsFile)}`, 11 content: "export var x = 10;", 12 fileSize: server.maxFileSize + 1 13 }; 14 files.push(largeFile); 15 const host = createServerHost(files); 16 const { session, events: largeFileReferencedEvents } = createSessionWithEventTracking<server.LargeFileReferencedEvent>(host, server.LargeFileReferencedEvent); 17 18 return { session, verifyLargeFile }; 19 20 function verifyLargeFile(project: server.Project) { 21 checkProjectActualFiles(project, files.map(f => f.path)); 22 23 // large file for non ts file should be empty and for ts file should have content 24 const service = session.getProjectService(); 25 const info = service.getScriptInfo(largeFile.path)!; 26 assert.equal(info.cacheSourceFile!.sourceFile.text, useLargeTsFile ? largeFile.content : ""); 27 28 assert.deepEqual(largeFileReferencedEvents, useLargeTsFile ? emptyArray : [{ 29 eventName: server.LargeFileReferencedEvent, 30 data: { file: largeFile.path, fileSize: largeFile.fileSize, maxFileSize: server.maxFileSize } 31 }]); 32 } 33 } 34 35 function verifyLargeFile(useLargeTsFile: boolean) { 36 it("when large file is included by tsconfig", () => { 37 const file: File = { 38 path: `${tscWatch.projectRoot}/src/file.ts`, 39 content: "export var y = 10;" 40 }; 41 const tsconfig: File = { 42 path: `${tscWatch.projectRoot}/tsconfig.json`, 43 content: JSON.stringify({ files: ["src/file.ts", getLargeFile(useLargeTsFile)], compilerOptions: { target: 1, allowJs: true } }) 44 }; 45 const files = [file, libFile, tsconfig]; 46 const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile); 47 const service = session.getProjectService(); 48 openFilesForSession([file], session); 49 checkNumberOfProjects(service, { configuredProjects: 1 }); 50 verifyLargeFile(service.configuredProjects.get(tsconfig.path)!); 51 }); 52 53 it("when large file is included by module resolution", () => { 54 const file: File = { 55 path: `${tscWatch.projectRoot}/src/file.ts`, 56 content: `export var y = 10;import {x} from "./large"` 57 }; 58 const files = [file, libFile]; 59 const { session, verifyLargeFile } = createSessionWithEventHandler(files, useLargeTsFile); 60 const service = session.getProjectService(); 61 openFilesForSession([file], session); 62 checkNumberOfProjects(service, { inferredProjects: 1 }); 63 verifyLargeFile(service.inferredProjects[0]); 64 }); 65 } 66 67 describe("large file is ts file", () => { 68 verifyLargeFile(/*useLargeTsFile*/ true); 69 }); 70 71 describe("large file is js file", () => { 72 verifyLargeFile(/*useLargeTsFile*/ false); 73 }); 74 }); 75} 76