jarvis / tests /test_hand_tracker.py
Jonathan Haas
Clean up test lint debt and dead test variables
4fe6f2d
Raw
History Blame Contribute Delete
1.9 kB
import time
import numpy as np
import pytest
from jarvis.presence import PresenceLoop
from jarvis.robot.controller import RobotController
from jarvis.vision.hand_tracker import HandTracker
def test_detect_hand_returns_none_when_dark():
robot = RobotController(sim=True)
robot.connect()
presence = PresenceLoop(robot)
tracker = HandTracker(presence=presence, get_frame=lambda: None)
frame = np.zeros((100, 100, 3), dtype=np.uint8)
assert tracker.detect_hand(frame) is None
def test_detect_hand_finds_bright_blob():
robot = RobotController(sim=True)
robot.connect()
presence = PresenceLoop(robot)
tracker = HandTracker(presence=presence, get_frame=lambda: None)
frame = np.zeros((100, 100, 3), dtype=np.uint8)
frame[30:60, 40:70] = 255
detection = tracker.detect_hand(frame)
assert detection is not None
assert 0.3 < detection.cx < 0.8
assert 0.3 < detection.cy < 0.8
def test_loop_updates_presence_signals():
robot = RobotController(sim=True)
robot.connect()
presence = PresenceLoop(robot)
frame = np.zeros((100, 100, 3), dtype=np.uint8)
frame[20:50, 60:90] = 255
tracker = HandTracker(presence=presence, get_frame=lambda: frame, fps=100)
tracker.start()
time.sleep(0.1)
tracker.stop()
assert presence.signals.hand_last_seen is not None
def test_stop_clears_hand_present():
robot = RobotController(sim=True)
robot.connect()
presence = PresenceLoop(robot)
tracker = HandTracker(presence=presence, get_frame=lambda: None, fps=100)
presence.signals.hand_present = True
tracker.stop()
assert presence.signals.hand_present is False
def test_invalid_fps_raises():
robot = RobotController(sim=True)
robot.connect()
presence = PresenceLoop(robot)
with pytest.raises(ValueError):
HandTracker(presence=presence, get_frame=lambda: None, fps=0)