• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1namespace ts.projectSystem {
2    describe("unittests:: tsserver:: format settings", () => {
3        it("can be set globally", () => {
4            const f1 = {
5                path: "/a/b/app.ts",
6                content: "let x;"
7            };
8            const host = createServerHost([f1]);
9            const projectService = createProjectService(host);
10            projectService.openClientFile(f1.path);
11
12            const defaultSettings = projectService.getFormatCodeOptions(f1.path as server.NormalizedPath);
13
14            // set global settings
15            const newGlobalSettings1 = { ...defaultSettings, placeOpenBraceOnNewLineForControlBlocks: !defaultSettings.placeOpenBraceOnNewLineForControlBlocks };
16            projectService.setHostConfiguration({ formatOptions: newGlobalSettings1 });
17
18            // get format options for file - should be equal to new global settings
19            const s1 = projectService.getFormatCodeOptions(server.toNormalizedPath(f1.path));
20            assert.deepEqual(s1, newGlobalSettings1, "file settings should be the same with global settings");
21
22            // set per file format options
23            const newPerFileSettings = { ...defaultSettings, insertSpaceAfterCommaDelimiter: !defaultSettings.insertSpaceAfterCommaDelimiter };
24            projectService.setHostConfiguration({ formatOptions: newPerFileSettings, file: f1.path });
25
26            // get format options for file - should be equal to new per-file settings
27            const s2 = projectService.getFormatCodeOptions(server.toNormalizedPath(f1.path));
28            assert.deepEqual(s2, newPerFileSettings, "file settings should be the same with per-file settings");
29
30            // set new global settings - they should not affect ones that were set per-file
31            const newGlobalSettings2 = { ...defaultSettings, insertSpaceAfterSemicolonInForStatements: !defaultSettings.insertSpaceAfterSemicolonInForStatements };
32            projectService.setHostConfiguration({ formatOptions: newGlobalSettings2 });
33
34            // get format options for file - should be equal to new per-file settings
35            const s3 = projectService.getFormatCodeOptions(server.toNormalizedPath(f1.path));
36            assert.deepEqual(s3, newPerFileSettings, "file settings should still be the same with per-file settings");
37        });
38    });
39}
40