| 1234567891011121314151617181920212223242526 |
- import { expect, it } from 'vitest'
- import { OutputLedger } from '../src/output-ledger.ts'
- it('accounts for exact JSON escaping, separators and optional completion values', () => {
- const ledger = new OutputLedger(20)
- const logs: string[] = []
- expect(ledger.admit('first', logs)).toBe(true)
- expect(ledger.admit('second', logs)).toBe(true)
- expect(ledger.admit('third', logs)).toBe(false)
- expect(ledger.success(logs)).toEqual({ logs: ['first', 'second'] })
- expect(ledger.success(logs, 1)).toEqual({ logs: ['first', 'second'], value: 1 })
- expect(ledger.success(logs, 'too long').error?.kind).toBe('output-limit')
- })
- it('retains a bounded prefix when logs or a failure diagnostic exceed the limit', () => {
- for (const maxBytes of [4, 8, 40, 80]) {
- const ledger = new OutputLedger(maxBytes)
- const result = ledger.limit(['a', 'b', '你好🙂'.repeat(50)])
- expect(result.error?.kind).toBe('output-limit')
- const bytes = Buffer.byteLength(JSON.stringify(result.logs)) + Buffer.byteLength(JSON.stringify(result.error?.message))
- expect(bytes).toBeLessThanOrEqual(maxBytes)
- }
- const ledger = new OutputLedger(80)
- expect(ledger.failure([], { kind: 'exception', message: 'short' })).toEqual({ logs: [], error: { kind: 'exception', message: 'short' } })
- expect(ledger.failure([], { kind: 'exception', message: 'x'.repeat(100) }).error?.kind).toBe('output-limit')
- })
|