Compare commits
2 Commits
0e58dc7a86
...
977e87d7f5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
977e87d7f5 | ||
|
|
406024d990 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -8,3 +8,6 @@ wheels/
|
|||||||
|
|
||||||
# Virtual environments
|
# Virtual environments
|
||||||
.venv
|
.venv
|
||||||
|
|
||||||
|
|
||||||
|
*.ipynb
|
||||||
@@ -1,6 +1,25 @@
|
|||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
from hooked_containers import events as e
|
||||||
from hooked_containers.mapping import HookedMapping
|
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 TestHookedMapping:
|
||||||
class TestConstruction:
|
class TestConstruction:
|
||||||
def test_empty(self):
|
def test_empty(self):
|
||||||
@@ -24,24 +43,26 @@ class TestHookedMapping:
|
|||||||
|
|
||||||
class TestMappingOps:
|
class TestMappingOps:
|
||||||
def test_setitem(self):
|
def test_setitem(self):
|
||||||
added = []
|
tracker = HookTracker()
|
||||||
m = HookedMapping({}, lambda e: added.append(e.item))
|
m = HookedMapping({}, tracker.hook)
|
||||||
m["a"] = 1
|
m["a"] = 1
|
||||||
assert m._data == {"a": 1}
|
assert m._data == {"a": 1}
|
||||||
assert added == [1]
|
assert tracker.added == [1]
|
||||||
|
|
||||||
def test_nested_setitem(self):
|
def test_nested_setitem(self):
|
||||||
added = []
|
tracker = HookTracker()
|
||||||
m = HookedMapping({"a": {}}, lambda e: added.append(e.item))
|
m = HookedMapping({"a": {}}, tracker.hook)
|
||||||
m["a"]["x"] = 1
|
m["a"]["x"] = 1
|
||||||
assert m._data == {"a": {"x": 1}}
|
assert m._data == {"a": {"x": 1}}
|
||||||
assert added == [1]
|
assert tracker.added == [1]
|
||||||
|
|
||||||
def test_getitem(self):
|
def test_getitem(self):
|
||||||
m = HookedMapping({"a": 1})
|
m = HookedMapping({"a": 1})
|
||||||
assert m["a"] == 1
|
assert m["a"] == 1
|
||||||
|
|
||||||
def test_delitem(self):
|
def test_delitem(self):
|
||||||
m = HookedMapping({"a": 1})
|
tracker = HookTracker()
|
||||||
|
m = HookedMapping({"a": 1}, tracker.hook)
|
||||||
del m["a"]
|
del m["a"]
|
||||||
assert not m["a"]
|
assert not m["a"]
|
||||||
|
assert tracker.removed == [1]
|
||||||
|
|||||||
Reference in New Issue
Block a user