diff options
| author | Anthony Sottile <asottile@umich.edu> | 2021-04-18 09:27:41 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-18 09:27:41 -0700 |
| commit | 645cd71f571da1cdc42683cf4228b537ddc2685f (patch) | |
| tree | 65405b4d3c2c5e1a90fa5eb3d7c8d6b7d4c18c68 /tests/integration | |
| parent | a7174759e9a651405ef37db511ac1168e3bbdec5 (diff) | |
| parent | af1668bf04079b1a8db5910a5e3697c7c8db8fc9 (diff) | |
| download | flake8-645cd71f571da1cdc42683cf4228b537ddc2685f.tar.gz | |
Merge pull request #1319 from PyCQA/format_tests
extend black formatting to tests as well
Diffstat (limited to 'tests/integration')
| -rw-r--r-- | tests/integration/subdir/aplugin.py | 4 | ||||
| -rw-r--r-- | tests/integration/test_aggregator.py | 59 | ||||
| -rw-r--r-- | tests/integration/test_api_legacy.py | 4 | ||||
| -rw-r--r-- | tests/integration/test_checker.py | 210 | ||||
| -rw-r--r-- | tests/integration/test_main.py | 200 | ||||
| -rw-r--r-- | tests/integration/test_plugins.py | 29 |
6 files changed, 296 insertions, 210 deletions
diff --git a/tests/integration/subdir/aplugin.py b/tests/integration/subdir/aplugin.py index 266e8d0..fde5890 100644 --- a/tests/integration/subdir/aplugin.py +++ b/tests/integration/subdir/aplugin.py @@ -4,8 +4,8 @@ class ExtensionTestPlugin2: """Extension test plugin in its own directory.""" - name = 'ExtensionTestPlugin2' - version = '1.0.0' + name = "ExtensionTestPlugin2" + version = "1.0.0" def __init__(self, tree): """Construct an instance of test plugin.""" diff --git a/tests/integration/test_aggregator.py b/tests/integration/test_aggregator.py index 2bdea70..ae75204 100644 --- a/tests/integration/test_aggregator.py +++ b/tests/integration/test_aggregator.py @@ -9,7 +9,7 @@ from flake8.options import aggregator from flake8.options import config from flake8.options import manager -CLI_SPECIFIED_CONFIG = 'tests/fixtures/config_files/cli-specified.ini' +CLI_SPECIFIED_CONFIG = "tests/fixtures/config_files/cli-specified.ini" @pytest.fixture @@ -18,8 +18,8 @@ def optmanager(): prelim_parser = argparse.ArgumentParser(add_help=False) options.register_preliminary_options(prelim_parser) option_manager = manager.OptionManager( - prog='flake8', - version='3.0.0', + prog="flake8", + version="3.0.0", parents=[prelim_parser], ) options.register_default_options(option_manager) @@ -28,31 +28,50 @@ def optmanager(): def test_aggregate_options_with_config(optmanager): """Verify we aggregate options and config values appropriately.""" - arguments = ['flake8', '--select', - 'E11,E34,E402,W,F', '--exclude', 'tests/*'] + arguments = [ + "flake8", + "--select", + "E11,E34,E402,W,F", + "--exclude", + "tests/*", + ] config_finder = config.ConfigFileFinder( - 'flake8', - config_file=CLI_SPECIFIED_CONFIG) + "flake8", config_file=CLI_SPECIFIED_CONFIG + ) options, args = aggregator.aggregate_options( - optmanager, config_finder, arguments) + optmanager, config_finder, arguments + ) - assert options.select == ['E11', 'E34', 'E402', 'W', 'F'] - assert options.ignore == ['E123', 'W234', 'E111'] - assert options.exclude == [os.path.abspath('tests/*')] + assert options.select == ["E11", "E34", "E402", "W", "F"] + assert options.ignore == ["E123", "W234", "E111"] + assert options.exclude == [os.path.abspath("tests/*")] def test_aggregate_options_when_isolated(optmanager): """Verify we aggregate options and config values appropriately.""" - arguments = ['flake8', '--select', 'E11,E34,E402,W,F', - '--exclude', 'tests/*'] - config_finder = config.ConfigFileFinder( - 'flake8', ignore_config_files=True) - optmanager.extend_default_ignore(['E8']) + arguments = [ + "flake8", + "--select", + "E11,E34,E402,W,F", + "--exclude", + "tests/*", + ] + config_finder = config.ConfigFileFinder("flake8", ignore_config_files=True) + optmanager.extend_default_ignore(["E8"]) options, args = aggregator.aggregate_options( - optmanager, config_finder, arguments) + optmanager, config_finder, arguments + ) - assert options.select == ['E11', 'E34', 'E402', 'W', 'F'] + assert options.select == ["E11", "E34", "E402", "W", "F"] assert sorted(options.ignore) == [ - 'E121', 'E123', 'E126', 'E226', 'E24', 'E704', 'E8', 'W503', 'W504', + "E121", + "E123", + "E126", + "E226", + "E24", + "E704", + "E8", + "W503", + "W504", ] - assert options.exclude == [os.path.abspath('tests/*')] + assert options.exclude == [os.path.abspath("tests/*")] diff --git a/tests/integration/test_api_legacy.py b/tests/integration/test_api_legacy.py index 0ffaa22..efb0fc9 100644 --- a/tests/integration/test_api_legacy.py +++ b/tests/integration/test_api_legacy.py @@ -5,8 +5,8 @@ from flake8.api import legacy def test_legacy_api(tmpdir): """A basic end-to-end test for the legacy api reporting errors.""" with tmpdir.as_cwd(): - t_py = tmpdir.join('t.py') - t_py.write('import os # unused import\n') + t_py = tmpdir.join("t.py") + t_py.write("import os # unused import\n") style_guide = legacy.get_style_guide() report = style_guide.check_files([t_py.strpath]) diff --git a/tests/integration/test_checker.py b/tests/integration/test_checker.py index 1254bf0..8a69a9c 100644 --- a/tests/integration/test_checker.py +++ b/tests/integration/test_checker.py @@ -10,13 +10,13 @@ from flake8.processor import FileProcessor PHYSICAL_LINE = "# Physical line content" -EXPECTED_REPORT = (1, 1, 'T000 Expected Message') -EXPECTED_REPORT_PHYSICAL_LINE = (1, 'T000 Expected Message') +EXPECTED_REPORT = (1, 1, "T000 Expected Message") +EXPECTED_REPORT_PHYSICAL_LINE = (1, "T000 Expected Message") EXPECTED_RESULT_PHYSICAL_LINE = ( - 'T000', + "T000", 0, 1, - 'Expected Message', + "Expected Message", None, ) @@ -24,8 +24,8 @@ EXPECTED_RESULT_PHYSICAL_LINE = ( class PluginClass: """Simple file plugin class yielding the expected report.""" - name = 'test' - version = '1.0.0' + name = "test" + version = "1.0.0" def __init__(self, tree): """Construct a dummy object to provide mandatory parameter.""" @@ -33,26 +33,26 @@ class PluginClass: def run(self): """Run class yielding one element containing the expected report.""" - yield EXPECTED_REPORT + (type(self), ) + yield EXPECTED_REPORT + (type(self),) def plugin_func(func): """Decorate file plugins which are implemented as functions.""" - func.name = 'test' - func.version = '1.0.0' + func.name = "test" + func.version = "1.0.0" return func @plugin_func def plugin_func_gen(tree): """Yield the expected report.""" - yield EXPECTED_REPORT + (type(plugin_func_gen), ) + yield EXPECTED_REPORT + (type(plugin_func_gen),) @plugin_func def plugin_func_list(tree): """Return a list of expected reports.""" - return [EXPECTED_REPORT + (type(plugin_func_list), )] + return [EXPECTED_REPORT + (type(plugin_func_list),)] @plugin_func @@ -98,35 +98,37 @@ def mock_file_checker_with_plugin(plugin_target): Useful as a starting point for mocking reports/results. """ # Mock an entry point returning the plugin target - entry_point = mock.Mock(spec=['load']) + entry_point = mock.Mock(spec=["load"]) entry_point.name = plugin_target.name entry_point.load.return_value = plugin_target - entry_point.value = 'mocked:value' + entry_point.value = "mocked:value" # Load the checker plugins using the entry point mock with mock.patch.object( - importlib_metadata, - 'entry_points', - return_value={'flake8.extension': [entry_point]}, + importlib_metadata, + "entry_points", + return_value={"flake8.extension": [entry_point]}, ): checks = manager.Checkers() # Prevent it from reading lines from stdin or somewhere else - with mock.patch('flake8.processor.FileProcessor.read_lines', - return_value=['Line 1']): + with mock.patch( + "flake8.processor.FileProcessor.read_lines", return_value=["Line 1"] + ): file_checker = checker.FileChecker( - '-', - checks.to_dictionary(), - mock.MagicMock() + "-", checks.to_dictionary(), mock.MagicMock() ) return file_checker -@pytest.mark.parametrize('plugin_target', [ - PluginClass, - plugin_func_gen, - plugin_func_list, -]) +@pytest.mark.parametrize( + "plugin_target", + [ + PluginClass, + plugin_func_gen, + plugin_func_list, + ], +) def test_handle_file_plugins(plugin_target): """Test the FileChecker class handling different file plugin types.""" file_checker = mock_file_checker_with_plugin(plugin_target) @@ -138,20 +140,25 @@ def test_handle_file_plugins(plugin_target): report = mock.Mock() file_checker.report = report file_checker.run_ast_checks() - report.assert_called_once_with(error_code=None, - line_number=EXPECTED_REPORT[0], - column=EXPECTED_REPORT[1], - text=EXPECTED_REPORT[2]) - - -@pytest.mark.parametrize('plugin_target,len_results', [ - (plugin_func_physical_ret, 1), - (plugin_func_physical_none, 0), - (plugin_func_physical_list_single, 1), - (plugin_func_physical_list_multiple, 2), - (plugin_func_physical_gen_single, 1), - (plugin_func_physical_gen_multiple, 3), -]) + report.assert_called_once_with( + error_code=None, + line_number=EXPECTED_REPORT[0], + column=EXPECTED_REPORT[1], + text=EXPECTED_REPORT[2], + ) + + +@pytest.mark.parametrize( + "plugin_target,len_results", + [ + (plugin_func_physical_ret, 1), + (plugin_func_physical_none, 0), + (plugin_func_physical_list_single, 1), + (plugin_func_physical_list_multiple, 2), + (plugin_func_physical_gen_single, 1), + (plugin_func_physical_gen_multiple, 3), + ], +) def test_line_check_results(plugin_target, len_results): """Test the FileChecker class handling results from line checks.""" file_checker = mock_file_checker_with_plugin(plugin_target) @@ -167,54 +174,100 @@ def test_logical_line_offset_out_of_bounds(): @plugin_func def _logical_line_out_of_bounds(logical_line): - yield 10000, 'L100 test' + yield 10000, "L100 test" file_checker = mock_file_checker_with_plugin(_logical_line_out_of_bounds) logical_ret = ( - '', + "", 'print("xxxxxxxxxxx")', [(0, (1, 0)), (5, (1, 5)), (6, (1, 6)), (19, (1, 19)), (20, (1, 20))], ) with mock.patch.object( - FileProcessor, 'build_logical_line', return_value=logical_ret, + FileProcessor, + "build_logical_line", + return_value=logical_ret, ): file_checker.run_logical_checks() - assert file_checker.results == [('L100', 0, 0, 'test', None)] + assert file_checker.results == [("L100", 0, 0, "test", None)] PLACEHOLDER_CODE = 'some_line = "of" * code' -@pytest.mark.parametrize('results, expected_order', [ - # No entries should be added - ([], []), - # Results are correctly ordered - ([('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE)], [0, 1]), - # Reversed order of lines - ([('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE)], [1, 0]), - # Columns are not ordered correctly (when reports are ordered correctly) - ([('A101', 1, 2, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE)], [1, 0, 2]), - ([('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 1, 2, 'placeholder error', PLACEHOLDER_CODE)], [1, 2, 0]), - ([('A101', 1, 2, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 2, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 1, 'placeholder error', PLACEHOLDER_CODE)], [0, 2, 1]), - ([('A101', 1, 3, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 2, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 3, 1, 'placeholder error', PLACEHOLDER_CODE)], [0, 1, 2]), - ([('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 1, 3, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 2, 'placeholder error', PLACEHOLDER_CODE)], [0, 1, 2]), - # Previously sort column and message (so reversed) (see bug 196) - ([('A101', 1, 1, 'placeholder error', PLACEHOLDER_CODE), - ('A101', 2, 1, 'charlie error', PLACEHOLDER_CODE)], [0, 1]), -]) +@pytest.mark.parametrize( + "results, expected_order", + [ + # No entries should be added + ([], []), + # Results are correctly ordered + ( + [ + ("A101", 1, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 1, "placeholder error", PLACEHOLDER_CODE), + ], + [0, 1], + ), + # Reversed order of lines + ( + [ + ("A101", 2, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 1, 1, "placeholder error", PLACEHOLDER_CODE), + ], + [1, 0], + ), + # Columns are not ordered correctly + # (when reports are ordered correctly) + ( + [ + ("A101", 1, 2, "placeholder error", PLACEHOLDER_CODE), + ("A101", 1, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 1, "placeholder error", PLACEHOLDER_CODE), + ], + [1, 0, 2], + ), + ( + [ + ("A101", 2, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 1, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 1, 2, "placeholder error", PLACEHOLDER_CODE), + ], + [1, 2, 0], + ), + ( + [ + ("A101", 1, 2, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 2, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 1, "placeholder error", PLACEHOLDER_CODE), + ], + [0, 2, 1], + ), + ( + [ + ("A101", 1, 3, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 2, "placeholder error", PLACEHOLDER_CODE), + ("A101", 3, 1, "placeholder error", PLACEHOLDER_CODE), + ], + [0, 1, 2], + ), + ( + [ + ("A101", 1, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 1, 3, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 2, "placeholder error", PLACEHOLDER_CODE), + ], + [0, 1, 2], + ), + # Previously sort column and message (so reversed) (see bug 196) + ( + [ + ("A101", 1, 1, "placeholder error", PLACEHOLDER_CODE), + ("A101", 2, 1, "charlie error", PLACEHOLDER_CODE), + ], + [0, 1], + ), + ], +) def test_report_order(results, expected_order): """ Test in which order the results will be reported. @@ -222,6 +275,7 @@ def test_report_order(results, expected_order): It gets a list of reports from the file checkers and verifies that the result will be ordered independent from the original report. """ + def count_side_effect(name, sorted_results): """Side effect for the result handler to tell all are reported.""" return len(sorted_results) @@ -230,11 +284,11 @@ def test_report_order(results, expected_order): # tuples to create the expected result lists from the indexes expected_results = [results[index] for index in expected_order] - file_checker = mock.Mock(spec=['results', 'display_name']) + file_checker = mock.Mock(spec=["results", "display_name"]) file_checker.results = results - file_checker.display_name = 'placeholder' + file_checker.display_name = "placeholder" - style_guide = mock.MagicMock(spec=['options', 'processing_file']) + style_guide = mock.MagicMock(spec=["options", "processing_file"]) # Create a placeholder manager without arguments or plugins # Just add one custom file checker which just provides the results @@ -244,9 +298,9 @@ def test_report_order(results, expected_order): # _handle_results is the first place which gets the sorted result # Should something non-private be mocked instead? handler = mock.Mock(side_effect=count_side_effect) - with mock.patch.object(manager, '_handle_results', handler): + with mock.patch.object(manager, "_handle_results", handler): assert manager.report() == (len(results), len(results)) - handler.assert_called_once_with('placeholder', expected_results) + handler.assert_called_once_with("placeholder", expected_results) def test_acquire_when_multiprocessing_pool_can_initialize(): diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index 765e752..45fe9de 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -17,7 +17,7 @@ def _call_main(argv, retv=0): def test_diff_option(tmpdir, capsys): """Ensure that `flake8 --diff` works.""" - t_py_contents = '''\ + t_py_contents = """\ import os import sys # unused but not part of diff @@ -26,9 +26,9 @@ print('(to avoid trailing whitespace in test)') print(os.path.join('foo', 'bar')) y # part of the diff and an error -''' +""" - diff = '''\ + diff = """\ diff --git a/t.py b/t.py index d64ac39..7d943de 100644 --- a/t.py @@ -39,39 +39,39 @@ index d64ac39..7d943de 100644 print(os.path.join('foo', 'bar')) + +y # part of the diff and an error -''' +""" - with mock.patch.object(utils, 'stdin_get_value', return_value=diff): + with mock.patch.object(utils, "stdin_get_value", return_value=diff): with tmpdir.as_cwd(): - tmpdir.join('t.py').write(t_py_contents) - _call_main(['--diff'], retv=1) + tmpdir.join("t.py").write(t_py_contents) + _call_main(["--diff"], retv=1) out, err = capsys.readouterr() assert out == "t.py:8:1: F821 undefined name 'y'\n" - assert err == '' + assert err == "" def test_form_feed_line_split(tmpdir, capsys): """Test that form feed is treated the same for stdin.""" - src = 'x=1\n\f\ny=1\n' - expected_out = '''\ + src = "x=1\n\f\ny=1\n" + expected_out = """\ t.py:1:2: E225 missing whitespace around operator t.py:3:2: E225 missing whitespace around operator -''' +""" with tmpdir.as_cwd(): - tmpdir.join('t.py').write(src) + tmpdir.join("t.py").write(src) - with mock.patch.object(utils, 'stdin_get_value', return_value=src): - _call_main(['-', '--stdin-display-name=t.py'], retv=1) + with mock.patch.object(utils, "stdin_get_value", return_value=src): + _call_main(["-", "--stdin-display-name=t.py"], retv=1) out, err = capsys.readouterr() assert out == expected_out - assert err == '' + assert err == "" - _call_main(['t.py'], retv=1) + _call_main(["t.py"], retv=1) out, err = capsys.readouterr() assert out == expected_out - assert err == '' + assert err == "" def test_e101_indent_char_does_not_reset(tmpdir, capsys): @@ -89,82 +89,79 @@ if True: """ with tmpdir.as_cwd(): - tmpdir.join('t.py').write(t_py_contents) - _call_main(['t.py']) + tmpdir.join("t.py").write(t_py_contents) + _call_main(["t.py"]) def test_statistics_option(tmpdir, capsys): """Ensure that `flake8 --statistics` works.""" with tmpdir.as_cwd(): - tmpdir.join('t.py').write('import os\nimport sys\n') - _call_main(['--statistics', 't.py'], retv=1) + tmpdir.join("t.py").write("import os\nimport sys\n") + _call_main(["--statistics", "t.py"], retv=1) - out, err = capsys.readouterr() - assert out == '''\ + expected = """\ t.py:1:1: F401 'os' imported but unused t.py:2:1: F401 'sys' imported but unused 2 F401 'os' imported but unused -''' - assert err == '' +""" + out, err = capsys.readouterr() + assert out == expected + assert err == "" def test_show_source_option(tmpdir, capsys): """Ensure that --show-source and --no-show-source work.""" with tmpdir.as_cwd(): - tmpdir.join('tox.ini').write('[flake8]\nshow_source = true\n') - tmpdir.join('t.py').write('import os\n') - _call_main(['t.py'], retv=1) + tmpdir.join("tox.ini").write("[flake8]\nshow_source = true\n") + tmpdir.join("t.py").write("import os\n") + _call_main(["t.py"], retv=1) - out, err = capsys.readouterr() - assert out == '''\ + expected = """\ t.py:1:1: F401 'os' imported but unused import os ^ -''' - assert err == '' +""" + out, err = capsys.readouterr() + assert out == expected + assert err == "" with tmpdir.as_cwd(): - _call_main(['t.py', '--no-show-source'], retv=1) + _call_main(["t.py", "--no-show-source"], retv=1) - out, err = capsys.readouterr() - assert out == '''\ + expected = """\ t.py:1:1: F401 'os' imported but unused -''' - assert err == '' +""" + out, err = capsys.readouterr() + assert out == expected + assert err == "" def test_extend_exclude(tmpdir, capsys): """Ensure that `flake8 --extend-exclude` works.""" - for d in ['project', 'vendor', 'legacy', '.git', '.tox', '.hg']: - tmpdir.mkdir(d).join('t.py').write('import os\nimport sys\n') + for d in ["project", "vendor", "legacy", ".git", ".tox", ".hg"]: + tmpdir.mkdir(d).join("t.py").write("import os\nimport sys\n") with tmpdir.as_cwd(): - _call_main(['--extend-exclude=vendor,legacy/'], retv=1) + _call_main(["--extend-exclude=vendor,legacy/"], retv=1) out, err = capsys.readouterr() - expected_out = '''\ + expected_out = """\ ./project/t.py:1:1: F401 'os' imported but unused ./project/t.py:2:1: F401 'sys' imported but unused -''' - assert out == expected_out.replace('/', os.sep) - assert err == '' +""" + assert out == expected_out.replace("/", os.sep) + assert err == "" def test_malformed_per_file_ignores_error(tmpdir, capsys): """Test the error message for malformed `per-file-ignores`.""" - setup_cfg = '''\ + setup_cfg = """\ [flake8] per-file-ignores = incorrect/* values/* -''' - - with tmpdir.as_cwd(): - tmpdir.join('setup.cfg').write(setup_cfg) - _call_main(['.'], retv=1) - - out, err = capsys.readouterr() - assert out == '''\ +""" + expected = """\ There was a critical error during execution of Flake8: Expected `per-file-ignores` to be a mapping from file exclude patterns to ignore codes. @@ -172,50 +169,59 @@ Configured `per-file-ignores` setting: incorrect/* values/* -''' # noqa: E501 +""" # noqa: E501 + + with tmpdir.as_cwd(): + tmpdir.join("setup.cfg").write(setup_cfg) + _call_main(["."], retv=1) + + out, err = capsys.readouterr() + assert out == expected def test_tokenization_error_but_not_syntax_error(tmpdir, capsys): """Test that flake8 does not crash on tokenization errors.""" with tmpdir.as_cwd(): # this is a crash in the tokenizer, but not in the ast - tmpdir.join('t.py').write("b'foo' \\\n") - _call_main(['t.py'], retv=1) + tmpdir.join("t.py").write("b'foo' \\\n") + _call_main(["t.py"], retv=1) out, err = capsys.readouterr() - assert out == 't.py:1:1: E902 TokenError: EOF in multi-line statement\n' - assert err == '' + assert out == "t.py:1:1: E902 TokenError: EOF in multi-line statement\n" + assert err == "" def test_tokenization_error_is_a_syntax_error(tmpdir, capsys): """Test when tokenize raises a SyntaxError.""" with tmpdir.as_cwd(): - tmpdir.join('t.py').write('if True:\n pass\n pass\n') - _call_main(['t.py'], retv=1) + tmpdir.join("t.py").write("if True:\n pass\n pass\n") + _call_main(["t.py"], retv=1) out, err = capsys.readouterr() - assert out == 't.py:1:1: E902 IndentationError: unindent does not match any outer indentation level\n' # noqa: E501 - assert err == '' + expected = "t.py:1:1: E902 IndentationError: unindent does not match any outer indentation level\n" # noqa: E501 + assert out == expected + assert err == "" def test_bug_report_successful(capsys): """Test that --bug-report does not crash.""" - _call_main(['--bug-report']) + _call_main(["--bug-report"]) out, err = capsys.readouterr() assert json.loads(out) - assert err == '' + assert err == "" def test_specific_noqa_does_not_clobber_pycodestyle_noqa(tmpdir, capsys): """See https://github.com/pycqa/flake8/issues/1104.""" with tmpdir.as_cwd(): - tmpdir.join('t.py').write("test = ('ABC' == None) # noqa: E501\n") - _call_main(['t.py'], retv=1) + tmpdir.join("t.py").write("test = ('ABC' == None) # noqa: E501\n") + _call_main(["t.py"], retv=1) - out, err = capsys.readouterr() - assert out == '''\ + expected = """\ t.py:1:15: E711 comparison to None should be 'if cond is None:' -''' +""" + out, err = capsys.readouterr() + assert out == expected def test_specific_noqa_on_line_with_continuation(tmpdir, capsys): @@ -230,60 +236,64 @@ x = """ ''' with tmpdir.as_cwd(): - tmpdir.join('t.py').write(t_py_src) - _call_main(['t.py'], retv=0) + tmpdir.join("t.py").write(t_py_src) + _call_main(["t.py"], retv=0) out, err = capsys.readouterr() - assert out == err == '' + assert out == err == "" def test_physical_line_file_not_ending_in_newline(tmpdir, capsys): """See https://github.com/PyCQA/pycodestyle/issues/960.""" - t_py_src = 'def f():\n\tpass' + t_py_src = "def f():\n\tpass" with tmpdir.as_cwd(): - tmpdir.join('t.py').write(t_py_src) - _call_main(['t.py'], retv=1) + tmpdir.join("t.py").write(t_py_src) + _call_main(["t.py"], retv=1) - out, err = capsys.readouterr() - assert out == '''\ + expected = """\ t.py:2:1: W191 indentation contains tabs t.py:2:6: W292 no newline at end of file -''' +""" + out, err = capsys.readouterr() + assert out == expected def test_physical_line_file_not_ending_in_newline_trailing_ws(tmpdir, capsys): """See https://github.com/PyCQA/pycodestyle/issues/960.""" - t_py_src = 'x = 1 ' + t_py_src = "x = 1 " with tmpdir.as_cwd(): - tmpdir.join('t.py').write(t_py_src) - _call_main(['t.py'], retv=1) + tmpdir.join("t.py").write(t_py_src) + _call_main(["t.py"], retv=1) - out, err = capsys.readouterr() - assert out == '''\ + expected = """\ t.py:1:6: W291 trailing whitespace t.py:1:9: W292 no newline at end of file -''' +""" + out, err = capsys.readouterr() + assert out == expected def test_obtaining_args_from_sys_argv_when_not_explicity_provided(capsys): """Test that arguments are obtained from 'sys.argv'.""" - with mock.patch('sys.argv', ['flake8', '--help']): + with mock.patch("sys.argv", ["flake8", "--help"]): _call_main(None) out, err = capsys.readouterr() - assert out.startswith('usage: flake8 [options] file file ...\n') - assert err == '' + assert out.startswith("usage: flake8 [options] file file ...\n") + assert err == "" def test_cli_config_option_respected(tmp_path): """Test --config is used.""" config = tmp_path / "flake8.ini" - config.write_text("""\ + config.write_text( + """\ [flake8] ignore = F401 -""") +""" + ) py_file = tmp_path / "t.py" py_file.write_text("import os\n") @@ -294,10 +304,12 @@ ignore = F401 def test_cli_isolated_overrides_config_option(tmp_path): """Test --isolated overrides --config.""" config = tmp_path / "flake8.ini" - config.write_text("""\ + config.write_text( + """\ [flake8] ignore = F401 -""") +""" + ) py_file = tmp_path / "t.py" py_file.write_text("import os\n") @@ -316,13 +328,13 @@ def test_file_not_found(tmpdir, capsys): def test_output_file(tmpdir, capsys): """Ensure that --output-file is honored.""" - tmpdir.join('t.py').write('import os\n') + tmpdir.join("t.py").write("import os\n") with tmpdir.as_cwd(): - _call_main(['t.py', '--output-file=f'], retv=1) + _call_main(["t.py", "--output-file=f"], retv=1) out, err = capsys.readouterr() assert out == err == "" expected = "t.py:1:1: F401 'os' imported but unused\n" - assert tmpdir.join('f').read() == expected + assert tmpdir.join("f").read() == expected diff --git a/tests/integration/test_plugins.py b/tests/integration/test_plugins.py index 867a94e..7fff9df 100644 --- a/tests/integration/test_plugins.py +++ b/tests/integration/test_plugins.py @@ -1,15 +1,15 @@ """Integration tests for plugin loading.""" from flake8.main import application -LOCAL_PLUGIN_CONFIG = 'tests/fixtures/config_files/local-plugin.ini' -LOCAL_PLUGIN_PATH_CONFIG = 'tests/fixtures/config_files/local-plugin-path.ini' +LOCAL_PLUGIN_CONFIG = "tests/fixtures/config_files/local-plugin.ini" +LOCAL_PLUGIN_PATH_CONFIG = "tests/fixtures/config_files/local-plugin-path.ini" class ExtensionTestPlugin: """Extension test plugin.""" - name = 'ExtensionTestPlugin' - version = '1.0.0' + name = "ExtensionTestPlugin" + version = "1.0.0" def __init__(self, tree): """Construct an instance of test plugin.""" @@ -20,14 +20,14 @@ class ExtensionTestPlugin: @classmethod def add_options(cls, parser): """Register options.""" - parser.add_option('--anopt') + parser.add_option("--anopt") class ReportTestPlugin: """Report test plugin.""" - name = 'ReportTestPlugin' - version = '1.0.0' + name = "ReportTestPlugin" + version = "1.0.0" def __init__(self, tree): """Construct an instance of test plugin.""" @@ -39,28 +39,29 @@ class ReportTestPlugin: def test_enable_local_plugin_from_config(): """App can load a local plugin from config file.""" app = application.Application() - app.initialize(['flake8', '--config', LOCAL_PLUGIN_CONFIG]) + app.initialize(["flake8", "--config", LOCAL_PLUGIN_CONFIG]) assert app.check_plugins is not None - assert app.check_plugins['XE'].plugin is ExtensionTestPlugin + assert app.check_plugins["XE"].plugin is ExtensionTestPlugin assert app.formatting_plugins is not None - assert app.formatting_plugins['XR'].plugin is ReportTestPlugin + assert app.formatting_plugins["XR"].plugin is ReportTestPlugin def test_local_plugin_can_add_option(): """A local plugin can add a CLI option.""" app = application.Application() app.initialize( - ['flake8', '--config', LOCAL_PLUGIN_CONFIG, '--anopt', 'foo']) + ["flake8", "--config", LOCAL_PLUGIN_CONFIG, "--anopt", "foo"] + ) assert app.options is not None - assert app.options.anopt == 'foo' + assert app.options.anopt == "foo" def test_enable_local_plugin_at_non_installed_path(): """Can add a paths option in local-plugins config section for finding.""" app = application.Application() - app.initialize(['flake8', '--config', LOCAL_PLUGIN_PATH_CONFIG]) + app.initialize(["flake8", "--config", LOCAL_PLUGIN_PATH_CONFIG]) assert app.check_plugins is not None - assert app.check_plugins['XE'].plugin.name == 'ExtensionTestPlugin2' + assert app.check_plugins["XE"].plugin.name == "ExtensionTestPlugin2" |
