Sent from my iPhone

> On 22 Jun 2019, at 08:15, Karthikeyan Singaravelan <tir.kar...@gmail.com> 
> wrote:
> 
> From Python 3.6 the order of keyword arguments to a function is preserved. In 
> https://bugs.python.org/issue21256 the order of keyword arguments for 
> unittest.mock's repr were sorted to return deterministic output for usage in 
> doctest and other use cases. This currently gives little inconsistent output 
> where the keyword argument order in below mock call is (b=2, a=1) but it's 
> sorted in the error message and mock_calls list to give (a=1, b=2). 
> 
> I have opened https://bugs.python.org/issue37212 to preserve the order. It 
> was recommended in the issue 21256 too at 
> https://bugs.python.org/issue21256#msg216512 . The drawback is that it's 
> backwards incompatible where tests that assert error messages might have used 
> the sorted order. Due to equality implementation call(a=1, b=2) == call(b=2, 
> a=1) is still True so assertions are not affected. There are no test failures 
> in mock test suite except the test in the original issue where sorted output 
> is asserted. Sorting the keyword arguments was also not documented. I propose 
> removing this sorted order in 3.9 and to preserve the original order. The 
> change is straightforward and I can add a PR if this change is accepted.


+1 go ahead. The test that will fail was synthetic for the sorting and it won't 
cause real tests to fail. 

Michael


> 
>>>> from unittest.mock import Mock, call
>>>> m = Mock(name='m')
>>>> m(b=2, a=1)
> <Mock name='m()' id='4339069168'>
>>>> call(a=1, b=2) == call(b=2, a=1)
> True
>>>> m.mock_calls
> [call(a=1, b=2)]
>>>> m.assert_called_with(c=1)
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>  File 
> "/Users/karthikeyansingaravelan/stuff/python/cpython/Lib/unittest/mock.py", 
> line 870, in assert_called_with
>    raise AssertionError(_error_message()) from cause
> AssertionError: expected call not found.
> Expected: m(c=1)
> Actual: m(a=1, b=2)
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at 
> https://mail.python.org/archives/list/python-dev@python.org/message/6F2NGCERZLZ2CDGYIAR5QOHMGAAE5VHE/
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/JWPDLKNM5X27FRWJG7UOAFXHNRUGH44S/

Reply via email to