claude-code-best/src/utils/__tests__/xdg.test.ts
2026-05-01 21:39:30 +08:00

85 lines
2.5 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import {
getXDGStateHome,
getXDGCacheHome,
getXDGDataHome,
getUserBinDir,
} from '../xdg'
describe('getXDGStateHome', () => {
test('returns ~/.local/state by default', () => {
const result = getXDGStateHome({ homedir: '/home/user' })
expect(result).toBe('/home/user/.local/state')
})
test('respects XDG_STATE_HOME env var', () => {
const result = getXDGStateHome({
homedir: '/home/user',
env: { XDG_STATE_HOME: '/custom/state' },
})
expect(result).toBe('/custom/state')
})
test('uses custom homedir from options', () => {
const result = getXDGStateHome({ homedir: '/opt/home' })
expect(result).toBe('/opt/home/.local/state')
})
})
describe('getXDGCacheHome', () => {
test('returns ~/.cache by default', () => {
const result = getXDGCacheHome({ homedir: '/home/user' })
expect(result).toBe('/home/user/.cache')
})
test('respects XDG_CACHE_HOME env var', () => {
const result = getXDGCacheHome({
homedir: '/home/user',
env: { XDG_CACHE_HOME: '/tmp/cache' },
})
expect(result).toBe('/tmp/cache')
})
})
describe('getXDGDataHome', () => {
test('returns ~/.local/share by default', () => {
const result = getXDGDataHome({ homedir: '/home/user' })
expect(result).toBe('/home/user/.local/share')
})
test('respects XDG_DATA_HOME env var', () => {
const result = getXDGDataHome({
homedir: '/home/user',
env: { XDG_DATA_HOME: '/custom/data' },
})
expect(result).toBe('/custom/data')
})
})
describe('getUserBinDir', () => {
test('returns ~/.local/bin', () => {
const result = getUserBinDir({ homedir: '/home/user' })
expect(result).toBe('/home/user/.local/bin')
})
test('uses custom homedir from options', () => {
const result = getUserBinDir({ homedir: '/opt/me' })
expect(result).toBe('/opt/me/.local/bin')
})
})
describe('path construction', () => {
test('all paths end with correct subdirectory', () => {
const home = '/home/test'
expect(getXDGStateHome({ homedir: home })).toMatch(/\.local\/state$/)
expect(getXDGCacheHome({ homedir: home })).toMatch(/\.cache$/)
expect(getXDGDataHome({ homedir: home })).toMatch(/\.local\/share$/)
expect(getUserBinDir({ homedir: home })).toMatch(/\.local\/bin$/)
})
test('respects HOME via homedir override', () => {
const result = getXDGStateHome({ homedir: '/Users/me' })
expect(result).toBe('/Users/me/.local/state')
})
})