orca/src/shared/terminal-reply-query-scan.t...

42 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
EMPTY_TERMINAL_REPLY_QUERY_SCAN_STATE,
scanTerminalReplyQuerySequences
} from './terminal-reply-query-scan'
describe('terminal reply query scan', () => {
it('records reply-eliciting queries with their output high-water sequence', () => {
const data = `before\x1b[6nafter\x1b[?2031h`
const result = scanTerminalReplyQuerySequences(data, 100, EMPTY_TERMINAL_REPLY_QUERY_SCAN_STATE)
expect(result.queries).toEqual([
{ data: '\x1b[6n', startSeq: 106, endSeq: 110 },
{ data: '\x1b[?2031h', startSeq: 115, endSeq: 123 }
])
expect(result.state).toEqual(EMPTY_TERMINAL_REPLY_QUERY_SCAN_STATE)
})
it('assembles a query split across contiguous PTY chunks', () => {
const first = scanTerminalReplyQuerySequences(
'\x1b[?',
20,
EMPTY_TERMINAL_REPLY_QUERY_SCAN_STATE
)
const second = scanTerminalReplyQuerySequences('2026$p', 23, first.state)
expect(first.queries).toEqual([])
expect(second.queries).toEqual([{ data: '\x1b[?2026$p', startSeq: 20, endSeq: 29 }])
})
it('drops a partial query when output sequence continuity is lost', () => {
const first = scanTerminalReplyQuerySequences(
'\x1b[?',
20,
EMPTY_TERMINAL_REPLY_QUERY_SCAN_STATE
)
const second = scanTerminalReplyQuerySequences('2026$p', 30, first.state)
expect(second.queries).toEqual([])
})
})