Skip to content

Commit b22713c

Browse files
committed
test: Add Harness test for supportedMultiCamDeviceCombinations again - now with fixed nitrogen __element
1 parent 8da5b00 commit b22713c

2 files changed

Lines changed: 105 additions & 0 deletions

File tree

apps/simple-camera/__tests__/visioncamera.devices.harness.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,54 @@ describe('VisionCamera - Devices', () => {
151151
expect(factory.userPreferredCamera?.id).toBe(back.id)
152152
factory.userPreferredCamera = previous
153153
})
154+
155+
it('returns an empty supportedMultiCamDeviceCombinations array when the platform does not support multi-cam', () => {
156+
if (VisionCamera.supportsMultiCamSessions) {
157+
console.log(
158+
'[SKIP] supportedMultiCamDeviceCombinations empty: platform supports multi-cam',
159+
)
160+
return
161+
}
162+
expect(factory.supportedMultiCamDeviceCombinations.length).toBe(0)
163+
})
164+
165+
it('returns at least one supportedMultiCamDeviceCombinations combination when the platform supports multi-cam', () => {
166+
if (!VisionCamera.supportsMultiCamSessions) {
167+
console.log(
168+
'[SKIP] supportedMultiCamDeviceCombinations non-empty: multi-cam not supported on this platform',
169+
)
170+
return
171+
}
172+
expect(factory.supportedMultiCamDeviceCombinations.length).toBeGreaterThanOrEqual(1)
173+
})
174+
175+
it('every device in a supportedMultiCamDeviceCombinations combination is also present in cameraDevices', () => {
176+
const combinations = factory.supportedMultiCamDeviceCombinations
177+
if (combinations.length === 0) {
178+
console.log(
179+
'[SKIP] supportedMultiCamDeviceCombinations device lookup: no combinations on this platform',
180+
)
181+
return
182+
}
183+
const knownIds = new Set(factory.cameraDevices.map((d) => d.id))
184+
for (const combination of combinations) {
185+
expect(combination.length).toBeGreaterThan(0)
186+
for (const device of combination) {
187+
expect(knownIds.has(device.id)).toBe(true)
188+
}
189+
}
190+
})
191+
192+
it('logs every supported multi-cam device combination', () => {
193+
const combinations = factory.supportedMultiCamDeviceCombinations
194+
console.log(
195+
`supportedMultiCamDeviceCombinations: ${combinations.length} combinations`,
196+
)
197+
for (const [index, combination] of combinations.entries()) {
198+
const description = combination
199+
.map((d) => `${d.position}:${d.id}`)
200+
.join(', ')
201+
console.log(` [${index}] ${description}`)
202+
}
203+
})
154204
})

apps/simple-camera/__tests__/visioncamera.session.harness.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,59 @@ describe('VisionCamera - Session', () => {
254254
await session.stop()
255255
sub.remove()
256256
})
257+
258+
it('configures, starts and stops a multi-cam session for every supported device combination', async () => {
259+
if (!VisionCamera.supportsMultiCamSessions) {
260+
console.log(
261+
'[SKIP] multi-cam combinations: not supported on this platform',
262+
)
263+
return
264+
}
265+
const combinations = factory.supportedMultiCamDeviceCombinations
266+
if (combinations.length === 0) {
267+
console.log(
268+
'[SKIP] multi-cam combinations: no combinations reported on this device',
269+
)
270+
return
271+
}
272+
273+
for (const combination of combinations) {
274+
const session = await VisionCamera.createCameraSession(true)
275+
const connections = combination.map((device) => ({
276+
input: device,
277+
outputs: [
278+
{
279+
output: VisionCamera.createPhotoOutput({
280+
targetResolution: CommonResolutions.HD_4_3,
281+
containerFormat: 'jpeg' as const,
282+
quality: 0.8,
283+
qualityPrioritization: 'balanced' as const,
284+
}),
285+
mirrorMode: 'auto' as const,
286+
},
287+
],
288+
constraints: [],
289+
}))
290+
291+
const controllers = await session.configure(connections)
292+
expect(controllers.length).toBe(combination.length)
293+
for (let i = 0; i < combination.length; i++) {
294+
expect(controllers[i]?.device.id).toBe(combination[i]?.id)
295+
}
296+
297+
let started = false
298+
const sub = session.addOnStartedListener(() => {
299+
started = true
300+
})
301+
await session.start()
302+
await waitUntil(() => started, { timeout: 15_000 })
303+
await session.stop()
304+
sub.remove()
305+
306+
const description = combination
307+
.map((d) => `${d.position}:${d.id}`)
308+
.join(', ')
309+
console.log(`multi-cam session ok: [${description}]`)
310+
}
311+
})
257312
})

0 commit comments

Comments
 (0)