Add regression test and fixed dict insertion order in assertion diffs… #14086
+59
−10
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does this PR do?
This PR fixes an issue in pytest’s assertion comparison output where dictionary
insertion order is not preserved in verbose assertion diffs.
When comparing dictionaries with extra keys, the current output may inject the
extra key into the structured diff block, even though it belongs only to the
right-hand side. This leads to confusing output and breaks the expectation that
dict insertion order is respected.
This PR ensures that:
Right contains 1 more item)Why is this needed?
This is a regression highlighted in issue #14079.
Python dictionaries preserve insertion order, but pytest’s assertion diff output
did not consistently reflect this, especially for nested dictionaries combined
with wrapped output. This resulted in misleading diffs such as extra keys
appearing inside the left-hand structure.
What changes were made?
_compare_eq_dictlogic insrc/_pytest/assertion/util.pyto ensureextra keys are displayed only in the appropriate section.
testing/test_assertion.pythat fails under thecurrent behavior and passes with this fix.
How was this tested?