mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 14:25:51 +00:00
Squashed merge of: 1. fix/mcp-tsc-errors — 修复上游 MCP 重构后的 tsc 错误和测试失败 2. feat/pipe-mute-disconnect — Pipe IPC 逻辑断开、/lang 命令、mute 状态机 3. feat/stub-recovery-all — 实现全部 stub 恢复 (task 001-012) 4. feat/kairos-activation — KAIROS 激活解除阻塞 + 工具实现 5. codex/openclaw-autonomy-pr — 自治权限系统、运行记录、managed flows Additional: 6. daemon/job 命令层级化重构 (subcommand 架构) 7. 跨平台后台引擎抽象 (detached/tmux engines) 8. 修复 src/ 中 43 个预存在的 TypeScript 类型错误 9. 修复 langfuse isolated test mock 完整性 10. 修复 CodeRabbit 审查的 Critical/Major/Minor 问题 11. remote-control-server logger 抽象 (测试 stderr 静默化) 12. /simplify 审查修复 (代码复用、质量、效率)
83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
import { describe, test, expect, mock } from 'bun:test'
|
|
|
|
// Mock dependencies before importing the module under test
|
|
let mockPreferredLanguage: string | undefined
|
|
let mockSystemLocale: string | undefined
|
|
|
|
mock.module('src/utils/config.js', () => ({
|
|
getGlobalConfig: () => ({
|
|
preferredLanguage: mockPreferredLanguage,
|
|
}),
|
|
}))
|
|
|
|
mock.module('src/utils/intl.js', () => ({
|
|
getSystemLocaleLanguage: () => mockSystemLocale,
|
|
}))
|
|
|
|
const { getResolvedLanguage, getLanguageDisplayName } = await import(
|
|
'src/utils/language.js'
|
|
)
|
|
|
|
describe('getResolvedLanguage', () => {
|
|
test('returns en when config is explicitly en', () => {
|
|
mockPreferredLanguage = 'en'
|
|
mockSystemLocale = 'zh'
|
|
expect(getResolvedLanguage()).toBe('en')
|
|
})
|
|
|
|
test('returns zh when config is explicitly zh', () => {
|
|
mockPreferredLanguage = 'zh'
|
|
mockSystemLocale = 'en'
|
|
expect(getResolvedLanguage()).toBe('zh')
|
|
})
|
|
|
|
test('falls back to system locale zh when config is auto', () => {
|
|
mockPreferredLanguage = 'auto'
|
|
mockSystemLocale = 'zh'
|
|
expect(getResolvedLanguage()).toBe('zh')
|
|
})
|
|
|
|
test('falls back to en when config is auto and system locale is not zh', () => {
|
|
mockPreferredLanguage = 'auto'
|
|
mockSystemLocale = 'en'
|
|
expect(getResolvedLanguage()).toBe('en')
|
|
})
|
|
|
|
test('falls back to en when config is auto and system locale is undefined', () => {
|
|
mockPreferredLanguage = 'auto'
|
|
mockSystemLocale = undefined
|
|
expect(getResolvedLanguage()).toBe('en')
|
|
})
|
|
|
|
test('falls back to auto behavior when config preferredLanguage is undefined', () => {
|
|
mockPreferredLanguage = undefined
|
|
mockSystemLocale = 'zh'
|
|
expect(getResolvedLanguage()).toBe('zh')
|
|
})
|
|
|
|
test('defaults to en when both config and locale are undefined', () => {
|
|
mockPreferredLanguage = undefined
|
|
mockSystemLocale = undefined
|
|
expect(getResolvedLanguage()).toBe('en')
|
|
})
|
|
})
|
|
|
|
describe('getLanguageDisplayName', () => {
|
|
test('returns Auto (follow system) for auto', () => {
|
|
expect(getLanguageDisplayName('auto')).toBe('Auto (follow system)')
|
|
})
|
|
|
|
test('returns English for en', () => {
|
|
expect(getLanguageDisplayName('en')).toBe('English')
|
|
})
|
|
|
|
test('returns 中文 for zh', () => {
|
|
expect(getLanguageDisplayName('zh')).toBe('中文')
|
|
})
|
|
|
|
test('returns the input string for unknown language codes', () => {
|
|
expect(getLanguageDisplayName('fr')).toBe('fr')
|
|
expect(getLanguageDisplayName('unknown')).toBe('unknown')
|
|
})
|
|
})
|