test(web): cover terminal cursor theme binding
This commit is contained in:
1 parent
80043785c4
commit
578e1e428f
1 file changed
+35
-1
@@ -22,7 +22,12 @@ class FakeTerminal {
|
||||
input: ((data: string) => void) | undefined
|
||||
readonly disposeInput = vi.fn()
|
||||
readonly parser = { registerOscHandler: vi.fn(() => ({ dispose: vi.fn() })) }
|
||||
readonly onRender = vi.fn(() => ({ dispose: vi.fn() }))
|
||||
renderFrame: (() => void) | undefined
|
||||
readonly disposeRender = vi.fn(() => { this.renderFrame = undefined })
|
||||
readonly onRender = vi.fn((listener: () => void) => {
|
||||
this.renderFrame = listener
|
||||
return { dispose: this.disposeRender }
|
||||
})
|
||||
readonly resize = vi.fn()
|
||||
readonly reset = vi.fn()
|
||||
readonly focus = vi.fn()
|
||||
@@ -203,6 +208,35 @@ it('updates screen, cursor and selection colors without replacing the terminal o
|
||||
expect(h.detach).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('reads the current theme on xterm render and releases the cursor listener on unmount', () => {
|
||||
const colors = { backgroundColor: 'rgb(255, 255, 255)', color: 'rgb(23, 25, 29)' }
|
||||
const cursor = document.createElement('span')
|
||||
cursor.className = 'xterm-cursor'
|
||||
cursor.style.backgroundColor = 'black'
|
||||
cursor.style.color = 'cyan'
|
||||
const readStyle = window.getComputedStyle.bind(window)
|
||||
vi.spyOn(window, 'getComputedStyle').mockImplementation(element => element === cursor ? readStyle(element) : colors as CSSStyleDeclaration)
|
||||
const h = mount({ ...idle, info, phase: 'connected', writable: true })
|
||||
const terminal = fake.terminals[0]!
|
||||
const screen = terminal.textarea!.parentElement!
|
||||
screen.append(cursor)
|
||||
const appliedTheme = terminal.options.theme
|
||||
terminal.renderFrame?.()
|
||||
expect(screen.style.getPropertyValue('--terminal-cursor')).toBe('#ffffff')
|
||||
expect(screen.style.getPropertyValue('--terminal-cursor-accent')).toBe('#000000')
|
||||
expect(terminal.options.theme).toBe(appliedTheme)
|
||||
|
||||
colors.backgroundColor = 'rgb(23, 25, 29)'
|
||||
colors.color = 'rgb(231, 233, 238)'
|
||||
h.changeTheme()
|
||||
terminal.renderFrame?.()
|
||||
expect(screen.style.getPropertyValue('--terminal-cursor')).toBe(colors.color)
|
||||
expect(fake.terminals).toEqual([terminal])
|
||||
h.view.unmount()
|
||||
expect(terminal.disposeRender).toHaveBeenCalledOnce()
|
||||
expect(terminal.renderFrame).toBeUndefined()
|
||||
})
|
||||
|
||||
it('fits only visible writable terminals with measurable dimensions and clamps the provider limits', () => {
|
||||
const state: TerminalViewState = { ...idle, info, phase: 'connected', writable: true }
|
||||
const h = mount(state)
|
||||
|
||||
Reference in new issue
Block a user