Coverage for Users / vladimirpavlov / PycharmProjects / parameterizable / tests / test_update_jsparams.py: 100%
33 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 dumpjs, loadjs, update_jsparams
6class ParamObj:
7 def __init__(self, x=0, y="", z=None, cfg=None):
8 self.x = x
9 self.y = y
10 self.z = z
11 self.cfg = cfg
13 def get_params(self):
14 # Only parameters returned here are serialized into the JSON under PARAMS->DICT
15 return {"x": self.x, "y": self.y, "z": self.z, "cfg": self.cfg}
18def test_update_jsparams_replaces_existing_param():
19 o = ParamObj(x=1, y="a")
20 js = dumpjs(o)
22 js_updated = update_jsparams(js, x=5)
23 o2 = loadjs(js_updated)
25 assert isinstance(o2, ParamObj)
26 assert o2.x == 5 # replaced
27 assert o2.y == "a" # unchanged
28 assert o2.z is None
31def test_update_jsparams_adds_new_param():
32 # Start with object missing z (None); then add z via update
33 o = ParamObj(x=2, y="b")
34 js = dumpjs(o)
36 js_updated = update_jsparams(js, z=99)
37 o2 = loadjs(js_updated)
39 assert o2.z == 99
40 assert o2.x == 2 and o2.y == "b"
43def test_update_jsparams_nested_values_roundtrip():
44 o = ParamObj(x=3, y="c")
45 js = dumpjs(o)
47 # nested list is supported directly by the loader; nested dicts would require internal DICT markers
48 nested_list = [1, 2, [3, 4], "ok"]
49 js_updated = update_jsparams(js, cfg=nested_list)
50 o2 = loadjs(js_updated)
52 assert o2.cfg == nested_list