50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
import re
|
|
|
|
from discovery import Camera, discover_cameras, select_cameras
|
|
|
|
CARD_RE = re.compile(r"\s*(\d+)\s+\[([A-Za-z0-9_]+)\s*\]:\s*(.*)")
|
|
|
|
|
|
def test_padded_c920_card_line_matches():
|
|
line = " 2 [C920 ]: USB-Audio - HD Pro Webcam C920"
|
|
m = CARD_RE.match(line)
|
|
assert m is not None
|
|
assert int(m.group(1)) == 2
|
|
assert m.group(2) == "C920"
|
|
|
|
|
|
def test_naive_word_regex_misses_padding():
|
|
line = " 2 [C920 ]: USB-Audio - HD Pro Webcam C920"
|
|
assert re.match(r"\s*(\d+)\s+\[(\w+)\]:", line) is None
|
|
|
|
|
|
def test_live_discover_present_cameras():
|
|
cams = discover_cameras()
|
|
assert len(cams) >= 1
|
|
assert all(c.audio_card is not None for c in cams)
|
|
assert all(c.serial for c in cams)
|
|
assert all(re.match(r"cam-\d{2}$", c.identity) for c in cams)
|
|
ids = [c.identity for c in cams]
|
|
assert ids == sorted(ids)
|
|
|
|
|
|
def test_select_cameras_by_identity_not_index():
|
|
cams = [
|
|
Camera(index=0, identity="cam-01", video_device="/dev/cam01",
|
|
audio_card=2, serial="A"),
|
|
Camera(index=1, identity="cam-05", video_device="/dev/cam05",
|
|
audio_card=6, serial="B"),
|
|
Camera(index=2, identity="cam-20", video_device="/dev/cam20",
|
|
audio_card=21, serial="C"),
|
|
]
|
|
out = select_cameras(cams, ["1", "5"])
|
|
assert [c.identity for c in out] == ["cam-01", "cam-05"]
|
|
|
|
|
|
def test_select_cameras_all():
|
|
cams = [
|
|
Camera(index=0, identity="cam-01", video_device="/dev/cam01",
|
|
audio_card=2, serial="A"),
|
|
]
|
|
assert select_cameras(cams, ["all"]) == cams
|