fix: support Windows file paths in editor opens
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { describe, expect, test } from 'bun:test';
|
||||
|
||||
import {
|
||||
getDirectoryForFilePath,
|
||||
getRelativeFilePath,
|
||||
isAbsoluteFilePath,
|
||||
isFilePathWithinDirectory,
|
||||
normalizeFilePath,
|
||||
toAbsoluteFilePath,
|
||||
} from './path-utils';
|
||||
|
||||
describe('path-utils', () => {
|
||||
test('normalizes Windows paths without losing drive roots', () => {
|
||||
expect(normalizeFilePath('C:\\Users\\Bohdan Triapitsyn\\projects\\openchamber\\')).toBe('C:/Users/Bohdan Triapitsyn/projects/openchamber');
|
||||
expect(normalizeFilePath('C:/')).toBe('C:/');
|
||||
expect(normalizeFilePath('\\\\server\\share\\project')).toBe('//server/share/project');
|
||||
});
|
||||
|
||||
test('recognizes Windows absolute paths', () => {
|
||||
expect(isAbsoluteFilePath('C:/Users/file.ts')).toBe(true);
|
||||
expect(isAbsoluteFilePath('C:\\Users\\file.ts')).toBe(true);
|
||||
expect(isAbsoluteFilePath('C:relative/file.ts')).toBe(false);
|
||||
expect(isAbsoluteFilePath('src/file.ts')).toBe(false);
|
||||
});
|
||||
|
||||
test('does not prefix Windows absolute targets with the workspace directory', () => {
|
||||
expect(toAbsoluteFilePath('C:/Users/Bohdan Triapitsyn/projects/openchamber', 'C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui/Button.tsx')).toBe(
|
||||
'C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui/Button.tsx',
|
||||
);
|
||||
});
|
||||
|
||||
test('joins relative targets under Windows workspaces', () => {
|
||||
expect(toAbsoluteFilePath('C:/Users/Bohdan Triapitsyn/projects/openchamber', 'packages/ui/Button.tsx')).toBe(
|
||||
'C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui/Button.tsx',
|
||||
);
|
||||
expect(toAbsoluteFilePath('C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui', '../web/package.json')).toBe(
|
||||
'C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/web/package.json',
|
||||
);
|
||||
});
|
||||
|
||||
test('compares Windows workspace containment case-insensitively', () => {
|
||||
expect(isFilePathWithinDirectory(
|
||||
'c:/users/bohdan triapitsyn/projects/openchamber/packages/ui/button.tsx',
|
||||
'C:/Users/Bohdan Triapitsyn/projects/openchamber',
|
||||
)).toBe(true);
|
||||
expect(getRelativeFilePath(
|
||||
'C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui/Button.tsx',
|
||||
'c:/users/bohdan triapitsyn/projects/openchamber',
|
||||
)).toBe('packages/ui/Button.tsx');
|
||||
});
|
||||
|
||||
test('falls back to file parent when current directory does not contain the path', () => {
|
||||
expect(getDirectoryForFilePath(
|
||||
'C:/Users/Bohdan Triapitsyn/projects/other',
|
||||
'C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui/Button.tsx',
|
||||
)).toBe('C:/Users/Bohdan Triapitsyn/projects/openchamber/packages/ui');
|
||||
expect(getDirectoryForFilePath('', '/tmp/file.txt')).toBe('/tmp');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user