Files
prism/test/capture-support.test.ts
T
2026-05-19 18:29:31 -04:00

68 lines
2.2 KiB
TypeScript

import assert from 'node:assert/strict'
import { readFile } from 'node:fs/promises'
import { join } from 'node:path'
import test from 'node:test'
import { getCaptureBackendSupport, resolveNativeCaptureSupport } from '../src/preload/captureSupport'
import type { NativeCaptureSupport, NativeSystemCaptureAPI } from '../src/types/nativeCapture'
function createNativeSystemCaptureAPI(support: NativeCaptureSupport): NativeSystemCaptureAPI {
return {
getSupport: () => support,
listOutputDevices: () => [],
start: () => ({
sampleRate: 48000,
channelCount: 2,
deviceId: 'default',
deviceLabel: 'Default',
}),
stop: () => {},
drain: () => ({
chunks: [],
overwriteCount: 0,
queueDepth: 0,
}),
nowMilliseconds: () => 0,
}
}
test('getCaptureBackendSupport resolves Linux native support from the addon surface', () => {
const support = getCaptureBackendSupport('linux', {
macosCapture: createNativeSystemCaptureAPI({ available: false, reason: 'macOS only' }),
windowsCapture: createNativeSystemCaptureAPI({ available: false, reason: 'Windows only' }),
linuxCapture: createNativeSystemCaptureAPI({
available: false,
reason: 'PulseAudio connection failed.',
}),
})
assert.deepEqual(support, {
nativeBackend: {
kind: 'native-linux',
available: false,
reason: 'PulseAudio connection failed.',
},
deviceInput: {
kind: 'device-input',
available: true,
reason: null,
},
})
})
test('resolveNativeCaptureSupport returns a module-unavailable reason when the addon is missing', () => {
assert.deepEqual(resolveNativeCaptureSupport('linux', null), {
kind: 'native-linux',
available: false,
reason: 'Native capture module is not available in this build.',
})
})
test('preload no longer exposes desktop source capture APIs', async () => {
const preloadSource = await readFile(join(process.cwd(), 'src', 'preload', 'index.ts'), 'utf8')
assert.doesNotMatch(preloadSource, /getDesktopSources/)
assert.doesNotMatch(preloadSource, /capture:get-backend-support/)
assert.doesNotMatch(preloadSource, /audio:get-desktop-sources/)
assert.match(preloadSource, /vumeter: nativeAddonModule\.vumeter/)
})