mirror of
https://github.com/stablyai/orca.git
synced 2026-10-19 08:03:13 +00:00
* fix(cli): preserve WSL cwd through the Windows bridge (#6965) # Conflicts: # src/cli/index.test.ts # src/cli/index.ts * fix(cli): preserve bridge exit codes (#6965) * fix(cli): harden WSL cwd bridge compatibility * chore(cli): align cwd tests with main * fix(cli): repair deleted WSL cwd before path conversion * chore: preserve main formatting after merge --------- Co-authored-by: Brennan Benson <brennanbenson@Brennans-MacBook-Pro.local> Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
81 lines
3.1 KiB
TypeScript
81 lines
3.1 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
isPathInsideOrEqual,
|
|
isRuntimePathAbsolute,
|
|
relativePathInsideRoot,
|
|
resolveRuntimePath
|
|
} from './cross-platform-path'
|
|
|
|
describe('cross-platform path containment', () => {
|
|
it('keeps POSIX sibling prefixes outside the root', () => {
|
|
expect(isPathInsideOrEqual('/repo/app', '/repo/app')).toBe(true)
|
|
expect(isPathInsideOrEqual('/repo/app', '/repo/app/src/index.ts')).toBe(true)
|
|
expect(isPathInsideOrEqual('/repo/app', '/repo/application/src/index.ts')).toBe(false)
|
|
expect(relativePathInsideRoot('/repo/app/', '/repo/app/src/index.ts')).toBe('src/index.ts')
|
|
})
|
|
|
|
it('handles Windows drive roots and sibling drives case-insensitively', () => {
|
|
expect(isPathInsideOrEqual('C:\\Repo', 'c:\\repo\\src\\index.ts')).toBe(true)
|
|
expect(relativePathInsideRoot('C:\\Repo', 'c:\\repo\\src\\index.ts')).toBe('src/index.ts')
|
|
expect(isPathInsideOrEqual('C:\\Repo', 'D:\\Repo\\src\\index.ts')).toBe(false)
|
|
expect(relativePathInsideRoot('C:\\', 'c:\\repo\\src\\index.ts')).toBe('repo/src/index.ts')
|
|
})
|
|
|
|
it('handles UNC roots, trailing slashes, mixed separators, and case', () => {
|
|
expect(isPathInsideOrEqual('\\\\Server\\Share\\Repo\\', '//server/share/repo/src')).toBe(true)
|
|
expect(relativePathInsideRoot('\\\\Server\\Share\\Repo\\', '//server/share/repo/src')).toBe(
|
|
'src'
|
|
)
|
|
expect(isPathInsideOrEqual('\\\\Server\\Share\\Repo', '\\\\server\\share\\repo2')).toBe(false)
|
|
})
|
|
|
|
it('treats WSL UNC aliases as the same case-sensitive filesystem', () => {
|
|
expect(
|
|
isPathInsideOrEqual(
|
|
'\\\\wsl$\\Ubuntu\\home\\Alice\\repo',
|
|
'\\\\wsl.localhost\\ubuntu\\home\\Alice\\repo\\src'
|
|
)
|
|
).toBe(true)
|
|
expect(
|
|
relativePathInsideRoot(
|
|
'\\\\wsl$\\Ubuntu\\home\\Alice\\repo',
|
|
'\\\\wsl.localhost\\ubuntu\\home\\Alice\\repo\\Src'
|
|
)
|
|
).toBe('Src')
|
|
expect(
|
|
isPathInsideOrEqual(
|
|
'\\\\wsl$\\Ubuntu\\home\\Alice\\repo',
|
|
'\\\\wsl.localhost\\ubuntu\\home\\alice\\repo\\src'
|
|
)
|
|
).toBe(false)
|
|
expect(
|
|
relativePathInsideRoot(
|
|
'\\\\wsl$\\Ubuntu\\home\\Alice\\repo',
|
|
'\\\\wsl.localhost\\ubuntu\\home\\alice\\repo\\src'
|
|
)
|
|
).toBeNull()
|
|
expect(
|
|
relativePathInsideRoot(
|
|
'\\\\wsl$\\Ubuntu\\home\\Alice\\repo',
|
|
'\\\\wsl.localhost\\ubuntu\\home\\Alice\\repo\\line\nbreak'
|
|
)
|
|
).toBe('line\nbreak')
|
|
})
|
|
|
|
it('resolves POSIX relative paths without using the process cwd', () => {
|
|
expect(resolveRuntimePath('/repos/app/repo', '../worktrees/feature')).toBe(
|
|
'/repos/app/worktrees/feature'
|
|
)
|
|
expect(resolveRuntimePath('/repos/app/repo', '/custom/worktrees')).toBe('/custom/worktrees')
|
|
expect(isRuntimePathAbsolute('../worktrees')).toBe(false)
|
|
})
|
|
|
|
it('resolves Windows relative paths with Windows semantics', () => {
|
|
expect(resolveRuntimePath('C:\\Repos\\app\\repo', '..\\worktrees\\feature')).toBe(
|
|
'C:/Repos/app/worktrees/feature'
|
|
)
|
|
expect(resolveRuntimePath('C:\\Repos\\app\\repo', 'D:\\worktrees')).toBe('D:/worktrees')
|
|
expect(isRuntimePathAbsolute('/remote/worktrees', 'windows')).toBe(true)
|
|
})
|
|
})
|