Spaces:
Running
Running
| 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); | |
| }); | |