
This PR updates an assert statement that checks the bounds of a string-slicing operation. The updated assertion provides more accurate and informative error handling by specifically checking the relative values of the indices and the string length. The original assertion was essentially checking if Python's string slicing was behaving as expected. However, it wasn't providing any guarantees or useful information about the bounds i and j themselves. The updated assertion checks that the indices used for slicing are within the bounds of the string. It will throw an AssertionError if the indices are out of bounds or if i > j, providing a more specific and informative error.
52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
from typing import List, Tuple
|
|
|
|
from black.trans import iter_fexpr_spans
|
|
|
|
|
|
def test_fexpr_spans() -> None:
|
|
def check(
|
|
string: str, expected_spans: List[Tuple[int, int]], expected_slices: List[str]
|
|
) -> None:
|
|
spans = list(iter_fexpr_spans(string))
|
|
|
|
# Checking slices isn't strictly necessary, but it's easier to verify at
|
|
# a glance than only spans
|
|
assert len(spans) == len(expected_slices)
|
|
for (i, j), slice in zip(spans, expected_slices):
|
|
assert 0 <= i <= j <= len(string)
|
|
assert string[i:j] == slice
|
|
|
|
assert spans == expected_spans
|
|
|
|
# Most of these test cases omit the leading 'f' and leading / closing quotes
|
|
# for convenience
|
|
# Some additional property-based tests can be found in
|
|
# https://github.com/psf/black/pull/2654#issuecomment-981411748
|
|
check("""{var}""", [(0, 5)], ["{var}"])
|
|
check("""f'{var}'""", [(2, 7)], ["{var}"])
|
|
check("""f'{1 + f() + 2 + "asdf"}'""", [(2, 24)], ["""{1 + f() + 2 + "asdf"}"""])
|
|
check("""text {var} text""", [(5, 10)], ["{var}"])
|
|
check("""text {{ {var} }} text""", [(8, 13)], ["{var}"])
|
|
check("""{a} {b} {c}""", [(0, 3), (4, 7), (8, 11)], ["{a}", "{b}", "{c}"])
|
|
check("""f'{a} {b} {c}'""", [(2, 5), (6, 9), (10, 13)], ["{a}", "{b}", "{c}"])
|
|
check("""{ {} }""", [(0, 6)], ["{ {} }"])
|
|
check("""{ {{}} }""", [(0, 8)], ["{ {{}} }"])
|
|
check("""{ {{{}}} }""", [(0, 10)], ["{ {{{}}} }"])
|
|
check("""{{ {{{}}} }}""", [(5, 7)], ["{}"])
|
|
check("""{{ {{{var}}} }}""", [(5, 10)], ["{var}"])
|
|
check("""{f"{0}"}""", [(0, 8)], ["""{f"{0}"}"""])
|
|
check("""{"'"}""", [(0, 5)], ["""{"'"}"""])
|
|
check("""{"{"}""", [(0, 5)], ["""{"{"}"""])
|
|
check("""{"}"}""", [(0, 5)], ["""{"}"}"""])
|
|
check("""{"{{"}""", [(0, 6)], ["""{"{{"}"""])
|
|
check("""{''' '''}""", [(0, 9)], ["""{''' '''}"""])
|
|
check("""{'''{'''}""", [(0, 9)], ["""{'''{'''}"""])
|
|
check("""{''' {'{ '''}""", [(0, 13)], ["""{''' {'{ '''}"""])
|
|
check(
|
|
'''f\'\'\'-{f"""*{f"+{f'.{x}.'}+"}*"""}-'y\\'\'\'\'''',
|
|
[(5, 33)],
|
|
['''{f"""*{f"+{f'.{x}.'}+"}*"""}'''],
|
|
)
|
|
check(r"""{}{""", [(0, 2)], ["{}"])
|
|
check("""f"{'{'''''''''}\"""", [(2, 15)], ["{'{'''''''''}"])
|