From f47699de12ca9aa7e79ade6ea958708f5b88eab8 Mon Sep 17 00:00:00 2001 From: Elizabeth Uselton Date: Sat, 3 Aug 2019 18:46:43 -0700 Subject: [PATCH] bpo-37555: Add tests checking every function using _call_matcher both with and without spec --- Lib/unittest/test/testmock/testasync.py | 28 +++++++++++++++++++++-- Lib/unittest/test/testmock/testhelpers.py | 25 +++++++++++++------- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/Lib/unittest/test/testmock/testasync.py b/Lib/unittest/test/testmock/testasync.py index fa906e4f7152..ec6809cbd949 100644 --- a/Lib/unittest/test/testmock/testasync.py +++ b/Lib/unittest/test/testmock/testasync.py @@ -2,8 +2,8 @@ import asyncio import inspect import unittest -from unittest.mock import (call, AsyncMock, patch, MagicMock, create_autospec, - _AwaitEvent) +from unittest.mock import (ANY, call, AsyncMock, patch, MagicMock, + create_autospec, _AwaitEvent) def tearDownModule(): @@ -599,6 +599,30 @@ class AsyncMockAssert(unittest.TestCase): asyncio.run(self._runnable_test('SomethingElse')) self.mock.assert_has_awaits(calls) + def test_awaits_asserts_with_any(self): + class Foo: + def __eq__(self, other): pass + + asyncio.run(self._runnable_test(Foo(), 1)) + + self.mock.assert_has_awaits([call(ANY, 1)]) + self.mock.assert_awaited_with(ANY, 1) + self.mock.assert_any_await(ANY, 1) + + def test_awaits_asserts_with_spec_and_any(self): + class Foo: + def __eq__(self, other): pass + + mock_with_spec = AsyncMock(spec=Foo) + + async def _custom_mock_runnable_test(*args): + await mock_with_spec(*args) + + asyncio.run(_custom_mock_runnable_test(Foo(), 1)) + mock_with_spec.assert_has_awaits([call(ANY, 1)]) + mock_with_spec.assert_awaited_with(ANY, 1) + mock_with_spec.assert_any_await(ANY, 1) + def test_assert_has_awaits_ordered(self): calls = [call('NormalFoo'), call('baz')] with self.assertRaises(AssertionError): diff --git a/Lib/unittest/test/testmock/testhelpers.py b/Lib/unittest/test/testmock/testhelpers.py index 49fffa38439f..8a954095051c 100644 --- a/Lib/unittest/test/testmock/testhelpers.py +++ b/Lib/unittest/test/testmock/testhelpers.py @@ -63,20 +63,29 @@ class AnyTest(unittest.TestCase): ] self.assertEqual(expected, mock.mock_calls) self.assertEqual(mock.mock_calls, expected) - mock.assert_has_calls(expected) - def test_assert_has_calls_with_any_and_spec_set(self): + def test_any_no_spec(self): # This is a regression test for bpo-37555 - class Foo(object): + class Foo: def __eq__(self, other): pass - def __ne__(self, other): pass - mock = Mock(spec_set=Foo) - expected = [call(ANY)] - mock(Foo()) + mock = Mock() + mock(Foo(), 1) + mock.assert_has_calls([call(ANY, 1)]) + mock.assert_called_with(ANY, 1) + mock.assert_any_call(ANY, 1) + + def test_any_and_spec_set(self): + # This is a regression test for bpo-37555 + class Foo: + def __eq__(self, other): pass - mock.assert_has_calls(expected) + mock = Mock(spec=Foo) + mock(Foo(), 1) + mock.assert_has_calls([call(ANY, 1)]) + mock.assert_called_with(ANY, 1) + mock.assert_any_call(ANY, 1) class CallTest(unittest.TestCase): -- 2.47.3