fix: improve Windows tunnel support
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
import { describe, expect, it } from 'bun:test';
|
||||
|
||||
import {
|
||||
createExecutableSearchEnv,
|
||||
findExecutableOnPath,
|
||||
getExecutableSearchDirectories,
|
||||
resolveExecutableLaunchTarget,
|
||||
} from './executable-search.js';
|
||||
|
||||
describe('getExecutableSearchDirectories', () => {
|
||||
it('adds the WindowsApps app-alias directory on Windows', () => {
|
||||
const directories = getExecutableSearchDirectories({
|
||||
platform: 'win32',
|
||||
env: {
|
||||
PATH: 'C:\\Tools',
|
||||
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
|
||||
},
|
||||
});
|
||||
|
||||
expect(directories).toContain('C:\\Users\\Ada\\AppData\\Local\\Microsoft\\WindowsApps');
|
||||
});
|
||||
|
||||
it('reads Windows Path casing when PATH is not present', () => {
|
||||
const directories = getExecutableSearchDirectories({
|
||||
platform: 'win32',
|
||||
env: {
|
||||
Path: 'C:\\Tools;C:\\MoreTools',
|
||||
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
|
||||
},
|
||||
});
|
||||
|
||||
expect(directories[0]).toBe('C:\\Tools');
|
||||
expect(directories[1]).toBe('C:\\MoreTools');
|
||||
});
|
||||
});
|
||||
|
||||
describe('findExecutableOnPath', () => {
|
||||
it('finds Windows Store app execution aliases even when PATH omits WindowsApps', () => {
|
||||
const aliasPath = 'C:\\Users\\Ada\\AppData\\Local\\Microsoft\\WindowsApps\\ngrok.exe';
|
||||
const fsLike = {
|
||||
statSync: (candidate) => {
|
||||
if (candidate === aliasPath) {
|
||||
return { isFile: () => true };
|
||||
}
|
||||
throw new Error('not found');
|
||||
},
|
||||
accessSync: () => {},
|
||||
};
|
||||
|
||||
const resolved = findExecutableOnPath('ngrok', {
|
||||
platform: 'win32',
|
||||
env: {
|
||||
PATH: 'C:\\Tools',
|
||||
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
|
||||
PATHEXT: '.EXE;.CMD',
|
||||
},
|
||||
fsLike,
|
||||
});
|
||||
|
||||
expect(resolved).toBe(aliasPath);
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolveExecutableLaunchTarget', () => {
|
||||
it('returns a Windows launch target with WindowsApps on PATH when stat lookup fails', () => {
|
||||
const target = resolveExecutableLaunchTarget('ngrok', {
|
||||
platform: 'win32',
|
||||
env: {
|
||||
PATH: 'C:\\Windows\\System32',
|
||||
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
|
||||
},
|
||||
fsLike: {
|
||||
statSync: () => { throw new Error('EACCES'); },
|
||||
accessSync: () => {},
|
||||
},
|
||||
});
|
||||
|
||||
expect(target?.command).toBe('ngrok');
|
||||
expect(target?.env.Path).toContain('C:\\Users\\Ada\\AppData\\Local\\Microsoft\\WindowsApps');
|
||||
});
|
||||
});
|
||||
|
||||
describe('createExecutableSearchEnv', () => {
|
||||
it('keeps Windows PATH variants in sync', () => {
|
||||
const env = createExecutableSearchEnv({
|
||||
platform: 'win32',
|
||||
env: {
|
||||
PATH: 'C:\\Windows\\System32',
|
||||
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
|
||||
},
|
||||
});
|
||||
|
||||
expect(env.PATH).toBe(env.Path);
|
||||
expect(env.path).toBe(env.Path);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user