mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-06 13:06:53 +00:00
108 lines
3.1 KiB
Python
108 lines
3.1 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import importlib.metadata
|
|
|
|
import pytest
|
|
|
|
from flake8.formatting import default
|
|
from flake8.plugins import finder
|
|
from flake8.plugins import reporter
|
|
from flake8.violation import Violation
|
|
|
|
|
|
def _opts(**kwargs):
|
|
kwargs.setdefault("quiet", 0),
|
|
kwargs.setdefault("color", "never")
|
|
kwargs.setdefault("output_file", None)
|
|
return argparse.Namespace(**kwargs)
|
|
|
|
|
|
@pytest.fixture
|
|
def violation():
|
|
return Violation(
|
|
code="E501",
|
|
filename="test/test1.py",
|
|
line_number=1,
|
|
column_number=2,
|
|
text="line too long (124 > 79 characters)",
|
|
physical_line=None,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def reporters():
|
|
def _plugin(name, cls):
|
|
return finder.LoadedPlugin(
|
|
finder.Plugin(
|
|
"flake8",
|
|
"123",
|
|
importlib.metadata.EntryPoint(
|
|
name, f"{cls.__module__}:{cls.__name__}", "flake8.report"
|
|
),
|
|
),
|
|
cls,
|
|
{"options": True},
|
|
)
|
|
|
|
return {
|
|
"default": _plugin("default", default.Default),
|
|
"pylint": _plugin("pylint", default.Pylint),
|
|
"github": _plugin("github", default.GitHub),
|
|
"quiet-filename": _plugin("quiet-filename", default.FilenameOnly),
|
|
"quiet-nothing": _plugin("quiet-nothing", default.Nothing),
|
|
}
|
|
|
|
|
|
def test_make_formatter_default(reporters):
|
|
ret = reporter.make(reporters, _opts(format="default"))
|
|
assert isinstance(ret, default.Default)
|
|
assert ret.error_format == default.Default.error_format
|
|
|
|
|
|
def test_make_formatter_quiet_filename(reporters):
|
|
ret = reporter.make(reporters, _opts(format="default", quiet=1))
|
|
assert isinstance(ret, default.FilenameOnly)
|
|
|
|
|
|
@pytest.mark.parametrize("quiet", (2, 3))
|
|
def test_make_formatter_very_quiet(reporters, quiet):
|
|
ret = reporter.make(reporters, _opts(format="default", quiet=quiet))
|
|
assert isinstance(ret, default.Nothing)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"format_input, expected_formatter_class, error_str",
|
|
[
|
|
(
|
|
"pylint",
|
|
default.Pylint,
|
|
"test/test1.py:1: [E501] line too long (124 > 79 characters)",
|
|
),
|
|
(
|
|
"github",
|
|
default.GitHub,
|
|
"::error title=Flake8 E501,file=test/test1.py,line=1,col=2,endLine=1,endColumn=2::E501 line too long (124 > 79 characters)", # noqa: E501
|
|
),
|
|
],
|
|
)
|
|
def test_make_formatter_custom(
|
|
reporters, violation, format_input, expected_formatter_class, error_str
|
|
):
|
|
ret = reporter.make(reporters, _opts(format=format_input))
|
|
assert isinstance(ret, expected_formatter_class)
|
|
assert ret.format(violation) == error_str
|
|
|
|
|
|
def test_make_formatter_format_string(reporters, caplog):
|
|
ret = reporter.make(reporters, _opts(format="hi %(code)s"))
|
|
assert isinstance(ret, default.Default)
|
|
assert ret.error_format == "hi %(code)s"
|
|
|
|
assert caplog.record_tuples == [
|
|
(
|
|
"flake8.plugins.reporter",
|
|
30,
|
|
"'hi %(code)s' is an unknown formatter. Falling back to default.",
|
|
)
|
|
]
|