Skip to content

Commit 362ef13

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 362ef13

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

tests/test_device.py

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

0 commit comments

Comments
 (0)