mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-13 05:42:26 +08:00
53 lines
2.1 KiB
JavaScript
53 lines
2.1 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
import test from 'node:test'
|
|
|
|
import beforePack, { cleanStaleAppOutDir } from '../scripts/before-pack.mjs'
|
|
|
|
test('cleanStaleAppOutDir removes a populated unpacked directory', () => {
|
|
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'hermes-before-pack-'))
|
|
try {
|
|
const appOutDir = path.join(tempRoot, 'linux-unpacked')
|
|
fs.mkdirSync(appOutDir, { recursive: true })
|
|
// Reproduce the corrupted partial state: license + payload present,
|
|
// electron binary missing — exactly what trips the ENOENT rename.
|
|
fs.writeFileSync(path.join(appOutDir, 'LICENSE.electron.txt'), 'x', 'utf8')
|
|
fs.writeFileSync(path.join(appOutDir, 'resources.pak'), 'x', 'utf8')
|
|
fs.mkdirSync(path.join(appOutDir, 'resources'), { recursive: true })
|
|
fs.writeFileSync(path.join(appOutDir, 'resources', 'app.asar'), 'x', 'utf8')
|
|
|
|
const removed = cleanStaleAppOutDir(appOutDir)
|
|
|
|
assert.equal(removed, true)
|
|
assert.equal(fs.existsSync(appOutDir), false)
|
|
} finally {
|
|
fs.rmSync(tempRoot, { recursive: true, force: true })
|
|
}
|
|
})
|
|
|
|
test('cleanStaleAppOutDir is a no-op when the directory is absent', () => {
|
|
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'hermes-before-pack-'))
|
|
try {
|
|
const missing = path.join(tempRoot, 'does-not-exist')
|
|
assert.equal(cleanStaleAppOutDir(missing), false)
|
|
} finally {
|
|
fs.rmSync(tempRoot, { recursive: true, force: true })
|
|
}
|
|
})
|
|
|
|
test('cleanStaleAppOutDir ignores empty or invalid input', () => {
|
|
assert.equal(cleanStaleAppOutDir(''), false)
|
|
assert.equal(cleanStaleAppOutDir(undefined), false)
|
|
assert.equal(cleanStaleAppOutDir(null), false)
|
|
assert.equal(cleanStaleAppOutDir(42), false)
|
|
})
|
|
|
|
test('beforePack default export resolves even when cleanup throws', async () => {
|
|
// A directory path that rmSync can't remove is simulated by passing a
|
|
// context whose appOutDir is a file the hook will try (and be allowed) to
|
|
// remove; the contract under test is that the hook never rejects.
|
|
await assert.doesNotReject(beforePack({ appOutDir: '', electronPlatformName: 'linux' }))
|
|
})
|