41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
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))
|