From 977e87d7f5fa3766077b3d7a89c4702dc3d36b58 Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Sun, 22 Feb 2026 18:32:37 -0600 Subject: [PATCH] hook tracker --- tests/test_mapping.py | 44 ++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/tests/test_mapping.py b/tests/test_mapping.py index f1571f0..8a699bd 100644 --- a/tests/test_mapping.py +++ b/tests/test_mapping.py @@ -1,7 +1,25 @@ +from dataclasses import dataclass, field + from hooked_containers import events as e from hooked_containers.mapping import HookedMapping +@dataclass +class HookTracker: + added: list[e.AddItemEvent] = field(default_factory=list) + set: list[e.SetItemEvent] = field(default_factory=list) + removed: list[e.RemoveItemEvent] = field(default_factory=list) + + def hook(self, event: e.ChangeEvent): + match event: + case e.AddItemEvent(): + self.added.append(event.item) + case e.SetItemEvent(): + self.set.append(event.item) + case e.RemoveItemEvent(): + self.removed.append(event.item) + + class TestHookedMapping: class TestConstruction: def test_empty(self): @@ -25,34 +43,26 @@ class TestHookedMapping: class TestMappingOps: def test_setitem(self): - added = [] - - def hook(event: e.ChangeEvent): - assert isinstance(event, e.AddItemEvent) - added.append(event.item) - - m = HookedMapping({}, hook) + tracker = HookTracker() + m = HookedMapping({}, tracker.hook) m["a"] = 1 assert m._data == {"a": 1} - assert added == [1] + assert tracker.added == [1] def test_nested_setitem(self): - added = [] - - def hook(event: e.ChangeEvent): - assert isinstance(event, e.AddItemEvent) - added.append(event.item) - - m = HookedMapping({"a": {}}, hook) + tracker = HookTracker() + m = HookedMapping({"a": {}}, tracker.hook) m["a"]["x"] = 1 assert m._data == {"a": {"x": 1}} - assert added == [1] + assert tracker.added == [1] def test_getitem(self): m = HookedMapping({"a": 1}) assert m["a"] == 1 def test_delitem(self): - m = HookedMapping({"a": 1}) + tracker = HookTracker() + m = HookedMapping({"a": 1}, tracker.hook) del m["a"] assert not m["a"] + assert tracker.removed == [1]