1namespace ts.projectSystem { 2 describe("unittests:: tsserver:: events:: ProjectLanguageServiceStateEvent", () => { 3 it("language service disabled events are triggered", () => { 4 const f1 = { 5 path: "/a/app.js", 6 content: "let x = 1;" 7 }; 8 const f2 = { 9 path: "/a/largefile.js", 10 content: "", 11 }; 12 const config = { 13 path: "/a/jsconfig.json", 14 content: "{}" 15 }; 16 const configWithExclude = { 17 path: config.path, 18 content: JSON.stringify({ exclude: ["largefile.js"] }) 19 }; 20 const host = createServerHost([f1, f2, config]); 21 const originalGetFileSize = host.getFileSize; 22 host.getFileSize = (filePath: string) => 23 filePath === f2.path ? server.maxProgramSizeForNonTsFiles + 1 : originalGetFileSize.call(host, filePath); 24 25 const { session, events } = createSessionWithEventTracking<server.ProjectLanguageServiceStateEvent>(host, server.ProjectLanguageServiceStateEvent); 26 session.executeCommand({ 27 seq: 0, 28 type: "request", 29 command: "open", 30 arguments: { file: f1.path } 31 } as protocol.OpenRequest); 32 const projectService = session.getProjectService(); 33 checkNumberOfProjects(projectService, { configuredProjects: 1 }); 34 const project = configuredProjectAt(projectService, 0); 35 assert.isFalse(project.languageServiceEnabled, "Language service enabled"); 36 assert.equal(events.length, 1, "should receive event"); 37 assert.equal(events[0].data.project, project, "project name"); 38 assert.equal(events[0].data.project.getProjectName(), config.path, "config path"); 39 assert.isFalse(events[0].data.languageServiceEnabled, "Language service state"); 40 41 host.writeFile(configWithExclude.path, configWithExclude.content); 42 host.checkTimeoutQueueLengthAndRun(2); 43 checkNumberOfProjects(projectService, { configuredProjects: 1 }); 44 assert.isTrue(project.languageServiceEnabled, "Language service enabled"); 45 assert.equal(events.length, 2, "should receive event"); 46 assert.equal(events[1].data.project, project, "project"); 47 assert.equal(events[1].data.project.getProjectName(), config.path, "config path"); 48 assert.isTrue(events[1].data.languageServiceEnabled, "Language service state"); 49 }); 50 51 it("Large file size is determined correctly", () => { 52 const f1: File = { 53 path: "/a/app.js", 54 content: "let x = 1;" 55 }; 56 const f2: File = { 57 path: "/a/largefile.js", 58 content: "", 59 fileSize: server.maxProgramSizeForNonTsFiles + 1 60 }; 61 const f3: File = { 62 path: "/a/extremlylarge.d.ts", 63 content: "", 64 fileSize: server.maxProgramSizeForNonTsFiles + 100 65 }; 66 const config = { 67 path: "/a/jsconfig.json", 68 content: "{}" 69 }; 70 const host = createServerHost([f1, f2, f3, libFile, config]); 71 const service = createProjectService(host, { logger: createLoggerWithInMemoryLogs(host) }); 72 service.openClientFile(f1.path); 73 const project = service.configuredProjects.get(config.path)!; 74 service.logger.info(`languageServiceEnabled: ${project.languageServiceEnabled}`); 75 service.logger.info(`lastFileExceededProgramSize: ${project.lastFileExceededProgramSize}`); 76 baselineTsserverLogs("projectLanguageServiceStateEvent", "large file size is determined correctly", service); 77 }); 78 }); 79} 80