/ dev / clint / tests / rules / test_invalid_abstract_method.py
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))