def test_multiprocessing(jobs: int) -> None: """Check that multiprocessing does not create duplicates.""" # For the bug (#3584) to show up we need more than one file with issues # per process filenames = [ "special_attr_scope_lookup_crash.py", "syntax_error.py", "unused_variable.py", "wildcard.py", "wrong_import_position.py", ] reporter = testutils.GenericTestReporter() linter = PyLinter() linter.config.jobs = jobs linter.config.persistent = 0 linter.open() linter.set_reporter(reporter) try: sys.path.append(os.path.dirname(REGRTEST_DATA_DIR)) linter.check( [os.path.join(REGRTEST_DATA_DIR, fname) for fname in filenames]) finally: sys.path.pop() messages = reporter.messages assert len(messages) == len(set(messages))
def test_analyze_explicit_script(linter: PyLinter) -> None: linter.set_reporter(testutils.GenericTestReporter()) linter.check([os.path.join(DATA_DIR, "ascript")]) assert len(linter.reporter.messages) == 1 assert linter.reporter.messages[0] == Message( msg_id="C0301", symbol="line-too-long", msg="Line too long (175/100)", confidence=interfaces.Confidence( name="UNDEFINED", description="Warning without any associated confidence level.", ), location=MessageLocationTuple( abspath=os.path.join(abspath(dirname(__file__)), "ascript").replace( f"lint{os.path.sep}ascript", f"data{os.path.sep}ascript"), path=f"tests{os.path.sep}data{os.path.sep}ascript", module="data.ascript", obj="", line=2, column=0, end_line=None, end_column=None, ), )
def test_addmessage(linter): linter.set_reporter(testutils.GenericTestReporter()) linter.open() linter.set_current_module("0123") linter.add_message("C0301", line=1, args=(1, 2)) linter.add_message("line-too-long", line=2, args=(3, 4)) assert [ "C: 1: Line too long (1/2)", "C: 2: Line too long (3/4)", ] == linter.reporter.messages
def test_filename_with__init__(initialized_linter: PyLinter) -> None: # This tracks a regression where a file whose name ends in __init__.py, # such as flycheck__init__.py, would accidentally lead to linting the # entire containing directory. reporter = testutils.GenericTestReporter() linter = initialized_linter linter.open() linter.set_reporter(reporter) filepath = join(INPUT_DIR, "not__init__.py") linter.check([filepath]) messages = reporter.messages assert len(messages) == 0
def test_addmessage(linter: PyLinter) -> None: linter.set_reporter(testutils.GenericTestReporter()) linter.open() linter.set_current_module("0123") linter.add_message("C0301", line=1, args=(1, 2)) linter.add_message("line-too-long", line=2, args=(3, 4)) assert len(linter.reporter.messages) == 2 assert linter.reporter.messages[0] == Message( msg_id="C0301", symbol="line-too-long", msg="Line too long (1/2)", confidence=interfaces.Confidence( name="UNDEFINED", description="Warning without any associated confidence level.", ), location=MessageLocationTuple( abspath="0123", path="0123", module="0123", obj="", line=1, column=0, end_line=None, end_column=None, ), ) assert linter.reporter.messages[1] == Message( msg_id="C0301", symbol="line-too-long", msg="Line too long (3/4)", confidence=interfaces.Confidence( name="UNDEFINED", description="Warning without any associated confidence level.", ), location=MessageLocationTuple( abspath="0123", path="0123", module="0123", obj="", line=2, column=0, end_line=None, end_column=None, ), )
def test_addmessage_invalid(linter): linter.set_reporter(testutils.GenericTestReporter()) linter.open() linter.set_current_module("0123") with pytest.raises(InvalidMessageError) as cm: linter.add_message("line-too-long", args=(1, 2)) assert str(cm.value) == "Message C0301 must provide line, got None" with pytest.raises(InvalidMessageError) as cm: linter.add_message("line-too-long", line=2, node="fake_node", args=(1, 2)) assert ( str(cm.value) == "Message C0301 must only provide line, got line=2, node=fake_node" ) with pytest.raises(InvalidMessageError) as cm: linter.add_message("C0321") assert str(cm.value) == "Message C0321 must provide Node, got None"
def test_custom_should_analyze_file() -> None: """Check that we can write custom should_analyze_file that work even for arguments. """ package_dir = os.path.join(REGRTEST_DATA_DIR, "bad_package") wrong_file = os.path.join(package_dir, "wrong.py") for jobs in (1, 2): reporter = testutils.GenericTestReporter() linter = _CustomPyLinter() linter.config.jobs = jobs linter.config.persistent = 0 linter.open() linter.set_reporter(reporter) try: sys.path.append(os.path.dirname(package_dir)) linter.check([package_dir, wrong_file]) finally: sys.path.pop() messages = reporter.messages assert len(messages) == 1 assert "invalid syntax" in messages[0].msg
def linter(): pylinter = PyLinter(reporter=testutils.GenericTestReporter()) initialize(pylinter) return pylinter
def test_analyze_explicit_script(linter): linter.set_reporter(testutils.GenericTestReporter()) linter.check(os.path.join(DATA_DIR, "ascript")) assert ["C: 2: Line too long (175/100)"] == linter.reporter.messages
def linter(): l = PyLinter(reporter=testutils.GenericTestReporter()) initialize(l) return l