test_invalid_abstract_method.py
1 from pathlib import Path 2 3 from clint.config import Config 4 from clint.index import SymbolIndex 5 from clint.linter import Position, Range, lint_file 6 from clint.rules.invalid_abstract_method import InvalidAbstractMethod 7 8 9 def test_invalid_abstract_method(index: SymbolIndex) -> None: 10 code = """ 11 import abc 12 13 class AbstractExample(abc.ABC): 14 @abc.abstractmethod 15 def bad_abstract_method_has_implementation(self) -> None: 16 return "This should not be here" 17 18 @abc.abstractmethod 19 def bad_abstract_method_multiple_statements(self) -> None: 20 pass 21 ... 22 23 @abc.abstractmethod 24 def good_abstract_method_pass(self) -> None: 25 pass 26 27 @abc.abstractmethod 28 def good_abstract_method_ellipsis(self) -> None: 29 ... 30 31 @abc.abstractmethod 32 def good_abstract_method_docstring(self) -> None: 33 '''This is a valid docstring''' 34 """ 35 config = Config(select={InvalidAbstractMethod.name}) 36 violations = lint_file(Path("test.py"), code, config, index) 37 assert len(violations) == 2 38 assert all(isinstance(v.rule, InvalidAbstractMethod) for v in violations) 39 assert violations[0].range == Range(Position(5, 4)) 40 assert violations[1].range == Range(Position(9, 4))