from hooked_containers.mapping import HookedMapping class TestHookedMapping: class TestConstruction: def test_empty(self): m = HookedMapping({}) assert m._data == {} assert dict(m) == {} def test_with_existing(self): existing = {"a": 1, "b": 2} og_id = id(existing) m = HookedMapping(existing) assert id(m._data) == og_id assert dict(m) == existing def test_nesting(self): existing = {"a": {"x": 1}, "b": {"y": 2}} m = HookedMapping(existing) assert dict(m) == existing assert dict(m["a"]) == {"x": 1} assert dict(m["b"]) == {"y": 2} class TestMappingOps: def test_setitem(self): added = [] m = HookedMapping({}, lambda e: added.append(e.item)) m["a"] = 1 assert m._data == {"a": 1} assert added == [1] def test_nested_setitem(self): added = [] m = HookedMapping({"a": {}}, lambda e: added.append(e.item)) m["a"]["x"] = 1 assert m._data == {"a": {"x": 1}} assert added == [1] def test_getitem(self): m = HookedMapping({"a": 1}) assert m["a"] == 1 def test_delitem(self): m = HookedMapping({"a": 1}) del m["a"] assert not m["a"]