diff --git a/src/textual/_two_way_mapping.py b/src/textual/_two_way_mapping.py index e2592a45e..f3f04f369 100644 --- a/src/textual/_two_way_mapping.py +++ b/src/textual/_two_way_mapping.py @@ -14,7 +14,7 @@ class TwoWayMapping(Generic[Key, Value]): def __init__(self, initial: dict[Key, Value]) -> None: self._forward: dict[Key, Value] = initial - self._reverse: dict[Value, Key] = {value: key for key, value in initial} + self._reverse: dict[Value, Key] = {value: key for key, value in initial.items()} def __setitem__(self, key: Key, value: Value) -> None: self._forward.__setitem__(key, value) diff --git a/tests/test_two_way_mapping.py b/tests/test_two_way_mapping.py new file mode 100644 index 000000000..9a88bdeec --- /dev/null +++ b/tests/test_two_way_mapping.py @@ -0,0 +1,56 @@ +import pytest + +from textual._two_way_mapping import TwoWayMapping + + +@pytest.fixture +def map(): + return TwoWayMapping( + { + 1: 10, + 2: 20, + 3: 30, + } + ) + + +def test_get(map): + assert map.get(1) == 10 + + +def test_get_default_none(map): + assert map.get(9999) is None + + +def test_get_default_supplied(map): + assert map.get(9999, -123) == -123 + + +def test_get_key(map): + assert map.get_key(30) == 3 + + +def test_get_key_default_none(map): + assert map.get_key(9999) is None + + +def test_get_key_default_supplied(map): + assert map.get_key(9999, -123) == -123 + + +def test_set_item(map): + map[40] = 400 + assert map.get(40) == 400 + assert map.get_key(400) == 40 + + +def test_len(map): + assert len(map) == 3 + + +def test_delitem(map): + assert map.get(3) == 30 + assert map.get_key(30) == 3 + del map[3] + assert map.get(3) is None + assert map.get_key(30) is None