import { describe, expect, it } from 'vitest'; import { StreamingUtf8Decoder } from '../src/terminal/session-bridge.js'; describe('StreamingUtf8Decoder', () => { it('recompose un caractère UTF-8 coupé en frontière de frame', () => { const dec = new StreamingUtf8Decoder(); // 'é' = 0xC3 0xA9, coupé en deux frames expect(dec.decode(new Uint8Array([0xc3]))).toBe(''); expect(dec.decode(new Uint8Array([0xa9]))).toBe('é'); }); it('décode l’ASCII normalement', () => { const dec = new StreamingUtf8Decoder(); expect(dec.decode(new Uint8Array([0x6c, 0x73, 0x0a]))).toBe('ls\n'); }); it('reset() vide l’état partiel', () => { const dec = new StreamingUtf8Decoder(); expect(dec.decode(new Uint8Array([0xe2, 0x9c]))).toBe(''); // début d’un ✓ (3 octets) dec.reset(); // après reset, l’octet partiel est oublié → un nouveau caractère complet décode proprement expect(dec.decode(new Uint8Array([0x41]))).toBe('A'); }); });