generated from daniil-berg/boilerplate-py
Fix cancel message bug for Python 3.8; test coverage workaround for Python version conditions
This commit is contained in:
@ -18,10 +18,11 @@ __doc__ = """
|
||||
Unittests for the `asyncio_taskpool.helpers` module.
|
||||
"""
|
||||
|
||||
|
||||
import importlib
|
||||
from unittest import IsolatedAsyncioTestCase, TestCase
|
||||
from unittest.mock import MagicMock, AsyncMock, NonCallableMagicMock, call, patch
|
||||
|
||||
from asyncio_taskpool.internals import constants
|
||||
from asyncio_taskpool.internals import helpers
|
||||
|
||||
|
||||
@ -152,3 +153,15 @@ class ClassMethodWorkaroundTestCase(TestCase):
|
||||
cls = None
|
||||
output = instance.__get__(obj, cls)
|
||||
self.assertEqual(expected_output, output)
|
||||
|
||||
def test_correct_class(self):
|
||||
is_older_python = constants.PYTHON_BEFORE_39
|
||||
try:
|
||||
constants.PYTHON_BEFORE_39 = True
|
||||
importlib.reload(helpers)
|
||||
self.assertIs(helpers.ClassMethodWorkaround, helpers.classmethod)
|
||||
constants.PYTHON_BEFORE_39 = False
|
||||
importlib.reload(helpers)
|
||||
self.assertIs(classmethod, helpers.classmethod)
|
||||
finally:
|
||||
constants.PYTHON_BEFORE_39 = is_older_python
|
||||
|
@ -311,13 +311,32 @@ class BaseTaskPoolTestCase(CommonTestCase):
|
||||
self.task_pool._get_running_task(task_id)
|
||||
mock__task_name.assert_not_called()
|
||||
|
||||
@patch('warnings.warn')
|
||||
def test__get_cancel_kw(self, mock_warn: MagicMock):
|
||||
msg = None
|
||||
self.assertDictEqual(EMPTY_DICT, pool.BaseTaskPool._get_cancel_kw(msg))
|
||||
mock_warn.assert_not_called()
|
||||
|
||||
msg = 'something'
|
||||
with patch.object(pool, 'PYTHON_BEFORE_39', new=True):
|
||||
self.assertDictEqual(EMPTY_DICT, pool.BaseTaskPool._get_cancel_kw(msg))
|
||||
mock_warn.assert_called_once()
|
||||
mock_warn.reset_mock()
|
||||
|
||||
with patch.object(pool, 'PYTHON_BEFORE_39', new=False):
|
||||
self.assertDictEqual({'msg': msg}, pool.BaseTaskPool._get_cancel_kw(msg))
|
||||
mock_warn.assert_not_called()
|
||||
|
||||
@patch.object(pool.BaseTaskPool, '_get_cancel_kw')
|
||||
@patch.object(pool.BaseTaskPool, '_get_running_task')
|
||||
def test_cancel(self, mock__get_running_task: MagicMock):
|
||||
def test_cancel(self, mock__get_running_task: MagicMock, mock__get_cancel_kw: MagicMock):
|
||||
mock__get_cancel_kw.return_value = fake_cancel_kw = {'a': 10, 'b': 20}
|
||||
task_id1, task_id2, task_id3 = 1, 4, 9
|
||||
mock__get_running_task.return_value.cancel = mock_cancel = MagicMock()
|
||||
self.assertIsNone(self.task_pool.cancel(task_id1, task_id2, task_id3, msg=FOO))
|
||||
mock__get_running_task.assert_has_calls([call(task_id1), call(task_id2), call(task_id3)])
|
||||
mock_cancel.assert_has_calls([call(msg=FOO), call(msg=FOO), call(msg=FOO)])
|
||||
mock__get_cancel_kw.assert_called_once_with(FOO)
|
||||
mock_cancel.assert_has_calls(3 * [call(**fake_cancel_kw)])
|
||||
|
||||
def test__cancel_group_meta_tasks(self):
|
||||
mock_task1, mock_task2 = MagicMock(), MagicMock()
|
||||
@ -336,6 +355,7 @@ class BaseTaskPoolTestCase(CommonTestCase):
|
||||
|
||||
@patch.object(pool.BaseTaskPool, '_cancel_group_meta_tasks')
|
||||
def test__cancel_and_remove_all_from_group(self, mock__cancel_group_meta_tasks: MagicMock):
|
||||
kw = {BAR: 10, BAZ: 20}
|
||||
task_id = 555
|
||||
mock_cancel = MagicMock()
|
||||
|
||||
@ -347,27 +367,33 @@ class BaseTaskPoolTestCase(CommonTestCase):
|
||||
|
||||
class MockRegister(set, MagicMock):
|
||||
pass
|
||||
self.assertIsNone(self.task_pool._cancel_and_remove_all_from_group(' ', MockRegister({task_id, 'x'}), msg=FOO))
|
||||
mock_cancel.assert_called_once_with(msg=FOO)
|
||||
self.assertIsNone(self.task_pool._cancel_and_remove_all_from_group(' ', MockRegister({task_id, 'x'}), **kw))
|
||||
mock_cancel.assert_called_once_with(**kw)
|
||||
|
||||
@patch.object(pool.BaseTaskPool, '_get_cancel_kw')
|
||||
@patch.object(pool.BaseTaskPool, '_cancel_and_remove_all_from_group')
|
||||
def test_cancel_group(self, mock__cancel_and_remove_all_from_group: MagicMock):
|
||||
def test_cancel_group(self, mock__cancel_and_remove_all_from_group: MagicMock, mock__get_cancel_kw: MagicMock):
|
||||
mock__get_cancel_kw.return_value = fake_cancel_kw = {'a': 10, 'b': 20}
|
||||
self.task_pool._task_groups[FOO] = mock_group_reg = MagicMock()
|
||||
with self.assertRaises(exceptions.InvalidGroupName):
|
||||
self.task_pool.cancel_group(BAR)
|
||||
mock__cancel_and_remove_all_from_group.assert_not_called()
|
||||
self.assertIsNone(self.task_pool.cancel_group(FOO, msg=BAR))
|
||||
self.assertDictEqual(EMPTY_DICT, self.task_pool._task_groups)
|
||||
mock__cancel_and_remove_all_from_group.assert_called_once_with(FOO, mock_group_reg, msg=BAR)
|
||||
mock__get_cancel_kw.assert_called_once_with(BAR)
|
||||
mock__cancel_and_remove_all_from_group.assert_called_once_with(FOO, mock_group_reg, **fake_cancel_kw)
|
||||
|
||||
@patch.object(pool.BaseTaskPool, '_get_cancel_kw')
|
||||
@patch.object(pool.BaseTaskPool, '_cancel_and_remove_all_from_group')
|
||||
def test_cancel_all(self, mock__cancel_and_remove_all_from_group: MagicMock):
|
||||
def test_cancel_all(self, mock__cancel_and_remove_all_from_group: MagicMock, mock__get_cancel_kw: MagicMock):
|
||||
mock__get_cancel_kw.return_value = fake_cancel_kw = {'a': 10, 'b': 20}
|
||||
mock_group_reg = MagicMock()
|
||||
self.task_pool._task_groups = {FOO: mock_group_reg, BAR: mock_group_reg}
|
||||
self.assertIsNone(self.task_pool.cancel_all('msg'))
|
||||
self.assertIsNone(self.task_pool.cancel_all(BAZ))
|
||||
mock__get_cancel_kw.assert_called_once_with(BAZ)
|
||||
mock__cancel_and_remove_all_from_group.assert_has_calls([
|
||||
call(BAR, mock_group_reg, msg='msg'),
|
||||
call(FOO, mock_group_reg, msg='msg')
|
||||
call(BAR, mock_group_reg, **fake_cancel_kw),
|
||||
call(FOO, mock_group_reg, **fake_cancel_kw)
|
||||
])
|
||||
|
||||
def test__pop_ended_meta_tasks(self):
|
||||
|
Reference in New Issue
Block a user