• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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