50 lines
2.2 KiB
Python
50 lines
2.2 KiB
Python
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)], ["{'{'''''''''}"])
|