• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1namespace ts.projectSystem {
2    describe("unittests:: tsserver:: getFileReferences", () => {
3        const importA = `import "./a";`;
4        const importCurlyFromA = `import {} from "./a";`;
5        const importAFromA = `import { a } from "/project/a";`;
6        const typeofImportA = `type T = typeof import("./a").a;`;
7
8        const aTs: File = {
9            path: "/project/a.ts",
10            content: "export const a = {};",
11        };
12        const bTs: File = {
13            path: "/project/b.ts",
14            content: importA,
15        };
16        const cTs: File = {
17            path: "/project/c.ts",
18            content: importCurlyFromA
19        };
20        const dTs: File = {
21            path: "/project/d.ts",
22            content: [importAFromA, typeofImportA].join("\n")
23        };
24        const tsconfig: File = {
25            path: "/project/tsconfig.json",
26            content: "{}",
27        };
28
29        function makeSampleSession() {
30            const host = createServerHost([aTs, bTs, cTs, dTs, tsconfig]);
31            const session = createSession(host);
32            openFilesForSession([aTs, bTs, cTs, dTs], session);
33            return session;
34        }
35
36        it("should get file references", () => {
37            const session = makeSampleSession();
38
39            const response = executeSessionRequest<protocol.FileReferencesRequest, protocol.FileReferencesResponse>(
40                session,
41                protocol.CommandTypes.FileReferences,
42                { file: aTs.path },
43            );
44
45            const expectResponse: protocol.FileReferencesResponseBody = {
46                refs: [
47                    makeReferenceItem({ file: bTs, text: "./a", lineText: importA, contextText: importA, isDefinition: false, isWriteAccess: false }),
48                    makeReferenceItem({ file: cTs, text: "./a", lineText: importCurlyFromA, contextText: importCurlyFromA, isDefinition: false, isWriteAccess: false }),
49                    makeReferenceItem({ file: dTs, text: "/project/a", lineText: importAFromA, contextText: importAFromA, isDefinition: false, isWriteAccess: false }),
50                    makeReferenceItem({ file: dTs, text: "./a", lineText: typeofImportA, contextText: typeofImportA, isDefinition: false, isWriteAccess: false }),
51                ],
52                symbolName: `"${aTs.path}"`,
53            };
54
55            assert.deepEqual(response, expectResponse);
56        });
57    });
58}
59