Skip to content

Commit 420aedd

Browse files
committed
Expand settings store unit test coverage
Add broad tests for `DLCLiveGUISettingsStore` behavior, including inference camera ID, processor folder/key persistence, and processor control toggles. The in-memory `QSettings` test double now supports `remove` and `sync`, and new parametrized cases verify robust boolean parsing for processor control plus recording `use_timestamp` and `fast_encoding` settings.
1 parent a757726 commit 420aedd

1 file changed

Lines changed: 165 additions & 1 deletion

File tree

‎tests/utils/test_settings_store.py‎

Lines changed: 165 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,24 @@
1111

1212

1313
class InMemoryQSettings:
14-
"""Stand-in for QSettings"""
14+
"""Small stand-in for QSettings."""
1515

1616
def __init__(self):
1717
self._d = {}
18+
self.synced = False
1819

1920
def value(self, key: str, default=None):
2021
return self._d.get(key, default)
2122

2223
def setValue(self, key: str, value):
2324
self._d[key] = value
2425

26+
def remove(self, key: str):
27+
self._d.pop(key, None)
28+
29+
def sync(self):
30+
self.synced = True
31+
2532

2633
# -----------------------------
2734
# QtSettingsStore
@@ -348,3 +355,160 @@ def test_model_path_store_suggest_selected_file_returns_none_when_missing(tmp_pa
348355
settings.setValue("dlc/last_model_path", str(missing))
349356

350357
assert mps.suggest_selected_file() is None
358+
359+
360+
# -----------------------------
361+
# Inference camera ID
362+
# -----------------------------
363+
def test_settings_store_inference_camera_id_roundtrip():
364+
s = InMemoryQSettings()
365+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
366+
367+
assert settstore.get_inference_camera_id() is None
368+
369+
settstore.set_inference_camera_id("opencv:0")
370+
assert settstore.get_inference_camera_id() == "opencv:0"
371+
372+
settstore.set_inference_camera_id(None)
373+
assert settstore.get_inference_camera_id() is None
374+
375+
settstore.set_inference_camera_id("")
376+
assert settstore.get_inference_camera_id() is None
377+
378+
379+
# -----------------------------
380+
# Processor settings
381+
# -----------------------------
382+
def test_settings_store_processor_folder_roundtrip_when_valid(tmp_path: Path):
383+
s = InMemoryQSettings()
384+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
385+
386+
folder = tmp_path / "processors"
387+
folder.mkdir()
388+
389+
settstore.set_processor_folder(str(folder))
390+
391+
assert settstore.get_processor_folder(default="fallback") == str(folder.resolve())
392+
393+
394+
def test_settings_store_processor_folder_ignores_invalid_value(tmp_path: Path):
395+
s = InMemoryQSettings()
396+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
397+
398+
missing = tmp_path / "missing"
399+
400+
settstore.set_processor_folder(str(missing))
401+
402+
assert settstore.get_processor_folder(default="fallback") == "fallback"
403+
404+
405+
def test_settings_store_get_processor_folder_returns_default_if_stored_missing(tmp_path: Path):
406+
s = InMemoryQSettings()
407+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
408+
409+
missing = tmp_path / "missing"
410+
s.setValue("dlc/processor_folder", str(missing))
411+
412+
assert settstore.get_processor_folder(default="fallback") == "fallback"
413+
414+
415+
def test_settings_store_processor_key_roundtrip():
416+
s = InMemoryQSettings()
417+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
418+
419+
assert settstore.get_processor_key() is None
420+
421+
settstore.set_processor_key("my_processor")
422+
assert settstore.get_processor_key() == "my_processor"
423+
424+
settstore.set_processor_key(None)
425+
assert settstore.get_processor_key() is None
426+
427+
settstore.set_processor_key("")
428+
assert settstore.get_processor_key() is None
429+
430+
431+
@pytest.mark.parametrize(
432+
("stored", "expected"),
433+
[
434+
(True, True),
435+
(False, False),
436+
("true", True),
437+
("false", False),
438+
("1", True),
439+
("0", False),
440+
("yes", True),
441+
("no", False),
442+
("on", True),
443+
("off", False),
444+
(1, True),
445+
(0, False),
446+
],
447+
)
448+
def test_settings_store_processor_control_bool_parsing(stored, expected):
449+
s = InMemoryQSettings()
450+
s.setValue("dlc/processor_control_enabled", stored)
451+
452+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
453+
454+
assert settstore.get_processor_control_enabled(default=not expected) is expected
455+
456+
457+
def test_settings_store_processor_control_enabled_roundtrip():
458+
s = InMemoryQSettings()
459+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
460+
461+
assert settstore.get_processor_control_enabled(default=False) is False
462+
463+
settstore.set_processor_control_enabled(True)
464+
assert settstore.get_processor_control_enabled(default=False) is True
465+
466+
settstore.set_processor_control_enabled(False)
467+
assert settstore.get_processor_control_enabled(default=True) is False
468+
469+
470+
# -----------------------------
471+
# Recording
472+
# -----------------------------
473+
@pytest.mark.parametrize(
474+
("stored", "expected"),
475+
[
476+
("true", True),
477+
("false", False),
478+
("1", True),
479+
("0", False),
480+
("yes", True),
481+
("no", False),
482+
("on", True),
483+
("off", False),
484+
],
485+
)
486+
def test_settings_store_use_timestamp_bool_variants(stored, expected):
487+
s = InMemoryQSettings()
488+
s.setValue("recording/use_timestamp", stored)
489+
490+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
491+
492+
assert settstore.get_use_timestamp(default=not expected) is expected
493+
494+
495+
@pytest.mark.parametrize(
496+
("stored", "expected"),
497+
[
498+
("true", True),
499+
("false", False),
500+
("1", True),
501+
("0", False),
502+
("yes", True),
503+
("no", False),
504+
("on", True),
505+
("off", False),
506+
],
507+
)
508+
def test_settings_store_fast_encoding_bool_variants(stored, expected):
509+
s = InMemoryQSettings()
510+
s.setValue("recording/fast_encoding", stored)
511+
512+
settstore = store.DLCLiveGUISettingsStore(qsettings=s)
513+
514+
assert settstore.get_fast_encoding(default=not expected) is expected

0 commit comments

Comments
 (0)