import numpy as np from bookmark.capture_strategies.motion_stop import MotionStopStrategy def make_frame(value: int) -> np.ndarray: return np.full((10, 10, 3), value, dtype=np.uint8) def test_does_not_fire_while_frames_keep_changing(): strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=3) for value in range(0, 50, 10): assert strategy.observe(make_frame(value)) is False def test_fires_after_stable_frames(): strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=3) strategy.observe(make_frame(100)) strategy.observe(make_frame(100)) strategy.observe(make_frame(100)) assert strategy.observe(make_frame(100)) is True def test_fires_only_once(): strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=2) strategy.observe(make_frame(50)) strategy.observe(make_frame(50)) assert strategy.observe(make_frame(50)) is True assert strategy.observe(make_frame(50)) is False def test_reset_clears_state(): strategy = MotionStopStrategy(motion_threshold=5.0, stable_frames=2) strategy.observe(make_frame(50)) strategy.observe(make_frame(50)) strategy.observe(make_frame(50)) strategy.reset() assert strategy.observe(make_frame(50)) is False