Files
superwork/vscode/src/panel/handlers/terminalTabs.test.ts
T

75 lines
2.7 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { findTerminalByTabLabel, focusedTerminal, FocusedTerminalTracker } from './terminalTabs'
const t371 = { name: 'issue-371-测试' }
const t257 = { name: 'issue-257-实施 (feature/billing)' }
const t37 = { name: 'issue-37-测试' }
const terminals = [t37, t371, t257]
describe('findTerminalByTabLabel', () => {
it('精确匹配优先', () => {
expect(findTerminalByTabLabel(terminals, 'issue-371-测试')).toBe(t371)
})
it('tab label 被 OSC title 追加后缀时按前缀匹配', () => {
expect(findTerminalByTabLabel(terminals, 'issue-371-测试 (main)')).toBe(t371)
})
it('terminal name 带后缀而 label 是原名时也能匹配', () => {
expect(findTerminalByTabLabel(terminals, 'issue-257-实施')).toBe(t257)
})
it('issue-37 不会误配 issue-371', () => {
expect(findTerminalByTabLabel(terminals, 'issue-37-测试')).toBe(t37)
})
it('找不到返回 undefined', () => {
expect(findTerminalByTabLabel(terminals, 'Project Dashboard')).toBeUndefined()
})
})
describe('focusedTerminal', () => {
const isTerminal = (input: unknown): boolean => input === 'terminal'
it('活动 tab 是终端 → 解析出对应终端', () => {
expect(focusedTerminal({ label: 'issue-371-测试', input: 'terminal' }, isTerminal, terminals)).toBe(t371)
})
it('活动 tab 不是终端(看板 webview)→ undefined', () => {
expect(focusedTerminal({ label: 'Superpowers Kanban', input: 'webview' }, isTerminal, terminals)).toBeUndefined()
})
it('没有活动 tab → undefined', () => {
expect(focusedTerminal(undefined, isTerminal, terminals)).toBeUndefined()
})
})
describe('focusedTerminalTracker', () => {
it('只开一个终端 tab:点回看板再点回该 tab 要再次触发', () => {
const tracker = new FocusedTerminalTracker<{ name: string }>()
expect(tracker.sync(t371)).toBe(t371)
expect(tracker.sync(undefined)).toBeUndefined()
expect(tracker.sync(t371)).toBe(t371)
})
it('同一终端重复上报(label 改写)不触发', () => {
const tracker = new FocusedTerminalTracker<{ name: string }>()
expect(tracker.sync(t371)).toBe(t371)
expect(tracker.sync(t371)).toBeUndefined()
expect(tracker.sync(t371)).toBeUndefined()
})
it('在终端之间切换触发新终端', () => {
const tracker = new FocusedTerminalTracker<{ name: string }>()
expect(tracker.sync(t371)).toBe(t371)
expect(tracker.sync(t257)).toBe(t257)
expect(tracker.sync(t371)).toBe(t371)
})
it('焦点离开终端不触发', () => {
const tracker = new FocusedTerminalTracker<{ name: string }>()
tracker.sync(t371)
expect(tracker.sync(undefined)).toBeUndefined()
})
})