mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 16:34:47 +01:00
158 lines
3.9 KiB
Python
158 lines
3.9 KiB
Python
from xonsh.lib.collections import ChainDB
|
|
|
|
|
|
def test_dddi():
|
|
a = {"a": {"a": {"a": 1}}}
|
|
z = ChainDB(a)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["a"], ChainDB)
|
|
assert isinstance(z["a"]["a"]["a"], int)
|
|
assert z["a"]["a"]["a"] + 1 == 2
|
|
|
|
|
|
def test_second_mapping():
|
|
m1 = {"a": {"m": {"x": 0}}}
|
|
m2 = {"a": {"m": {"y": 1}}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"].maps, list)
|
|
assert z["a"]["m"]["y"] == 1
|
|
|
|
|
|
def test_double_mapping():
|
|
m1 = {"a": {"m": {"y": 0}}}
|
|
m2 = {"a": {"m": {"y": 1}}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"].maps, list)
|
|
assert isinstance(z["a"]["m"]["y"], int)
|
|
assert z["a"]["m"]["y"] == 1
|
|
|
|
|
|
def test_list_mapping():
|
|
m1 = {"a": {"m": "x"}}
|
|
m2 = {"a": {"m": "y"}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], str)
|
|
assert z["a"]["m"] == "y"
|
|
|
|
|
|
def test_mixed_mapping():
|
|
m1 = {"a": {"m": {"y": 1}}}
|
|
m2 = {"a": {"m": 1}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], int)
|
|
assert z["a"]["m"] == 1
|
|
|
|
|
|
def test_exactness():
|
|
d = {"y": 1}
|
|
m1 = {"a": {"m": d}}
|
|
z = ChainDB(m1)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], ChainDB)
|
|
assert isinstance(z["a"]["m"].maps[0], dict)
|
|
assert d is z["a"]["m"].maps[0]
|
|
|
|
|
|
def test_exactness_setting():
|
|
d = {"y": 1}
|
|
m1 = {"a": {"m": d}}
|
|
z = ChainDB(m1)
|
|
e = {"z": 2}
|
|
z["a"]["m"] = e
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], ChainDB)
|
|
assert isinstance(z["a"]["m"].maps[0], dict)
|
|
assert e is z["a"]["m"].maps[0]
|
|
|
|
|
|
def test_exactness_setting_multi():
|
|
d = "a"
|
|
e = "b"
|
|
m1 = {"a": {"m": d}}
|
|
m2 = {"a": {"m": e}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
g = ("c",)
|
|
z["a"]["m"] = g
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], tuple)
|
|
assert isinstance(z["a"].maps[0], dict)
|
|
assert g is z["a"].maps[1]["m"]
|
|
# We sent this to the first map not the last
|
|
assert z["a"]["m"] is g
|
|
|
|
|
|
def test_exactness_setting_multi2():
|
|
d = [1, 2]
|
|
e = [3, 4]
|
|
ee = [5, 6]
|
|
m1 = {"a": {"m": d}}
|
|
m2 = {"a": {"m": e, "mm": ee}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
g = [-1, -2]
|
|
z["a"]["mm"] = g
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], list)
|
|
assert isinstance(z["a"].maps[0], dict)
|
|
assert g is z["a"].maps[1]["mm"]
|
|
assert z["a"]["mm"] is g
|
|
assert z["a"]["m"] == [1, 2, 3, 4]
|
|
|
|
|
|
def test_exactness_setting_multi_novel():
|
|
d = [1, 2]
|
|
e = [3, 4]
|
|
m1 = {"a": {"m": d}}
|
|
m2 = {"a": {"m": e}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
g = [-1, -2]
|
|
z["a"]["mm"] = g
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["m"], list)
|
|
assert isinstance(z["a"].maps[0], dict)
|
|
assert g is z["a"].maps[0]["mm"]
|
|
assert g is z["a"]["mm"]
|
|
|
|
|
|
def test_dicts_in_lists():
|
|
c = [{"m": 1}, {"n": 2}]
|
|
d = [{"o": 3}, {"p": 4}]
|
|
t = c + d
|
|
m1 = {"a": {"b": c}}
|
|
m2 = {"a": {"b": d}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
assert isinstance(z["a"], ChainDB)
|
|
assert isinstance(z["a"]["b"], list)
|
|
assert z["a"]["b"] == t
|
|
assert c[0] is z["a"]["b"][0]
|
|
assert c[1] is z["a"]["b"][1]
|
|
assert d[0] is z["a"]["b"][2]
|
|
assert d[1] is z["a"]["b"][3]
|
|
|
|
|
|
def test_dicts_in_lists_mutation():
|
|
c = [{"m": 1}, {"n": 2}]
|
|
d = [{"o": 3}, {"p": 4}]
|
|
m1 = {"a": {"b": c}}
|
|
m2 = {"a": {"b": d}}
|
|
z = ChainDB(m1)
|
|
z.maps.append(m2)
|
|
append_list = z["a"]["b"]
|
|
append_list.append({"hi": "world"})
|
|
assert isinstance(append_list, list)
|
|
assert z["a"]["b"] != append_list
|
|
|
|
extend_list = z["a"]["b"]
|
|
extend_list.extend([{"hi": "world"}, {"spam": "eggs"}])
|
|
assert z["a"]["b"] != extend_list
|