import { afterEach, beforeEach, describe, expect, it } from 'vitest'; const originalPlatform = process.platform; function setPlatform(platform: string) { Object.defineProperty(process, 'platform', { value: platform, writable: true }); } afterEach(() => { Object.defineProperty(process, 'platform', { value: originalPlatform, writable: true }); }); describe('env-path', () => { let getPathEnvKey: (env: Record) => string; let getPathEnvValue: (env: Record) => string; let setPathEnvValue: ( env: Record, nextPath: string, ) => Record; let prependPathEntry: ( env: Record, entry: string, ) => { env: Record; path: string }; beforeEach(async () => { const mod = await import('@electron/utils/env-path'); getPathEnvKey = mod.getPathEnvKey; getPathEnvValue = mod.getPathEnvValue; setPathEnvValue = mod.setPathEnvValue; prependPathEntry = mod.prependPathEntry; }); it('prefers Path key on Windows', () => { setPlatform('win32'); expect(getPathEnvKey({ Path: 'C:\\Windows', PATH: 'C:\\Temp' })).toBe('Path'); }); it('reads path value from Path key on Windows', () => { setPlatform('win32'); expect(getPathEnvValue({ Path: 'C:\\Windows;C:\\Tools' })).toBe('C:\\Windows;C:\\Tools'); }); it('uses PATH key on non-Windows', () => { setPlatform('linux'); expect(getPathEnvKey({ PATH: '/usr/bin', Path: '/tmp/bin' })).toBe('PATH'); }); it('removes duplicate path keys when setting a new value', () => { setPlatform('win32'); const next = setPathEnvValue( { Path: 'C:\\A', PATH: 'C:\\B', PaTh: 'C:\\C', HOME: 'C:\\Users\\me' }, 'C:\\A;C:\\B', ); expect(next.Path).toBe('C:\\A;C:\\B'); expect(next.PATH).toBeUndefined(); expect(next.PaTh).toBeUndefined(); expect(next.HOME).toBe('C:\\Users\\me'); }); it('prepends entry with Windows delimiter', () => { setPlatform('win32'); const next = prependPathEntry({ Path: 'C:\\Windows\\System32' }, 'D:\\clawx\\resources\\bin'); expect(next.path).toBe('D:\\clawx\\resources\\bin;C:\\Windows\\System32'); expect(next.env.Path).toBe('D:\\clawx\\resources\\bin;C:\\Windows\\System32'); }); it('prepends entry with POSIX delimiter', () => { setPlatform('linux'); const next = prependPathEntry({ PATH: '/usr/bin:/bin' }, '/opt/clawx/bin'); expect(next.path).toBe('/opt/clawx/bin:/usr/bin:/bin'); expect(next.env.PATH).toBe('/opt/clawx/bin:/usr/bin:/bin'); }); });