Coverage for Users / vladimirpavlov / PycharmProjects / parameterizable / tests / test_json_processor_remaining_branches.py: 88%
50 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-01 16:37 -0600
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-01 16:37 -0600
1import pytest
3from mixinforge.json_processor import _to_serializable_dict, _recreate_object, _Markers
6class Plain:
7 def __init__(self):
8 self.a = 1
9 self.b = "x"
12class PlainMaskGetstate:
13 def __init__(self):
14 self.a = 2
15 self.b = "y"
17 def __getattribute__(self, name):
18 if name == "__getstate__":
19 raise AttributeError
20 return object.__getattribute__(self, name)
23def test_plain_class_uses_dict_state_branch():
24 p = PlainMaskGetstate()
25 ser = _to_serializable_dict(p)
26 # Should be encoded via STATE of its __dict__
27 assert _Markers.STATE in ser
28 back = _recreate_object(ser)
29 assert isinstance(back, PlainMaskGetstate)
30 assert back.a == 2 and back.b == "y"
33class SlotlessMeta(type):
34 def __getattribute__(cls, name):
35 if name == "__slots__":
36 raise AttributeError
37 return super().__getattribute__(name)
40class Trick(metaclass=SlotlessMeta):
41 # Do not define __slots__; instances normally have __dict__, but we mask it
42 def __getattribute__(self, name):
43 if name == "__dict__":
44 raise AttributeError
45 return object.__getattribute__(self, name)
48def test_unsupported_early_types_raise():
49 # Functions are explicitly unsupported
50 with pytest.raises(TypeError):
51 _to_serializable_dict(lambda x: x)
54class HideSlotsMeta(type):
55 def __getattribute__(cls, name):
56 if name == "__slots__":
57 raise AttributeError
58 return super().__getattribute__(name)
61class ElseTarget(metaclass=HideSlotsMeta):
62 __slots__ = ("a",)
64 def __init__(self):
65 self.a = 1
67 def __getattribute__(self, name):
68 if name in ("__dict__", "__getstate__"):
69 raise AttributeError
70 return object.__getattribute__(self, name)
73def test_final_else_branch_raises_type_error():
74 with pytest.raises(TypeError):
75 _to_serializable_dict(ElseTarget())