149 lines
4.1 KiB
Python
149 lines
4.1 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 import AssignBeforeAppend
|
|
|
|
|
|
def test_assign_before_append_basic(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
item = transform(x)
|
|
items.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 1
|
|
assert all(isinstance(r.rule, AssignBeforeAppend) for r in results)
|
|
assert results[0].range == Range(Position(2, 0))
|
|
|
|
|
|
def test_assign_before_append_no_flag_different_variable(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
item = transform(x)
|
|
items.append(other_var)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_no_flag_no_empty_list_init(index: SymbolIndex) -> None:
|
|
code = """
|
|
for x in data:
|
|
item = transform(x)
|
|
items.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_no_flag_different_list(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
item = transform(x)
|
|
other_list.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_no_flag_three_statements(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
item = transform(x)
|
|
print(item)
|
|
items.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_no_flag_one_statement(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
items.append(transform(x))
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_no_flag_list_with_initial_values(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = [1, 2, 3]
|
|
for x in data:
|
|
item = transform(x)
|
|
items.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_multiple_violations(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
item = transform(x)
|
|
items.append(item)
|
|
|
|
results = []
|
|
for y in other_data:
|
|
result = process(y)
|
|
results.append(result)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 2
|
|
assert all(isinstance(r.rule, AssignBeforeAppend) for r in results)
|
|
assert results[0].range == Range(Position(2, 0))
|
|
assert results[1].range == Range(Position(7, 0))
|
|
|
|
|
|
def test_assign_before_append_no_flag_complex_assignment(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
item, other = transform(x)
|
|
items.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_no_flag_attribute_assignment(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
for x in data:
|
|
self.item = transform(x)
|
|
items.append(self.item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|
|
|
|
|
|
def test_assign_before_append_separated_statements(index: SymbolIndex) -> None:
|
|
code = """
|
|
items = []
|
|
other_statement()
|
|
for x in data:
|
|
item = transform(x)
|
|
items.append(item)
|
|
"""
|
|
config = Config(select={AssignBeforeAppend.name})
|
|
results = lint_file(Path("test.py"), code, config, index)
|
|
assert len(results) == 0
|