path.client.spec.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { describe, expect, it } from 'vitest'
  2. import { abbreviateHomePath, resolveWorkspacePath } from '../src/client/workspaces/path.ts'
  3. describe('abbreviateHomePath', () => {
  4. it('collapses a POSIX home and its descendants', () => {
  5. expect(abbreviateHomePath('/Users/u', '/Users/u')).toBe('~')
  6. expect(abbreviateHomePath('/Users/u/', '/Users/u')).toBe('~')
  7. expect(abbreviateHomePath('/Users/u/Documents/project', '/Users/u')).toBe('~/Documents/project')
  8. expect(abbreviateHomePath('/Users/u/Documents/project/', '/Users/u/')).toBe('~/Documents/project/')
  9. })
  10. it('keeps prefix-adjacent names and non-home paths', () => {
  11. expect(abbreviateHomePath('/Users/u2/a.ts', '/Users/u')).toBe('/Users/u2/a.ts')
  12. expect(abbreviateHomePath('/etc/hosts', '/Users/u')).toBe('/etc/hosts')
  13. expect(abbreviateHomePath('src/a.ts', '/Users/u')).toBe('src/a.ts')
  14. expect(abbreviateHomePath('~/already', '/Users/u')).toBe('~/already')
  15. })
  16. it('does not abbreviate when home is missing, empty, or the filesystem root', () => {
  17. expect(abbreviateHomePath('/Users/u/a.ts')).toBe('/Users/u/a.ts')
  18. expect(abbreviateHomePath('/Users/u/a.ts', '')).toBe('/Users/u/a.ts')
  19. expect(abbreviateHomePath('/etc/hosts', '/')).toBe('/etc/hosts')
  20. expect(abbreviateHomePath('/etc/hosts', '///')).toBe('/etc/hosts')
  21. })
  22. it('leaves Windows drive and UNC paths verbatim', () => {
  23. expect(abbreviateHomePath('C:\\Users\\u\\project', 'C:\\Users\\u')).toBe('C:\\Users\\u\\project')
  24. expect(abbreviateHomePath('C:/Users/u/project', '/Users/u')).toBe('C:/Users/u/project')
  25. expect(abbreviateHomePath('/Users/u/project', 'C:\\Users\\u')).toBe('/Users/u/project')
  26. expect(abbreviateHomePath('\\\\server\\share\\u', '\\\\server\\share\\u')).toBe('\\\\server\\share\\u')
  27. })
  28. })
  29. describe('resolveWorkspacePath', () => {
  30. it('joins a relative path under cwd and passes absolute paths through', () => {
  31. expect(resolveWorkspacePath('/w', 'src/a.ts')).toBe('/w/src/a.ts')
  32. expect(resolveWorkspacePath('/w/', '/abs/a.ts')).toBe('/abs/a.ts')
  33. expect(resolveWorkspacePath(undefined, 'src/a.ts')).toBe('src/a.ts')
  34. expect(resolveWorkspacePath('/w', 'C:\\x\\a.ts')).toBe('C:\\x\\a.ts')
  35. })
  36. })