Skip to content

Commit 96b1e67

Browse files
committed
TEST: Thoroughly test dict_diff()
1 parent b80d86e commit 96b1e67

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

nipype/utils/tests/test_misc.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@
66

77
import pytest
88

9-
from nipype.utils.misc import container_to_string, str2bool, flatten, unflatten
9+
from nipype.utils.misc import (
10+
container_to_string,
11+
str2bool,
12+
flatten,
13+
unflatten,
14+
dict_diff,
15+
)
1016

1117

1218
def test_cont_to_str():
@@ -95,3 +101,43 @@ def test_rgetcwd(monkeypatch, tmpdir):
95101
monkeypatch.delenv("PWD")
96102
with pytest.raises(OSError):
97103
rgetcwd(error=False)
104+
105+
106+
def test_dict_diff():
107+
abtuple = [("a", "b")]
108+
abdict = dict(abtuple)
109+
110+
# Unchanged
111+
assert dict_diff(abdict, abdict) == ""
112+
assert dict_diff(abdict, abtuple) == ""
113+
assert dict_diff(abtuple, abdict) == ""
114+
assert dict_diff(abtuple, abtuple) == ""
115+
116+
# Changed keys
117+
diff = dict_diff({"a": "b"}, {"b": "a"})
118+
assert "Dictionaries had differing keys" in diff
119+
assert "keys not previously seen: {'b'}" in diff
120+
assert "keys not presently seen: {'a'}" in diff
121+
122+
# Trigger recursive uniformization
123+
complicated_val1 = [{"a": ["b"], "c": ("d", "e")}]
124+
complicated_val2 = [{"a": ["x"], "c": ("d", "e")}]
125+
uniformized_val1 = ({"a": ("b",), "c": ("d", "e")},)
126+
uniformized_val2 = ({"a": ("x",), "c": ("d", "e")},)
127+
128+
diff = dict_diff({"a": complicated_val1}, {"a": complicated_val2})
129+
assert "Some dictionary entries had differing values:" in diff
130+
assert "a: {!r} != {!r}".format(uniformized_val2, uniformized_val1) in diff
131+
132+
# Trigger shortening
133+
diff = dict_diff({"a": "b" * 60}, {"a": "c" * 70})
134+
assert "Some dictionary entries had differing values:" in diff
135+
assert "a: 'cccccccccc...cccccccccc' != 'bbbbbbbbbb...bbbbbbbbbb'" in diff
136+
137+
# Fail the dict conversion
138+
diff = dict_diff({}, "not a dict")
139+
assert diff == (
140+
"Diff between nipype inputs failed:\n"
141+
"* Cached inputs: {}\n"
142+
"* New inputs: not a dict"
143+
)

0 commit comments

Comments
 (0)