74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
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, string | undefined>) => string;
|
|
let getPathEnvValue: (env: Record<string, string | undefined>) => string;
|
|
let setPathEnvValue: (
|
|
env: Record<string, string | undefined>,
|
|
nextPath: string,
|
|
) => Record<string, string | undefined>;
|
|
let prependPathEntry: (
|
|
env: Record<string, string | undefined>,
|
|
entry: string,
|
|
) => { env: Record<string, string | undefined>; 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');
|
|
});
|
|
});
|