import assert from 'node:assert/strict'; import test from 'node:test'; import { WebcamSession } from '../src/webcam-session.js'; function fakeStream() { const track = { stopped: false, stop() { this.stopped = true; } }; return { track, getTracks: () => [track] }; } test('reuses one webcam stream across repeated renders and closes every track', async () => { let acquisitions = 0; const stream = fakeStream(); const session = new WebcamSession(async () => { acquisitions += 1; return stream; }); const [first, second] = await Promise.all([session.open({ video: true }), session.open({ video: true })]); assert.equal(first, stream); assert.equal(second, stream); assert.equal(acquisitions, 1); session.close(); assert.equal(stream.track.stopped, true); assert.equal(session.stream, null); }); test('stops a stream that resolves after the webcam was closed', async () => { const stream = fakeStream(); let resolveAcquire; const session = new WebcamSession(() => new Promise(resolve => { resolveAcquire = resolve; })); const opening = session.open({ video: true }); session.close(); resolveAcquire(stream); assert.equal(await opening, null); assert.equal(stream.track.stopped, true); assert.equal(session.stream, null); });