import { describe, expect, it } from 'vitest'; import { getRelativePathWithinPrefix, isAbsoluteOrHomePath, isPathPrefix, } from '../../../src/shared/utils/platformPath'; describe('platformPath Windows containment', () => { it('matches Windows drive paths case-insensitively and preserves child path style', () => { expect(isPathPrefix('C:/Users/Alice/Repo', 'c:\\Users\\Alice\\repo\\src\\app.ts')).toBe(true); expect( getRelativePathWithinPrefix('C:/Users/Alice/Repo', 'c:\\Users\\Alice\\repo\\src\\app.ts') ).toBe('src\\app.ts'); }); it('matches UNC paths with mixed separators', () => { expect( getRelativePathWithinPrefix('\\\\server\\share\\Repo', '//server/share/repo/src/app.ts') ).toBe('src/app.ts'); }); it('rejects sibling paths that only share the same text prefix', () => { expect( getRelativePathWithinPrefix('C:\\Users\\Alice\\Repo', 'C:\\Users\\Alice\\Repo2\\x.ts') ).toBe(null); }); it('keeps POSIX paths case-sensitive', () => { expect(getRelativePathWithinPrefix('/Users/Alice/Repo', '/Users/Alice/Repo/src/app.ts')).toBe( 'src/app.ts' ); expect(getRelativePathWithinPrefix('/Users/Alice/Repo', '/Users/Alice/repo/src/app.ts')).toBe( null ); }); it('does not treat an empty prefix as the root of absolute paths', () => { expect(isPathPrefix('', '/Users/Alice/Repo/src/app.ts')).toBe(false); expect(getRelativePathWithinPrefix('', '/Users/Alice/Repo/src/app.ts')).toBe(null); }); it('detects absolute and home-relative paths across platforms', () => { expect(isAbsoluteOrHomePath('/Users/Alice/Repo')).toBe(true); expect(isAbsoluteOrHomePath('C:\\Users\\Alice\\Repo')).toBe(true); expect(isAbsoluteOrHomePath('\\\\server\\share\\Repo')).toBe(true); expect(isAbsoluteOrHomePath('~')).toBe(true); expect(isAbsoluteOrHomePath('~/Repo')).toBe(true); expect(isAbsoluteOrHomePath('~\\Repo')).toBe(true); expect(isAbsoluteOrHomePath('src/app.ts')).toBe(false); }); });