Spaces:
Running
Running
File size: 1,267 Bytes
6c30253 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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);
});
|