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');
  });
});
