Skip to content

Commit 886cb62

Browse files
authored
Merge pull request #17 from arminfriedl/unordered_deep
Add deep unordered for nested data structures
2 parents 9efae14 + 46c7512 commit 886cb62

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

pytest_unordered/__init__.py

+8
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ def unordered(*args: Any, check_type: Optional[bool] = None) -> UnorderedList:
6767
return UnorderedList(args, check_type=False)
6868

6969

70+
def unordered_deep(obj: Any) -> Any:
71+
if isinstance(obj, dict):
72+
return dict((k, unordered_deep(v)) for k, v in obj.items())
73+
if isinstance(obj, list) or isinstance(obj, tuple):
74+
return unordered((unordered_deep(x) for x in obj))
75+
return obj
76+
77+
7078
def _compare_eq_unordered(left: Iterable, right: Iterable) -> Tuple[List, List]:
7179
extra_left = []
7280
extra_right = list(right)

tests/test_unordered.py

+19
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pytest_unordered import UnorderedList
1313
from pytest_unordered import _compare_eq_unordered
1414
from pytest_unordered import unordered
15+
from pytest_unordered import unordered_deep
1516

1617

1718
@pytest.mark.parametrize(
@@ -255,3 +256,21 @@ def test_mock_any() -> None:
255256
assert p_unordered == test_1
256257
assert p_unordered == test_2
257258
assert p_unordered == test_3
259+
260+
261+
@pytest.mark.parametrize(
262+
["expected", "actual"],
263+
[
264+
(unordered_deep([1, 2, 3]), [3, 2, 1]),
265+
(unordered_deep((1, 2, 3)), (3, 2, 1)),
266+
(unordered_deep({1, 2, 3}), {3, 2, 1}),
267+
(unordered_deep([1, 2, {"a": (4, 5, 6)}]), [{"a": [6, 5, 4]}, 2, 1]), # fmt: skip
268+
(unordered_deep([{1: (["a", "b"])}, 2, 3]), [3, 2, {1: ["b", "a"]}]), # fmt: skip
269+
(unordered_deep(("a", "b", "c")), ["b", "a", "c"]),
270+
],
271+
)
272+
def test_unordered_deep(expected: UnorderedList, actual: Iterable) -> None:
273+
assert expected == actual
274+
assert actual == expected
275+
assert not (expected != actual)
276+
assert not (actual != expected)

0 commit comments

Comments
 (0)