This commit is contained in:
@@ -1,15 +1,13 @@
|
||||
import pytest
|
||||
from slic.utils.snapshot import snapshot
|
||||
from slic.utils import registry
|
||||
from slic.core.adjustable import Adjustable
|
||||
from unittest.mock import patch
|
||||
from slic.utils.registry import instances
|
||||
from slic.utils.snapshot import snapshot
|
||||
from slic.core.adjustable import Adjustable
|
||||
|
||||
|
||||
# --- Fake Adjustable class for testing ---
|
||||
class FakeAdjustable(Adjustable):
|
||||
def __init__(self, ID, name=None, internal=False):
|
||||
super().__init__(ID=ID, name=name or ID, internal=internal)
|
||||
self._value = 0 # dummy fixed value for all instances
|
||||
self._value = 0
|
||||
|
||||
def get_current_value(self):
|
||||
return self._value
|
||||
@@ -26,58 +24,52 @@ class FakeAdjustable(Adjustable):
|
||||
def set_target_value(self, value, *args, **kwargs):
|
||||
return value
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def clean_registry():
|
||||
instances.cache_clear()
|
||||
|
||||
def test_snapshot_excludes_internal_by_default():
|
||||
|
||||
visible = FakeAdjustable("visible", internal=False)
|
||||
hidden = FakeAdjustable("internal", internal=True)
|
||||
visible = FakeAdjustable("vis_id", "visible", False)
|
||||
hidden = FakeAdjustable("hid_id", "internal", True)
|
||||
|
||||
with patch('slic.utils.registry.instances', return_value=[visible, hidden]):
|
||||
result = snapshot()
|
||||
assert len(result) == 1
|
||||
assert visible in result
|
||||
assert hidden not in result
|
||||
|
||||
|
||||
def test_snapshot_include_internal_flag():
|
||||
visible = FakeAdjustable("visible", internal=False)
|
||||
hidden = FakeAdjustable("internal", internal=True)
|
||||
visible = FakeAdjustable("vis_id", "visible", False)
|
||||
hidden = FakeAdjustable("hid_id", "internal", True)
|
||||
|
||||
with patch('slic.utils.registry.instances', return_value=[visible, hidden]):
|
||||
result = snapshot(include_internal=True)
|
||||
assert len(result) == 2
|
||||
assert visible in result
|
||||
assert hidden in result
|
||||
assert len(result) == 2
|
||||
|
||||
|
||||
def test_snapshot_empty_result():
|
||||
with patch('slic.utils.registry.instances', return_value=[]):
|
||||
result = snapshot()
|
||||
assert isinstance(result, list)
|
||||
assert result == []
|
||||
|
||||
# Sort key tests
|
||||
|
||||
@pytest.mark.parametrize("sort_key, expected_order", [
|
||||
(repr, ["Alpha", "Beta", "Charlie"]), # Modifié pour utiliser les vrais noms
|
||||
@pytest.mark.parametrize("sort_key,expected", [
|
||||
(repr, ["Alpha", "Beta", "Charlie"]),
|
||||
(str, ["Alpha", "Beta", "Charlie"]),
|
||||
(lambda a: a.ID, ["id1", "id2", "id3"]),
|
||||
(lambda a: a.name.lower(), ["Alpha", "Beta", "Charlie"]),
|
||||
(lambda a: a.name.lower(), ["alpha", "beta", "charlie"]),
|
||||
])
|
||||
def test_snapshot_sort_keys(sort_key, expected_order):
|
||||
a = FakeAdjustable("id3", name="Alpha")
|
||||
b = FakeAdjustable("id1", name="Beta")
|
||||
c = FakeAdjustable("id2", name="Charlie")
|
||||
|
||||
unordered = [c, a, b]
|
||||
|
||||
with patch('slic.utils.registry.instances', return_value=unordered):
|
||||
def test_snapshot_sort_keys(sort_key, expected):
|
||||
a = FakeAdjustable("id3", "Alpha")
|
||||
b = FakeAdjustable("id1", "Beta")
|
||||
c = FakeAdjustable("id2", "Charlie")
|
||||
|
||||
with patch('slic.utils.registry.instances', return_value=[c, a, b]):
|
||||
result = snapshot(sort_key=sort_key)
|
||||
|
||||
if sort_key == repr:
|
||||
assert [obj.name for obj in result] == expected_order
|
||||
elif sort_key == str:
|
||||
assert [obj.name for obj in result] == expected_order
|
||||
elif 'ID' in sort_key.__code__.co_varnames:
|
||||
assert [obj.ID for obj in result] == expected_order
|
||||
if callable(sort_key) and 'ID' in sort_key.__code__.co_varnames:
|
||||
assert [x.ID for x in result] == expected
|
||||
elif callable(sort_key):
|
||||
assert [x.name.lower() for x in result] == expected
|
||||
else:
|
||||
assert [obj.name.lower() for obj in result] == [n.lower() for n in expected_order]
|
||||
assert [x.name for x in result] == expected
|
||||
Reference in New Issue
Block a user