from pathlib import Path from clint.config import Config from clint.index import SymbolIndex from clint.linter import Position, Range, lint_file from clint.rules.invalid_abstract_method import InvalidAbstractMethod def test_invalid_abstract_method(index: SymbolIndex) -> None: code = """ import abc class AbstractExample(abc.ABC): @abc.abstractmethod def bad_abstract_method_has_implementation(self) -> None: return "This should not be here" @abc.abstractmethod def bad_abstract_method_multiple_statements(self) -> None: pass ... @abc.abstractmethod def good_abstract_method_pass(self) -> None: pass @abc.abstractmethod def good_abstract_method_ellipsis(self) -> None: ... @abc.abstractmethod def good_abstract_method_docstring(self) -> None: '''This is a valid docstring''' """ config = Config(select={InvalidAbstractMethod.name}) violations = lint_file(Path("test.py"), code, config, index) assert len(violations) == 2 assert all(isinstance(v.rule, InvalidAbstractMethod) for v in violations) assert violations[0].range == Range(Position(5, 4)) assert violations[1].range == Range(Position(9, 4))