Path: blob/main/extensions/copilot/src/extension/linkify/test/vscode-node/symbolLinkifier.test.ts
13405 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as vscode from 'vscode';6import { NullEnvService } from '../../../../platform/env/common/nullEnvService';7import { LinkifySymbolAnchor } from '../../common/linkifiedText';8import { ILinkifyService, LinkifyService } from '../../common/linkifyService';9import { SymbolLinkifier } from '../../vscode-node/symbolLinkifier';10import { assertPartsEqual, createMockFsService, createMockWorkspaceService, linkify, workspaceFile } from '../node/util';1112function createTestLinkifierService(...listOfFiles: readonly string[]): ILinkifyService {13const fs = createMockFsService(listOfFiles);14const workspaceService = createMockWorkspaceService();15const linkifier = new LinkifyService(fs, workspaceService, NullEnvService.Instance);16linkifier.registerGlobalLinkifier({ create: () => new SymbolLinkifier(fs, workspaceService) });17return linkifier;18}1920suite('Symbol Linkify', () => {2122test(`Should create symbol links from Markdown links`, async () => {23const linkifier = createTestLinkifierService(24'file.ts',25'src/file.ts',26);27assertPartsEqual(28(await linkify(linkifier,29'[`symbol`](file.ts) [`symbol`](src/file.ts)')30).parts,31[32new LinkifySymbolAnchor({33name: 'symbol',34containerName: '',35kind: vscode.SymbolKind.Constant,36location: new vscode.Location(workspaceFile('file.ts'), new vscode.Position(0, 0))37}),38' ',39new LinkifySymbolAnchor({40name: 'symbol',41containerName: '',42kind: vscode.SymbolKind.Constant,43location: new vscode.Location(workspaceFile('src/file.ts'), new vscode.Position(0, 0))44})45],46);47});4849test(`Should de-linkify symbol links to files that don't exist`, async () => {50const linkifier = createTestLinkifierService();51assertPartsEqual(52(await linkify(linkifier,53'[`symbol`](file.ts) [`symbol`](src/file.ts)'54)).parts,55[56'`symbol` `symbol`'57],58);59});6061test(`Should create symbol links for symbols containing $ or _`, async () => {62const linkifier = createTestLinkifierService(63'file.ts',64'src/file.ts',65);66assertPartsEqual(67(await linkify(linkifier,68'[`_symbol`](file.ts) [`$symbol`](src/file.ts)',69)).parts,70[71new LinkifySymbolAnchor({72name: '_symbol',73containerName: '',74kind: vscode.SymbolKind.Constant,75location: new vscode.Location(workspaceFile('file.ts'), new vscode.Position(0, 0))76}),77' ',78new LinkifySymbolAnchor({79name: '$symbol',80containerName: '',81kind: vscode.SymbolKind.Constant,82location: new vscode.Location(workspaceFile('src/file.ts'), new vscode.Position(0, 0))83})84],85);86});8788test(`Should create symbol links for symbols with function call or generic syntax`, async () => {89const linkifier = createTestLinkifierService(90'file.ts',91'src/file.ts',92);9394assertPartsEqual(95(await linkify(linkifier,96'[`symbol<T>`](file.ts) [`func()`](src/file.ts)',97)).parts,98[99new LinkifySymbolAnchor({100name: 'symbol<T>',101containerName: '',102kind: vscode.SymbolKind.Constant,103location: new vscode.Location(workspaceFile('file.ts'), new vscode.Position(0, 0))104}),105' ',106new LinkifySymbolAnchor({107name: 'func()',108containerName: '',109kind: vscode.SymbolKind.Constant,110location: new vscode.Location(workspaceFile('src/file.ts'), new vscode.Position(0, 0))111})112]113);114});115116test(`Should support files with spaces`, async () => {117const linkifier = createTestLinkifierService(118'space file.ts',119);120assertPartsEqual(121(await linkify(linkifier,122'[`symbol`](space%20file.ts) [`symbol`](space%20file.ts)')123).parts,124[125new LinkifySymbolAnchor({126name: 'symbol',127containerName: '',128kind: vscode.SymbolKind.Constant,129location: new vscode.Location(workspaceFile('space file.ts'), new vscode.Position(0, 0))130}),131' ',132new LinkifySymbolAnchor({133name: 'symbol',134containerName: '',135kind: vscode.SymbolKind.Constant,136location: new vscode.Location(workspaceFile('space file.ts'), new vscode.Position(0, 0))137})138],139);140});141});142143144