flake8/tests/unit/test_checker_manager.py
Lukasz Langa 01c0c648e1 Only require Mock on Python 3.4 and older. Use the builtin one elsewhere.
Mock 2.0 is using pbr which is hostile to environments without network access.
It's not required on Python 3.5+ so I made it possible to use `unittest.mock`
on this version.

Updated tox.ini to reflect this. Tested with 2.7.11, 3.3.6, 3.4.5, and 3.5.2 on
macOS 10.12.1 with tox and pyenv.
2016-11-27 15:13:30 -08:00

69 lines
2.4 KiB
Python

"""Tests for the Manager object for FileCheckers."""
import errno
try:
import mock
except ImportError:
from unittest import mock
import pytest
from flake8 import checker
def style_guide_mock(**kwargs):
"""Create a mock StyleGuide object."""
kwargs.setdefault('diff', False)
kwargs.setdefault('jobs', '4')
style_guide = mock.Mock()
style_guide.options = mock.Mock(**kwargs)
return style_guide
def test_oserrors_cause_serial_fall_back():
"""Verify that OSErrors will cause the Manager to fallback to serial."""
err = OSError(errno.ENOSPC, 'Ominous message about spaceeeeee')
style_guide = style_guide_mock()
with mock.patch('multiprocessing.Queue', side_effect=err):
manager = checker.Manager(style_guide, [], [])
assert manager.using_multiprocessing is False
@mock.patch('flake8.utils.is_windows', return_value=False)
def test_oserrors_are_reraised(is_windows):
"""Verify that OSErrors will cause the Manager to fallback to serial."""
err = OSError(errno.EAGAIN, 'Ominous message')
style_guide = style_guide_mock()
with mock.patch('multiprocessing.Queue', side_effect=err):
with pytest.raises(OSError):
checker.Manager(style_guide, [], [])
def test_multiprocessing_is_disabled():
"""Verify not being able to import multiprocessing forces jobs to 0."""
style_guide = style_guide_mock()
with mock.patch('flake8.checker.multiprocessing', None):
manager = checker.Manager(style_guide, [], [])
assert manager.jobs == 0
def test_make_checkers():
"""Verify that we create a list of FileChecker instances."""
style_guide = style_guide_mock()
files = ['file1', 'file2']
checkplugins = mock.Mock()
checkplugins.to_dictionary.return_value = {
'ast_plugins': [],
'logical_line_plugins': [],
'physical_line_plugins': [],
}
with mock.patch('flake8.checker.multiprocessing', None):
manager = checker.Manager(style_guide, files, checkplugins)
with mock.patch('flake8.utils.filenames_from') as filenames_from:
filenames_from.side_effect = [['file1'], ['file2']]
with mock.patch('flake8.utils.fnmatch', return_value=True):
with mock.patch('flake8.processor.FileProcessor'):
manager.make_checkers()
for file_checker in manager.checkers:
assert file_checker.filename in files