maestro/src/ssh/ring-buffer.test.ts
2026-06-03 05:08:00 +00:00

43 lines
1.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { ByteRingBuffer } from './ring-buffer.js';
describe('ByteRingBuffer', () => {
it('append within cap stores all bytes', () => {
const b = new ByteRingBuffer(10);
b.append(Buffer.from('abc'));
b.append(Buffer.from('de'));
expect(b.bytes).toBe(5);
expect(b.concat().toString()).toBe('abcde');
});
it('append over cap drops oldest bytes', () => {
const b = new ByteRingBuffer(5);
b.append(Buffer.from('abcde'));
b.append(Buffer.from('fg'));
expect(b.bytes).toBe(5);
expect(b.concat().toString()).toBe('cdefg');
});
it('single append larger than cap stores only the tail', () => {
const b = new ByteRingBuffer(3);
b.append(Buffer.from('abcdef'));
expect(b.bytes).toBe(3);
expect(b.concat().toString()).toBe('def');
});
it('tail(n) returns only the last n bytes', () => {
const b = new ByteRingBuffer(10);
b.append(Buffer.from('abcdefgh'));
expect(b.tail(3).toString()).toBe('fgh');
expect(b.tail(100).toString()).toBe('abcdefgh');
});
it('clear empties the buffer', () => {
const b = new ByteRingBuffer(10);
b.append(Buffer.from('xyz'));
b.clear();
expect(b.bytes).toBe(0);
expect(b.concat().length).toBe(0);
});
});