mirror of
https://github.com/stablyai/orca.git
synced 2026-10-08 08:02:32 +00:00
68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
foldWslUncPathCaseInsensitiveParts,
|
|
isWslUncPath,
|
|
parseWslUncPath,
|
|
toWindowsWslPath
|
|
} from './wsl-paths'
|
|
|
|
describe('wsl path helpers', () => {
|
|
it('parses modern and legacy WSL UNC paths without platform checks', () => {
|
|
expect(parseWslUncPath('\\\\wsl.localhost\\Ubuntu\\home\\jin\\repo')).toEqual({
|
|
distro: 'Ubuntu',
|
|
linuxPath: '/home/jin/repo'
|
|
})
|
|
expect(parseWslUncPath('\\\\wsl$\\Debian\\home\\jin')).toEqual({
|
|
distro: 'Debian',
|
|
linuxPath: '/home/jin'
|
|
})
|
|
})
|
|
|
|
it('rejects ordinary Windows and POSIX paths', () => {
|
|
expect(isWslUncPath('C:\\Users\\jin\\repo')).toBe(false)
|
|
expect(isWslUncPath('/home/jin/repo')).toBe(false)
|
|
})
|
|
|
|
it.each([
|
|
['/home/jin/repo', '\\\\wsl.localhost\\Ubuntu\\home\\jin\\repo'],
|
|
['/', '\\\\wsl.localhost\\Ubuntu\\'],
|
|
['/mnt/c/Users/jin', 'C:\\Users\\jin'],
|
|
['/MNT/c/Repo', '\\\\wsl.localhost\\Ubuntu\\MNT\\c\\Repo'],
|
|
['/mnt/C/Repo', '\\\\wsl.localhost\\Ubuntu\\mnt\\C\\Repo']
|
|
])('converts %s without folding case-sensitive Linux paths', (linuxPath, expected) => {
|
|
expect(toWindowsWslPath(linuxPath, 'Ubuntu')).toBe(expected)
|
|
})
|
|
})
|
|
|
|
describe('foldWslUncPathCaseInsensitiveParts', () => {
|
|
it('folds share spelling, distro casing, and separators but not the Linux tail', () => {
|
|
expect(foldWslUncPathCaseInsensitiveParts('\\\\WSL$\\Ubuntu\\home\\jin\\Repo')).toBe(
|
|
'//wsl.localhost/ubuntu/home/jin/Repo'
|
|
)
|
|
expect(foldWslUncPathCaseInsensitiveParts('//wsl.localhost/UBUNTU/home/jin/Repo')).toBe(
|
|
'//wsl.localhost/ubuntu/home/jin/Repo'
|
|
)
|
|
})
|
|
|
|
it('folds drvfs automount tails but not other /mnt entries', () => {
|
|
expect(foldWslUncPathCaseInsensitiveParts('\\\\wsl$\\Ubuntu\\mnt\\C\\Users\\Jin')).toBe(
|
|
'//wsl.localhost/ubuntu/mnt/c/users/jin'
|
|
)
|
|
expect(foldWslUncPathCaseInsensitiveParts('\\\\wsl$\\Ubuntu\\mnt\\wsl\\Data')).toBe(
|
|
'//wsl.localhost/ubuntu/mnt/wsl/Data'
|
|
)
|
|
})
|
|
|
|
it('does not treat a case-variant /MNT dir as the drvfs automount', () => {
|
|
expect(foldWslUncPathCaseInsensitiveParts('\\\\wsl$\\Ubuntu\\MNT\\c\\Repo')).toBe(
|
|
'//wsl.localhost/ubuntu/MNT/c/Repo'
|
|
)
|
|
})
|
|
|
|
it('returns null for non-WSL paths', () => {
|
|
expect(foldWslUncPathCaseInsensitiveParts('C:\\Users\\jin')).toBeNull()
|
|
expect(foldWslUncPathCaseInsensitiveParts('//server/share/x')).toBeNull()
|
|
expect(foldWslUncPathCaseInsensitiveParts('/home/jin')).toBeNull()
|
|
})
|
|
})
|