Skip to content

Commit e9504bd

Browse files
committed
Update tests for CapturedFrame integration
Adjust camera backend and factory tests to return `CapturedFrame` objects instead of `(frame, timestamp)` tuples, matching the updated camera API. Extend `tests/conftest.py` fake DLCLive doubles with runner, processing, and post-processing behavior so `DLCLiveProcessor._process_frame` paths are exercised under the new flow.
1 parent 75dad99 commit e9504bd

4 files changed

Lines changed: 42 additions & 12 deletions

File tree

tests/cameras/test_backend_discovery.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def _write_temp_backend_package(tmp_path: Path, pkg_name: str = "test_backends_p
2626
# A backend module which registers itself as "lazyfake"
2727
backend_code = textwrap.dedent(
2828
"""
29-
from dlclivegui.cameras.base import register_backend, CameraBackend
29+
from dlclivegui.cameras.base import register_backend, CameraBackend, CapturedFrame
3030
from dlclivegui.config import CameraSettings
3131
import numpy as np
3232
import time
@@ -44,7 +44,7 @@ def open(self) -> None:
4444
def read(self):
4545
# Small deterministic frame + timestamp
4646
frame = np.zeros((2, 3, 3), dtype=np.uint8)
47-
return frame, time.time()
47+
return CapturedFrame(frame, time.time(), None)
4848
4949
def close(self) -> None:
5050
self._opened = False

tests/cameras/test_factory.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44

55
from dlclivegui.cameras import CameraFactory, DetectedCamera, base
6+
from dlclivegui.cameras.base import CapturedFrame
67
from dlclivegui.config import CameraSettings
78

89

@@ -69,7 +70,7 @@ def open(self):
6970
raise AssertionError("Probing path should not open when rich discovery returns a list")
7071

7172
def read(self):
72-
return None, 0.0
73+
return CapturedFrame(None, 0.0, None)
7374

7475
def close(self):
7576
pass
@@ -112,7 +113,7 @@ def open(self):
112113
pass
113114

114115
def read(self):
115-
return None, 0.0
116+
return CapturedFrame(None, 0.0, None)
116117

117118
def close(self):
118119
pass
@@ -150,7 +151,7 @@ def open(self):
150151
raise RuntimeError("no device")
151152

152153
def read(self):
153-
return None, 0.0
154+
return CapturedFrame(None, 0.0, None)
154155

155156
def close(self):
156157
pass
@@ -182,7 +183,7 @@ def open(self):
182183
raise RuntimeError("no device")
183184

184185
def read(self):
185-
return None, 0.0
186+
return CapturedFrame(None, 0.0, None)
186187

187188
def close(self):
188189
pass
@@ -220,7 +221,7 @@ def open(self):
220221
pass
221222

222223
def read(self):
223-
return None, 0.0
224+
return CapturedFrame(None, 0.0, None)
224225

225226
def close(self):
226227
pass
@@ -252,7 +253,7 @@ def open(self):
252253
pass
253254

254255
def read(self):
255-
return None, 0.0
256+
return CapturedFrame(None, 0.0, None)
256257

257258
def close(self):
258259
pass
@@ -280,7 +281,7 @@ def open(self):
280281
pass
281282

282283
def read(self):
283-
return None, 0.0
284+
return CapturedFrame(None, 0.0, None)
284285

285286
def close(self):
286287
pass
@@ -311,7 +312,7 @@ def open(self):
311312
pass
312313

313314
def read(self):
314-
return None, 0.0
315+
return CapturedFrame(None, 0.0, None)
315316

316317
def close(self):
317318
pass
@@ -341,7 +342,7 @@ def open(self):
341342
raise RuntimeError("no device")
342343

343344
def read(self):
344-
return None, 0.0
345+
return CapturedFrame(None, 0.0, None)
345346

346347
def close(self):
347348
pass

tests/cameras/test_fake_backend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def open(self):
2626
def read(self):
2727
assert self._opened
2828
img = np.zeros((10, 20, 3), dtype=np.uint8)
29-
return img, 123.456
29+
return base.CapturedFrame(img, 123.456, None)
3030

3131
def close(self):
3232
self._opened = False

tests/conftest.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,18 @@ def _factory(settings: CameraSettings):
154154
# ---------------------------------------------------------------------
155155
# Test doubles
156156
# ---------------------------------------------------------------------
157+
class FakeRunner:
158+
"""Minimal fake DLCLive runner used by DLCLiveProcessor._process_frame."""
159+
160+
def __init__(self, parent):
161+
self._parent = parent
162+
self.device = "cpu"
163+
self.model = None
164+
self.net = None
165+
166+
def get_pose(self, processed_frame):
167+
self._parent.pose_calls += 1
168+
return np.ones((2, 3), dtype=float)
157169

158170

159171
class FakeDLCLive:
@@ -163,14 +175,31 @@ def __init__(self, **opts):
163175
self.opts = opts
164176
self.init_called = False
165177
self.pose_calls = 0
178+
self.process_frame_calls = 0
179+
180+
self.processor = opts.get("processor")
181+
self.cfg = {"fake": True}
182+
self.runner = FakeRunner(self)
183+
self.pose = None
166184

167185
def init_inference(self, frame):
168186
self.init_called = True
169187

188+
def process_frame(self, frame):
189+
self.process_frame_calls += 1
190+
return frame
191+
170192
def get_pose(self, frame, frame_time=None):
193+
# Keep this for compatibility with older tests, but production code now
194+
# uses self.runner.get_pose(...).
171195
self.pose_calls += 1
172196
return np.ones((2, 3), dtype=float)
173197

198+
def _post_process_pose(self, processed_frame, frame_time=None):
199+
if self.pose is None:
200+
self.pose = self.runner.get_pose(processed_frame)
201+
return self.pose
202+
174203

175204
@pytest.fixture
176205
def fake_dlclive_factory():

0 commit comments

Comments
 (0)