47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { buildDirectoryTree } from '@renderer/components/chat/SessionContextPanel/DirectoryTree/buildDirectoryTree';
|
|
|
|
import type { ClaudeMdContextInjection } from '@renderer/types/contextInjection';
|
|
|
|
function injection(path: string): ClaudeMdContextInjection {
|
|
return {
|
|
id: path,
|
|
category: 'claude-md',
|
|
path,
|
|
source: 'directory',
|
|
displayName: 'CLAUDE.md',
|
|
isGlobal: false,
|
|
estimatedTokens: 12,
|
|
firstSeenInGroup: 'ai-0',
|
|
};
|
|
}
|
|
|
|
describe('buildDirectoryTree Windows paths', () => {
|
|
it('strips project root case-insensitively for Windows paths with mixed separators', () => {
|
|
const root = buildDirectoryTree(
|
|
[injection('c:\\Users\\Alice\\repo\\src\\CLAUDE.md')],
|
|
'C:/Users/Alice/Repo'
|
|
);
|
|
|
|
expect(root.children.has('c:')).toBe(false);
|
|
expect(root.children.get('src')?.children.get('CLAUDE.md')?.path).toBe(
|
|
'c:\\Users\\Alice\\repo\\src\\CLAUDE.md'
|
|
);
|
|
});
|
|
|
|
it('does not strip sibling paths that only share a prefix', () => {
|
|
const root = buildDirectoryTree(
|
|
[injection('C:\\Users\\Alice\\Repo2\\CLAUDE.md')],
|
|
'C:\\Users\\Alice\\Repo'
|
|
);
|
|
|
|
expect(root.children.get('C:')?.children.get('Users')).toBeDefined();
|
|
});
|
|
|
|
it('falls back to the injection path when project root is empty', () => {
|
|
const root = buildDirectoryTree([injection('C:\\Users\\Alice\\Repo\\CLAUDE.md')], '');
|
|
|
|
expect(root.children.get('C:')?.children.get('Users')).toBeDefined();
|
|
});
|
|
});
|