Skip to content

Commit 10e7ca6

Browse files
WyattBlueclaude
andcommitted
Add tests for enumerate_input/output_devices
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent f5c43e3 commit 10e7ca6

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

tests/test_device.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import sys
2+
3+
import pytest
4+
5+
import av.error
6+
from av.device import DeviceInfo, enumerate_input_devices, enumerate_output_devices
7+
8+
9+
def test_device_info_attributes() -> None:
10+
d = DeviceInfo("0", "FaceTime HD Camera", True, ["video"])
11+
assert d.name == "0"
12+
assert d.description == "FaceTime HD Camera"
13+
assert d.is_default is True
14+
assert d.media_types == ["video"]
15+
16+
17+
def test_device_info_repr_default() -> None:
18+
d = DeviceInfo("0", "FaceTime HD Camera", True, ["video"])
19+
assert repr(d) == "<av.DeviceInfo '0' 'FaceTime HD Camera' (default)>"
20+
21+
22+
def test_device_info_repr_non_default() -> None:
23+
d = DeviceInfo("1", "Built-in Microphone", False, ["audio"])
24+
assert repr(d) == "<av.DeviceInfo '1' 'Built-in Microphone'>"
25+
26+
27+
def test_enumerate_input_devices_unknown_format() -> None:
28+
with pytest.raises(ValueError, match="no such input format"):
29+
enumerate_input_devices("not_a_real_format_xyz")
30+
31+
32+
def test_enumerate_output_devices_unknown_format() -> None:
33+
with pytest.raises(ValueError, match="no such output format"):
34+
enumerate_output_devices("not_a_real_format_xyz")
35+
36+
37+
def _assert_valid_device_list(devices: list[DeviceInfo]) -> None:
38+
assert isinstance(devices, list)
39+
for device in devices:
40+
assert isinstance(device, DeviceInfo)
41+
assert isinstance(device.name, str)
42+
assert isinstance(device.description, str)
43+
assert isinstance(device.is_default, bool)
44+
assert isinstance(device.media_types, list)
45+
assert all(isinstance(mt, str) for mt in device.media_types)
46+
47+
48+
@pytest.mark.skipif(sys.platform != "darwin", reason="avfoundation is macOS only")
49+
def test_enumerate_input_devices_avfoundation() -> None:
50+
_assert_valid_device_list(enumerate_input_devices("avfoundation"))
51+
52+
53+
@pytest.mark.skipif(sys.platform != "linux", reason="v4l2 is Linux only")
54+
def test_enumerate_input_devices_v4l2() -> None:
55+
_assert_valid_device_list(enumerate_input_devices("video4linux2"))
56+
57+
58+
@pytest.mark.skipif(sys.platform != "linux", reason="alsa is Linux only")
59+
def test_enumerate_input_devices_alsa() -> None:
60+
_assert_valid_device_list(enumerate_input_devices("alsa"))
61+
62+
63+
@pytest.mark.skipif(sys.platform != "win32", reason="dshow is Windows only")
64+
def test_enumerate_input_devices_dshow() -> None:
65+
try:
66+
_assert_valid_device_list(enumerate_input_devices("dshow"))
67+
except av.error.OSError:
68+
pytest.skip("dshow device enumeration not available")

0 commit comments

Comments
 (0)