Files
HeurAMS/tests/test_epath.py
2026-05-07 19:48:07 +08:00

71 lines
2.0 KiB
Python

"""Tests for heurams.services.epath"""
from heurams.services.epath import epath
class TestEpathRead:
def test_empty_path_returns_self(self):
d = {"a": 1}
assert epath(d, "") is d
def test_simple_key(self):
d = {"a": 1}
assert epath(d, "a") == 1
def test_nested_key(self):
d = {"a": {"b": {"c": 42}}}
assert epath(d, "a.b.c") == 42
def test_missing_key_returns_default(self):
d = {"a": 1}
assert epath(d, "b", default=None) is None
def test_missing_key_no_default(self):
d = {"a": 1}
assert epath(d, "b") is None
def test_list_index_access(self):
d = {"items": [10, 20, 30]}
assert epath(d, "items.[1]") == 20
def test_leading_dot_stripped(self):
d = {"a": 1}
assert epath(d, ".a") == 1
def test_trailing_dot_stripped(self):
d = {"a": 1}
assert epath(d, "a.") == 1
class TestEpathParents:
def test_parents_creates_missing_dict_keys(self):
d = {}
result = epath(d, "a.b.c", parents=True, default=None)
# parents=True creates all intermediate keys including the leaf
assert result == {}
assert d == {"a": {"b": {"c": {}}}}
class TestEpathModify:
def test_modify_dict_key(self):
d = {"a": 1}
result = epath(d, "a", enable_modify=True, new_value=99)
assert result == 99
assert d["a"] == 99
def test_modify_nested_key(self):
d = {"a": {"b": 2}}
epath(d, "a.b", enable_modify=True, new_value=42)
assert d["a"]["b"] == 42
def test_modify_list_index(self):
d = {"items": [10, 20]}
epath(d, "items.[0]", enable_modify=True, new_value=99)
assert d["items"][0] == 99
def test_modify_list_index_with_parents(self):
d = {"items": []}
result = epath(d, "items.[3]", enable_modify=True, new_value=42, parents=True)
assert result == 42
assert d["items"] == [None, None, None, 42]