248 lines
4.4 KiB
Python
248 lines
4.4 KiB
Python
"""Test the black.ranges module."""
|
|
|
|
import pytest
|
|
|
|
from black.ranges import adjusted_lines, sanitized_lines
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"lines",
|
|
[[(1, 1)], [(1, 3)], [(1, 1), (3, 4)]],
|
|
)
|
|
def test_no_diff(lines: list[tuple[int, int]]) -> None:
|
|
source = """\
|
|
import re
|
|
|
|
def func():
|
|
pass
|
|
"""
|
|
assert lines == adjusted_lines(lines, source, source)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"lines",
|
|
[
|
|
[(1, 0)],
|
|
[(-8, 0)],
|
|
[(-8, 8)],
|
|
[(1, 100)],
|
|
[(2, 1)],
|
|
[(0, 8), (3, 1)],
|
|
],
|
|
)
|
|
def test_invalid_lines(lines: list[tuple[int, int]]) -> None:
|
|
original_source = """\
|
|
import re
|
|
def foo(arg):
|
|
'''This is the foo function.
|
|
|
|
This is foo function's
|
|
docstring with more descriptive texts.
|
|
'''
|
|
|
|
def func(arg1,
|
|
arg2, arg3):
|
|
pass
|
|
"""
|
|
modified_source = """\
|
|
import re
|
|
def foo(arg):
|
|
'''This is the foo function.
|
|
|
|
This is foo function's
|
|
docstring with more descriptive texts.
|
|
'''
|
|
|
|
def func(arg1, arg2, arg3):
|
|
pass
|
|
"""
|
|
assert not adjusted_lines(lines, original_source, modified_source)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"lines,adjusted",
|
|
[
|
|
(
|
|
[(1, 1)],
|
|
[(1, 1)],
|
|
),
|
|
(
|
|
[(1, 2)],
|
|
[(1, 1)],
|
|
),
|
|
(
|
|
[(1, 6)],
|
|
[(1, 2)],
|
|
),
|
|
(
|
|
[(6, 6)],
|
|
[],
|
|
),
|
|
],
|
|
)
|
|
def test_removals(
|
|
lines: list[tuple[int, int]], adjusted: list[tuple[int, int]]
|
|
) -> None:
|
|
original_source = """\
|
|
1. first line
|
|
2. second line
|
|
3. third line
|
|
4. fourth line
|
|
5. fifth line
|
|
6. sixth line
|
|
"""
|
|
modified_source = """\
|
|
2. second line
|
|
5. fifth line
|
|
"""
|
|
assert adjusted == adjusted_lines(lines, original_source, modified_source)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"lines,adjusted",
|
|
[
|
|
(
|
|
[(1, 1)],
|
|
[(2, 2)],
|
|
),
|
|
(
|
|
[(1, 2)],
|
|
[(2, 5)],
|
|
),
|
|
(
|
|
[(2, 2)],
|
|
[(5, 5)],
|
|
),
|
|
],
|
|
)
|
|
def test_additions(
|
|
lines: list[tuple[int, int]], adjusted: list[tuple[int, int]]
|
|
) -> None:
|
|
original_source = """\
|
|
1. first line
|
|
2. second line
|
|
"""
|
|
modified_source = """\
|
|
this is added
|
|
1. first line
|
|
this is added
|
|
this is added
|
|
2. second line
|
|
this is added
|
|
"""
|
|
assert adjusted == adjusted_lines(lines, original_source, modified_source)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"lines,adjusted",
|
|
[
|
|
(
|
|
[(1, 11)],
|
|
[(1, 10)],
|
|
),
|
|
(
|
|
[(1, 12)],
|
|
[(1, 11)],
|
|
),
|
|
(
|
|
[(10, 10)],
|
|
[(9, 9)],
|
|
),
|
|
([(1, 1), (9, 10)], [(1, 1), (9, 9)]),
|
|
([(9, 10), (1, 1)], [(1, 1), (9, 9)]),
|
|
],
|
|
)
|
|
def test_diffs(lines: list[tuple[int, int]], adjusted: list[tuple[int, int]]) -> None:
|
|
original_source = """\
|
|
1. import re
|
|
2. def foo(arg):
|
|
3. '''This is the foo function.
|
|
4.
|
|
5. This is foo function's
|
|
6. docstring with more descriptive texts.
|
|
7. '''
|
|
8.
|
|
9. def func(arg1,
|
|
10. arg2, arg3):
|
|
11. pass
|
|
12. # last line
|
|
"""
|
|
modified_source = """\
|
|
1. import re # changed
|
|
2. def foo(arg):
|
|
3. '''This is the foo function.
|
|
4.
|
|
5. This is foo function's
|
|
6. docstring with more descriptive texts.
|
|
7. '''
|
|
8.
|
|
9. def func(arg1, arg2, arg3):
|
|
11. pass
|
|
12. # last line changed
|
|
"""
|
|
assert adjusted == adjusted_lines(lines, original_source, modified_source)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"lines,sanitized",
|
|
[
|
|
(
|
|
[(1, 4)],
|
|
[(1, 4)],
|
|
),
|
|
(
|
|
[(2, 3)],
|
|
[(2, 3)],
|
|
),
|
|
(
|
|
[(2, 10)],
|
|
[(2, 4)],
|
|
),
|
|
(
|
|
[(0, 3)],
|
|
[(1, 3)],
|
|
),
|
|
(
|
|
[(0, 10)],
|
|
[(1, 4)],
|
|
),
|
|
(
|
|
[(-2, 3)],
|
|
[(1, 3)],
|
|
),
|
|
(
|
|
[(0, 0)],
|
|
[],
|
|
),
|
|
(
|
|
[(-2, -1)],
|
|
[],
|
|
),
|
|
(
|
|
[(-1, 0)],
|
|
[],
|
|
),
|
|
(
|
|
[(3, 1), (1, 3), (5, 6)],
|
|
[(1, 3)],
|
|
),
|
|
],
|
|
)
|
|
def test_sanitize(
|
|
lines: list[tuple[int, int]], sanitized: list[tuple[int, int]]
|
|
) -> None:
|
|
source = """\
|
|
1. import re
|
|
2. def func(arg1,
|
|
3. arg2, arg3):
|
|
4. pass
|
|
"""
|
|
assert sanitized == sanitized_lines(lines, source)
|
|
|
|
source_no_trailing_nl = """\
|
|
1. import re
|
|
2. def func(arg1,
|
|
3. arg2, arg3):
|
|
4. pass"""
|
|
assert sanitized == sanitized_lines(lines, source_no_trailing_nl)
|