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