Skip to content

Commit ee85179

Browse files
committed
Refactor Basler test fixture injection
Rename `patch_basler_sdk` to `patched_basler_sdk` and have it return the patched Basler backend module directly. Tests now consume that module from the fixture instead of re-importing it, and the backend patcher mapping was updated accordingly. The fixture also patches `genicam` with `raising=False` for more robust monkeypatching.
1 parent e3b907c commit ee85179

2 files changed

Lines changed: 51 additions & 51 deletions

File tree

‎tests/cameras/backends/conftest.py‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -669,15 +669,15 @@ def fake_pylon_module():
669669

670670

671671
@pytest.fixture()
672-
def patch_basler_sdk(monkeypatch, fake_pylon_module):
672+
def patched_basler_sdk(monkeypatch, fake_pylon_module):
673673
"""Patch Basler backend to use FakePylon."""
674674
import dlclivegui.cameras.backends.basler_backend as bb
675675

676676
fake_genicam = SimpleNamespace(TimeoutException=FakePylonTimeoutException)
677677

678678
monkeypatch.setattr(bb, "pylon", fake_pylon_module, raising=False)
679-
monkeypatch.setattr(bb, "genicam", fake_genicam)
680-
return fake_pylon_module
679+
monkeypatch.setattr(bb, "genicam", fake_genicam, raising=False)
680+
return bb
681681

682682

683683
@pytest.fixture()
@@ -1304,7 +1304,7 @@ def _make(
13041304
# Generic patcher mapping fixture for test_generic_contracts.py
13051305
# -----------------------------------------------------------------------------
13061306
@pytest.fixture()
1307-
def backend_sdk_patchers(patch_aravis_sdk, patch_basler_sdk, patch_gentl_sdk):
1307+
def backend_sdk_patchers(patch_aravis_sdk, patched_basler_sdk, patch_gentl_sdk):
13081308
"""
13091309
Mapping from backend name -> patcher callable (best-effort SDK stubs).
13101310
@@ -1315,7 +1315,7 @@ def backend_sdk_patchers(patch_aravis_sdk, patch_basler_sdk, patch_gentl_sdk):
13151315
return {
13161316
# Calling it is harmless; patching already applied by fixture injection.
13171317
"aravis": (lambda: patch_aravis_sdk),
1318-
"basler": (lambda: patch_basler_sdk),
1318+
"basler": (lambda: patched_basler_sdk),
13191319
"gentl": (lambda: patch_gentl_sdk),
13201320
# No patch needed: OpenCV is assumed present
13211321
# "opencv": None,

‎tests/cameras/backends/test_basler_backend.py‎

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
# ---------------------------------------------------------------------
1212

1313

14-
def test_basler_open_starts_grabbing_and_read_returns_frame(patch_basler_sdk, basler_settings_factory):
15-
import dlclivegui.cameras.backends.basler_backend as bb
14+
def test_basler_open_starts_grabbing_and_read_returns_frame(patched_basler_sdk, basler_settings_factory):
15+
bb = patched_basler_sdk
1616

1717
settings = basler_settings_factory()
1818
be = bb.BaslerCameraBackend(settings)
@@ -36,10 +36,10 @@ def test_basler_open_starts_grabbing_and_read_returns_frame(patch_basler_sdk, ba
3636

3737

3838
def test_basler_fast_start_does_not_start_grabbing_and_read_raises(
39-
patch_basler_sdk,
39+
patched_basler_sdk,
4040
basler_settings_factory,
4141
):
42-
import dlclivegui.cameras.backends.basler_backend as bb
42+
bb = patched_basler_sdk
4343

4444
settings = basler_settings_factory(properties={"basler": {"fast_start": True}})
4545
be = bb.BaslerCameraBackend(settings)
@@ -57,17 +57,17 @@ def test_basler_fast_start_does_not_start_grabbing_and_read_raises(
5757
be.close()
5858

5959

60-
def test_basler_close_is_idempotent(patch_basler_sdk, basler_settings_factory):
61-
import dlclivegui.cameras.backends.basler_backend as bb
60+
def test_basler_close_is_idempotent(patched_basler_sdk, basler_settings_factory):
61+
bb = patched_basler_sdk
6262

6363
be = bb.BaslerCameraBackend(basler_settings_factory())
6464
be.open()
6565
be.close()
6666
be.close()
6767

6868

69-
def test_basler_stop_before_open_and_after_close_is_safe(patch_basler_sdk, basler_settings_factory):
70-
import dlclivegui.cameras.backends.basler_backend as bb
69+
def test_basler_stop_before_open_and_after_close_is_safe(patched_basler_sdk, basler_settings_factory):
70+
bb = patched_basler_sdk
7171

7272
be = bb.BaslerCameraBackend(basler_settings_factory())
7373

@@ -83,8 +83,8 @@ def test_basler_stop_before_open_and_after_close_is_safe(patch_basler_sdk, basle
8383
be.stop()
8484

8585

86-
def test_basler_read_before_open_raises_runtimeerror(patch_basler_sdk, basler_settings_factory):
87-
import dlclivegui.cameras.backends.basler_backend as bb
86+
def test_basler_read_before_open_raises_runtimeerror(patched_basler_sdk, basler_settings_factory):
87+
bb = patched_basler_sdk
8888

8989
be = bb.BaslerCameraBackend(basler_settings_factory())
9090

@@ -98,9 +98,9 @@ def test_basler_read_before_open_raises_runtimeerror(patch_basler_sdk, basler_se
9898

9999

100100
def test_basler_discover_devices_returns_serial_identity_and_label(
101-
patch_basler_sdk,
101+
patched_basler_sdk,
102102
):
103-
import dlclivegui.cameras.backends.basler_backend as bb
103+
bb = patched_basler_sdk
104104

105105
cams = bb.BaslerCameraBackend.discover_devices(max_devices=10)
106106

@@ -111,19 +111,19 @@ def test_basler_discover_devices_returns_serial_identity_and_label(
111111
assert cams[0].path
112112

113113

114-
def test_basler_quick_ping_true_for_existing_false_for_missing(patch_basler_sdk):
115-
import dlclivegui.cameras.backends.basler_backend as bb
114+
def test_basler_quick_ping_true_for_existing_false_for_missing(patched_basler_sdk):
115+
bb = patched_basler_sdk
116116

117117
assert bb.BaslerCameraBackend.quick_ping(0) is True
118118
assert bb.BaslerCameraBackend.quick_ping(1) is True
119119
assert bb.BaslerCameraBackend.quick_ping(2) is False
120120

121121

122122
def test_basler_rebind_settings_uses_serial_device_id(
123-
patch_basler_sdk,
123+
patched_basler_sdk,
124124
basler_settings_factory,
125125
):
126-
import dlclivegui.cameras.backends.basler_backend as bb
126+
bb = patched_basler_sdk
127127

128128
settings = basler_settings_factory(
129129
index=0,
@@ -139,10 +139,10 @@ def test_basler_rebind_settings_uses_serial_device_id(
139139

140140

141141
def test_basler_open_selects_device_id_and_persists_identity(
142-
patch_basler_sdk,
142+
patched_basler_sdk,
143143
basler_settings_factory,
144144
):
145-
import dlclivegui.cameras.backends.basler_backend as bb
145+
bb = patched_basler_sdk
146146

147147
settings = basler_settings_factory(
148148
index=0,
@@ -159,8 +159,8 @@ def test_basler_open_selects_device_id_and_persists_identity(
159159
be.close()
160160

161161

162-
def test_basler_open_index_out_of_range_raises(patch_basler_sdk, basler_settings_factory):
163-
import dlclivegui.cameras.backends.basler_backend as bb
162+
def test_basler_open_index_out_of_range_raises(patched_basler_sdk, basler_settings_factory):
163+
bb = patched_basler_sdk
164164

165165
settings = basler_settings_factory(index=99)
166166
be = bb.BaslerCameraBackend(settings)
@@ -175,10 +175,10 @@ def test_basler_open_index_out_of_range_raises(patch_basler_sdk, basler_settings
175175

176176

177177
def test_basler_resolution_auto_does_not_modify_dimensions(
178-
patch_basler_sdk,
178+
patched_basler_sdk,
179179
basler_settings_factory,
180180
):
181-
import dlclivegui.cameras.backends.basler_backend as bb
181+
bb = patched_basler_sdk
182182

183183
settings = basler_settings_factory(width=0, height=0)
184184
be = bb.BaslerCameraBackend(settings)
@@ -193,10 +193,10 @@ def test_basler_resolution_auto_does_not_modify_dimensions(
193193

194194

195195
def test_basler_resolution_request_snaps_to_increment(
196-
patch_basler_sdk,
196+
patched_basler_sdk,
197197
basler_settings_factory,
198198
):
199-
import dlclivegui.cameras.backends.basler_backend as bb
199+
bb = patched_basler_sdk
200200

201201
settings = basler_settings_factory(width=641, height=481)
202202
be = bb.BaslerCameraBackend(settings)
@@ -211,10 +211,10 @@ def test_basler_resolution_request_snaps_to_increment(
211211

212212

213213
def test_basler_exposure_gain_fps_are_applied_when_nonzero(
214-
patch_basler_sdk,
214+
patched_basler_sdk,
215215
basler_settings_factory,
216216
):
217-
import dlclivegui.cameras.backends.basler_backend as bb
217+
bb = patched_basler_sdk
218218

219219
settings = basler_settings_factory(exposure=20000, gain=2.5, fps=50.0)
220220
be = bb.BaslerCameraBackend(settings)
@@ -237,9 +237,9 @@ def test_basler_exposure_gain_fps_are_applied_when_nonzero(
237237

238238

239239
def test_basler_static_capabilities_advertises_hardware_trigger_best_effort_and_mono(
240-
patch_basler_sdk,
240+
patched_basler_sdk,
241241
):
242-
import dlclivegui.cameras.backends.basler_backend as bb
242+
bb = patched_basler_sdk
243243
from dlclivegui.cameras.base import SupportLevel
244244

245245
caps = bb.BaslerCameraBackend.static_capabilities()
@@ -248,10 +248,10 @@ def test_basler_static_capabilities_advertises_hardware_trigger_best_effort_and_
248248

249249

250250
def test_basler_default_trigger_is_off_and_free_runs(
251-
patch_basler_sdk,
251+
patched_basler_sdk,
252252
basler_settings_factory,
253253
):
254-
import dlclivegui.cameras.backends.basler_backend as bb
254+
bb = patched_basler_sdk
255255

256256
settings = basler_settings_factory()
257257
be = bb.BaslerCameraBackend(settings)
@@ -269,10 +269,10 @@ def test_basler_default_trigger_is_off_and_free_runs(
269269

270270

271271
def test_basler_follower_auto_selects_line1_and_times_out_waiting_for_trigger(
272-
patch_basler_sdk,
272+
patched_basler_sdk,
273273
basler_settings_factory,
274274
):
275-
import dlclivegui.cameras.backends.basler_backend as bb
275+
bb = patched_basler_sdk
276276

277277
settings = basler_settings_factory(
278278
properties={
@@ -312,10 +312,10 @@ def test_basler_follower_auto_selects_line1_and_times_out_waiting_for_trigger(
312312

313313

314314
def test_basler_follower_strict_invalid_source_raises(
315-
patch_basler_sdk,
315+
patched_basler_sdk,
316316
basler_settings_factory,
317317
):
318-
import dlclivegui.cameras.backends.basler_backend as bb
318+
bb = patched_basler_sdk
319319

320320
settings = basler_settings_factory(
321321
properties={
@@ -338,10 +338,10 @@ def test_basler_follower_strict_invalid_source_raises(
338338

339339

340340
def test_basler_follower_non_strict_invalid_source_disables_trigger(
341-
patch_basler_sdk,
341+
patched_basler_sdk,
342342
basler_settings_factory,
343343
):
344-
import dlclivegui.cameras.backends.basler_backend as bb
344+
bb = patched_basler_sdk
345345

346346
settings = basler_settings_factory(
347347
properties={
@@ -369,10 +369,10 @@ def test_basler_follower_non_strict_invalid_source_disables_trigger(
369369

370370

371371
def test_basler_master_configures_generic_line_output_and_restores_on_close(
372-
patch_basler_sdk,
372+
patched_basler_sdk,
373373
basler_settings_factory,
374374
):
375-
import dlclivegui.cameras.backends.basler_backend as bb
375+
bb = patched_basler_sdk
376376

377377
settings = basler_settings_factory(
378378
properties={
@@ -405,10 +405,10 @@ def test_basler_master_configures_generic_line_output_and_restores_on_close(
405405

406406
@pytest.mark.xfail(reason="Software trigger support is not implemented yet.")
407407
def test_basler_software_trigger_requires_trigger_once_before_read(
408-
patch_basler_sdk,
408+
patched_basler_sdk,
409409
basler_settings_factory,
410410
):
411-
import dlclivegui.cameras.backends.basler_backend as bb
411+
bb = patched_basler_sdk
412412

413413
settings = basler_settings_factory(
414414
properties={
@@ -443,10 +443,10 @@ def test_basler_software_trigger_requires_trigger_once_before_read(
443443

444444

445445
def test_basler_close_turns_input_trigger_off(
446-
patch_basler_sdk,
446+
patched_basler_sdk,
447447
basler_settings_factory,
448448
):
449-
import dlclivegui.cameras.backends.basler_backend as bb
449+
bb = patched_basler_sdk
450450

451451
settings = basler_settings_factory(
452452
properties={
@@ -473,10 +473,10 @@ def test_basler_close_turns_input_trigger_off(
473473

474474
def test_basler_hardware_trigger_maps_pylon_timeout_to_timeout_error(
475475
monkeypatch,
476-
patch_basler_sdk,
476+
patched_basler_sdk,
477477
basler_settings_factory,
478478
):
479-
import dlclivegui.cameras.backends.basler_backend as bb
479+
bb = patched_basler_sdk
480480

481481
class FakePylonTimeout(Exception):
482482
pass
@@ -518,10 +518,10 @@ class TestBaslerFrameTimestamps:
518518
@pytest.mark.unit
519519
def test_read_returns_captured_frame_with_hardware_timestamp_metadata(
520520
self,
521-
patch_basler_sdk,
521+
patched_basler_sdk,
522522
basler_settings_factory,
523523
):
524-
import dlclivegui.cameras.backends.basler_backend as bb
524+
bb = patched_basler_sdk
525525

526526
settings = basler_settings_factory()
527527
be = bb.BaslerCameraBackend(settings)

0 commit comments

Comments
 (0)