import type { Uri } from 'vscode' import { describe, expect, it, vi } from 'vitest' import { pathQaLocation, topQaLocation } from './pathPreview' const places = vi.hoisted(() => { const folder = { uri: { scheme: 'file', path: '/ws/app', fsPath: '/ws/app', toString: () => 'file:///ws/app' }, name: 'app', index: 0 } /** ⌘ 点进去的标准库源码,不在工作区里 */ const library = { scheme: 'file', query: '', path: '/Users/me/.local/lib/python3.12/pathlib.py', fsPath: '/Users/me/.local/lib/python3.12/pathlib.py' } /** locateQa 给它的位置:第一个工作区文件夹,键是 ~/… */ const outside = { folder, key: '~/.local/lib/python3.12/pathlib.py', promptPath: library.fsPath, outsideDir: '/Users/me/.local/lib/python3.12' } return { folder, library, outside } }) vi.mock('vscode', () => ({ Uri: {}, workspace: { workspaceFolders: [places.folder], getWorkspaceFolder: (uri: { path: string }) => uri.path === '/ws/app' || uri.path.startsWith('/ws/app/') ? places.folder : undefined, }, })) vi.mock('../folderStore', () => ({ locateQa: (uri: { path: string }) => uri.path === places.library.path ? places.outside : undefined })) describe('顶部问答记在哪', () => { it('工作区外的库文件也能在顶部问:和块下面的问答同一个定位(第一个工作区文件夹 + ~/… 键)', () => { const library = places.library as unknown as Uri expect(pathQaLocation(library)).toEqual(places.outside) expect(topQaLocation(library)).toEqual({ folder: places.folder, key: 'file:///ws/app\n~/.local/lib/python3.12/pathlib.py' }) }) it('工作区根本身也能问:键是空字符串,发给模型也是空的(写成 .)', () => { const root = { scheme: 'file', query: '', path: '/ws/app', fsPath: '/ws/app' } as unknown as Uri expect(pathQaLocation(root)).toEqual({ folder: places.folder, key: '', promptPath: '' }) expect(topQaLocation(root)).toEqual({ folder: places.folder, key: 'file:///ws/app\n' }) }) })