"""Tests for hardware_mock.image_sources."""
import numpy as np
import pytest
from hardware_mock.image_sources import make_generator, resolve_spec
def test_default_is_checkerboard():
spec = resolve_spec("cam", 64, 48, overrides=None)
assert spec.kind == "checkerboard"
frame = make_generator(spec)()
assert frame.shape == (48, 64, 3)
assert frame.dtype == np.uint8
assert len(np.unique(frame)) >= 2
def test_solid_color_override():
spec = resolve_spec("cam", 4, 4, overrides={"cam": {"kind": "solid", "color": "#10203040"[:7]}})
frame = make_generator(spec)()
assert frame[0, 0, 0] == 0x30
assert frame[0, 0, 1] == 0x20
assert frame[0, 0, 2] == 0x10
def test_gradient_shape():
spec = resolve_spec("cam", 8, 4, overrides={"cam": {"kind": "gradient"}})
frame = make_generator(spec)()
assert frame.shape == (4, 8, 3)
def test_invalid_kind_rejected():
with pytest.raises(ValueError):
resolve_spec("cam", 8, 8, overrides={"cam": {"kind": "noise"}})
def test_invalid_color_rejected():
with pytest.raises(ValueError):
resolve_spec("cam", 8, 8, overrides={"cam": {"kind": "solid", "color": "not-a-color"}})