1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
"""Unit tests for flake.options.manager.OptionManager."""
import optparse
import os
import mock
import pytest
from flake8 import utils
from flake8.options import manager
TEST_VERSION = '3.0.0b1'
@pytest.fixture
def optmanager():
"""Generate a simple OptionManager with default test arguments."""
return manager.OptionManager(prog='flake8', version=TEST_VERSION)
def test_option_manager_creates_option_parser(optmanager):
"""Verify that a new manager creates a new parser."""
assert optmanager.parser is not None
assert isinstance(optmanager.parser, optparse.OptionParser) is True
def test_add_option_short_option_only(optmanager):
"""Verify the behaviour of adding a short-option only."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('-s', help='Test short opt')
assert optmanager.options[0].short_option_name == '-s'
def test_add_option_long_option_only(optmanager):
"""Verify the behaviour of adding a long-option only."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('--long', help='Test long opt')
assert optmanager.options[0].short_option_name is None
assert optmanager.options[0].long_option_name == '--long'
def test_add_short_and_long_option_names(optmanager):
"""Verify the behaviour of using both short and long option names."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('-b', '--both', help='Test both opts')
assert optmanager.options[0].short_option_name == '-b'
assert optmanager.options[0].long_option_name == '--both'
def test_add_option_with_custom_args(optmanager):
"""Verify that add_option handles custom Flake8 parameters."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('--parse', parse_from_config=True)
optmanager.add_option('--commas', comma_separated_list=True)
optmanager.add_option('--files', normalize_paths=True)
attrs = ['parse_from_config', 'comma_separated_list', 'normalize_paths']
for option, attr in zip(optmanager.options, attrs):
assert getattr(option, attr) is True
def test_parse_args_normalize_path(optmanager):
"""Show that parse_args handles path normalization."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('--config', normalize_paths=True)
options, args = optmanager.parse_args(['--config', '../config.ini'])
assert options.config == os.path.abspath('../config.ini')
def test_parse_args_handles_comma_separated_defaults(optmanager):
"""Show that parse_args handles defaults that are comma-separated."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('--exclude', default='E123,W234',
comma_separated_list=True)
options, args = optmanager.parse_args([])
assert options.exclude == ['E123', 'W234']
def test_parse_args_handles_comma_separated_lists(optmanager):
"""Show that parse_args handles user-specified comma-separated lists."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('--exclude', default='E123,W234',
comma_separated_list=True)
options, args = optmanager.parse_args(['--exclude', 'E201,W111,F280'])
assert options.exclude == ['E201', 'W111', 'F280']
def test_parse_args_normalize_paths(optmanager):
"""Verify parse_args normalizes a comma-separated list of paths."""
assert optmanager.options == []
assert optmanager.config_options_dict == {}
optmanager.add_option('--extra-config', normalize_paths=True,
comma_separated_list=True)
options, args = optmanager.parse_args([
'--extra-config', '../config.ini,tox.ini,flake8/some-other.cfg'
])
assert options.extra_config == [
os.path.abspath('../config.ini'),
'tox.ini',
os.path.abspath('flake8/some-other.cfg'),
]
def test_format_plugin():
"""Verify that format_plugin turns a tuple into a dictionary."""
plugin = manager.OptionManager.format_plugin(('Testing', '0.0.0'))
assert plugin['name'] == 'Testing'
assert plugin['version'] == '0.0.0'
def test_generate_versions(optmanager):
"""Verify a comma-separated string is generated of registered plugins."""
optmanager.registered_plugins = [
('Testing 100', '0.0.0'),
('Testing 101', '0.0.0'),
('Testing 300', '0.0.0'),
]
assert (optmanager.generate_versions() ==
'Testing 100: 0.0.0, Testing 101: 0.0.0, Testing 300: 0.0.0')
def test_generate_versions_with_format_string(optmanager):
"""Verify a comma-separated string is generated of registered plugins."""
optmanager.registered_plugins.update([
('Testing', '0.0.0'),
('Testing', '0.0.0'),
('Testing', '0.0.0'),
])
assert (
optmanager.generate_versions() == 'Testing: 0.0.0'
)
def test_update_version_string(optmanager):
"""Verify we update the version string idempotently."""
assert optmanager.version == TEST_VERSION
assert optmanager.parser.version == TEST_VERSION
optmanager.registered_plugins = [
('Testing 100', '0.0.0'),
('Testing 101', '0.0.0'),
('Testing 300', '0.0.0'),
]
optmanager.update_version_string()
assert optmanager.version == TEST_VERSION
assert (optmanager.parser.version == TEST_VERSION + ' ('
'Testing 100: 0.0.0, Testing 101: 0.0.0, Testing 300: 0.0.0) ' +
utils.get_python_version())
def test_generate_epilog(optmanager):
"""Verify how we generate the epilog for help text."""
assert optmanager.parser.epilog is None
optmanager.registered_plugins = [
('Testing 100', '0.0.0'),
('Testing 101', '0.0.0'),
('Testing 300', '0.0.0'),
]
expected_value = (
'Installed plugins: Testing 100: 0.0.0, Testing 101: 0.0.0, Testing'
' 300: 0.0.0'
)
optmanager.generate_epilog()
assert optmanager.parser.epilog == expected_value
def test_extend_default_ignore(optmanager):
"""Verify that we update the extended default ignore list."""
assert optmanager.extended_default_ignore == set()
optmanager.extend_default_ignore(['T100', 'T101', 'T102'])
assert optmanager.extended_default_ignore == set(['T100',
'T101',
'T102'])
def test_parse_known_args(optmanager):
"""Verify we ignore unknown options."""
with mock.patch('sys.exit') as sysexit:
optmanager.parse_known_args(['--max-complexity', '5'])
assert sysexit.called is False
|