c27a12f56c
* fix windows hermes home fallback * bundle Hermes desktop browser runtime * bundle desktop channel dependencies * avoid matrix e2ee build dependency * fix windows npm shim execution * fix bundled agent-browser chrome packaging * fix agent-browser chrome fallback copy * fix windows agent-browser home lookup * copy agent-browser chrome after install * fix browser output decoding on windows --------- Co-authored-by: xingzhi <chuzihao.czh@alibaba-inc.com>
62 lines
2.3 KiB
TypeScript
62 lines
2.3 KiB
TypeScript
import { mkdirSync, mkdtempSync, rmSync } from 'fs'
|
|
import { homedir, tmpdir } from 'os'
|
|
import { join, resolve } from 'path'
|
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
|
import { detectHermesHome } from '../../packages/server/src/services/hermes/hermes-path'
|
|
|
|
describe('Hermes path detection', () => {
|
|
const originalEnv = { ...process.env }
|
|
const originalPlatform = process.platform
|
|
let tempDir = ''
|
|
|
|
beforeEach(() => {
|
|
tempDir = mkdtempSync(join(tmpdir(), 'hermes-path-'))
|
|
process.env = { ...originalEnv }
|
|
delete process.env.HERMES_HOME
|
|
delete process.env.LOCALAPPDATA
|
|
delete process.env.APPDATA
|
|
})
|
|
|
|
afterEach(() => {
|
|
Object.defineProperty(process, 'platform', { value: originalPlatform })
|
|
process.env = { ...originalEnv }
|
|
if (tempDir) rmSync(tempDir, { recursive: true, force: true })
|
|
tempDir = ''
|
|
})
|
|
|
|
it('keeps explicit HERMES_HOME even when the path does not exist', () => {
|
|
process.env.HERMES_HOME = join(tempDir, 'custom-home')
|
|
|
|
expect(detectHermesHome()).toBe(resolve(tempDir, 'custom-home'))
|
|
})
|
|
|
|
it('falls back to ~/.hermes on Windows when LOCALAPPDATA hermes is missing', () => {
|
|
Object.defineProperty(process, 'platform', { value: 'win32' })
|
|
process.env.LOCALAPPDATA = join(tempDir, 'Local')
|
|
|
|
expect(detectHermesHome()).toBe(resolve(homedir(), '.hermes'))
|
|
})
|
|
|
|
it('uses existing Windows LOCALAPPDATA hermes before APPDATA', () => {
|
|
Object.defineProperty(process, 'platform', { value: 'win32' })
|
|
const localHermes = join(tempDir, 'Local', 'hermes')
|
|
const roamingHermes = join(tempDir, 'Roaming', 'hermes')
|
|
mkdirSync(localHermes, { recursive: true })
|
|
mkdirSync(roamingHermes, { recursive: true })
|
|
process.env.LOCALAPPDATA = join(tempDir, 'Local')
|
|
process.env.APPDATA = join(tempDir, 'Roaming')
|
|
|
|
expect(detectHermesHome()).toBe(resolve(localHermes))
|
|
})
|
|
|
|
it('falls back to existing Windows APPDATA hermes when LOCALAPPDATA hermes is missing', () => {
|
|
Object.defineProperty(process, 'platform', { value: 'win32' })
|
|
const roamingHermes = join(tempDir, 'Roaming', 'hermes')
|
|
mkdirSync(roamingHermes, { recursive: true })
|
|
process.env.LOCALAPPDATA = join(tempDir, 'Local')
|
|
process.env.APPDATA = join(tempDir, 'Roaming')
|
|
|
|
expect(detectHermesHome()).toBe(resolve(roamingHermes))
|
|
})
|
|
})
|