from __future__ import annotations import unittest from Brain.yovision_brain.runtime import DemoEngine from Brain.yovision_brain.source import SyntheticSource, cv2 @unittest.skipIf(cv2 is None, "pinned OpenCV package is not installed") class RuntimeTests(unittest.TestCase): def test_rejects_non_finite_fps(self) -> None: with self.assertRaisesRegex(ValueError, "fps"): DemoEngine(SyntheticSource(width=320, height=180), fps=float("nan")) def test_synthetic_step_produces_safe_state_and_jpeg(self) -> None: engine = DemoEngine(SyntheticSource(width=320, height=180), fps=2.0) engine.step() state = engine.state() self.assertTrue(state["source"]["fixture"]) self.assertEqual(state["detector"]["name"], "scripted_fixture") self.assertEqual(state["frame"]["width"], 320) self.assertGreater(len(engine.frame_jpeg() or b""), 100) self.assertNotIn("url", state["source"]) def test_zone_update_increments_version(self) -> None: engine = DemoEngine(SyntheticSource(width=320, height=180)) updated = engine.update_zone({"name": "新区域", "points": [{"x": 0.1, "y": 0.1}, {"x": 0.9, "y": 0.1}, {"x": 0.5, "y": 0.9}]}) self.assertEqual(updated.version, 2) self.assertEqual(engine.state()["zone"]["name"], "新区域") if __name__ == "__main__": unittest.main()