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