mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-07 21:44:18 +00:00
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.
69 lines
2.4 KiB
Python
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
|