cara/caimira/tests/test_dataclass_utils.py
2022-09-09 16:57:20 +02:00

39 lines
832 B
Python

import dataclasses
from caimira.dataclass_utils import nested_replace, walk_dataclass
@dataclasses.dataclass(frozen=True)
class Four:
four: float
@dataclasses.dataclass(frozen=True)
class Two:
three: int
four: Four
@dataclasses.dataclass(frozen=True)
class One:
one: int
two: Two
def test_nested_replace():
inst = One(1, two=Two(3, Four(4)))
new_inst = nested_replace(inst, {'two.four': Four(5)})
assert new_inst == One(1, two=Two(3, Four(5)))
def test_walk():
inst = One(1, two=Two(3, Four(4)))
expected = [
('inst.one', inst.one),
('inst.two', inst.two),
('inst.two.three', inst.two.three),
('inst.two.four', inst.two.four),
('inst.two.four.four', inst.two.four.four),
]
assert list(walk_dataclass(inst, name='inst')) == expected