test preview cases with line-length 1 unless explicitly skipped (#4087)
* Add new flag for tests, --no-preview-line-length-1, to be used for test cases known to not work in preview mode with line-length=1. Also split out the problematic cases in three cases to separate files. Removed now redundant file which explicitly tested preview annotations with line-length=1 * mode.preview -> preview_mode, mark pep_572_remove_parens as failing with ll1
This commit is contained in:
parent
50d5756e8e
commit
e4ae213f06
3
tests/data/cases/comment_type_hint.py
Normal file
3
tests/data/cases/comment_type_hint.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# flags: --no-preview-line-length-1
|
||||||
|
# split out from comments2 as it does not work with line-length=1, losing the comment
|
||||||
|
a = "type comment with trailing space" # type: str
|
@ -155,8 +155,6 @@ def _init_host(self, parsed) -> None:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
a = "type comment with trailing space" # type: str
|
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
### SECTION COMMENT ###
|
### SECTION COMMENT ###
|
||||||
#######################
|
#######################
|
||||||
@ -335,8 +333,6 @@ def _init_host(self, parsed) -> None:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
a = "type comment with trailing space" # type: str
|
|
||||||
|
|
||||||
#######################
|
#######################
|
||||||
### SECTION COMMENT ###
|
### SECTION COMMENT ###
|
||||||
#######################
|
#######################
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
# flags: --no-preview-line-length-1
|
||||||
|
# l2 loses the comment with line-length=1 in preview mode
|
||||||
l1 = ["This list should be broken up", "into multiple lines", "because it is way too long"]
|
l1 = ["This list should be broken up", "into multiple lines", "because it is way too long"]
|
||||||
l2 = ["But this list shouldn't", "even though it also has", "way too many characters in it"] # fmt: skip
|
l2 = ["But this list shouldn't", "even though it also has", "way too many characters in it"] # fmt: skip
|
||||||
l3 = ["I have", "trailing comma", "so I should be braked",]
|
l3 = ["I have", "trailing comma", "so I should be braked",]
|
||||||
|
|
||||||
# output
|
# output
|
||||||
|
|
||||||
|
# l2 loses the comment with line-length=1 in preview mode
|
||||||
l1 = [
|
l1 = [
|
||||||
"This list should be broken up",
|
"This list should be broken up",
|
||||||
"into multiple lines",
|
"into multiple lines",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# flags: --minimum-version=3.8
|
# flags: --minimum-version=3.8 --no-preview-line-length-1
|
||||||
if (foo := 0):
|
if (foo := 0):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -125,23 +125,6 @@ def foo_square_brackets(request):
|
|||||||
func([x for x in "long line long line long line long line long line long line long line"])
|
func([x for x in "long line long line long line long line long line long line long line"])
|
||||||
func([x for x in [x for x in "long line long line long line long line long line long line long line"]])
|
func([x for x in [x for x in "long line long line long line long line long line long line long line"]])
|
||||||
|
|
||||||
func({"short line"})
|
|
||||||
func({"long line", "long long line", "long long long line", "long long long long line", "long long long long long line"})
|
|
||||||
func({{"long line", "long long line", "long long long line", "long long long long line", "long long long long long line"}})
|
|
||||||
func(("long line", "long long line", "long long long line", "long long long long line", "long long long long long line"))
|
|
||||||
func((("long line", "long long line", "long long long line", "long long long long line", "long long long long long line")))
|
|
||||||
func([["long line", "long long line", "long long long line", "long long long long line", "long long long long long line"]])
|
|
||||||
|
|
||||||
# Do not hug if the argument fits on a single line.
|
|
||||||
func({"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"})
|
|
||||||
func(("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"))
|
|
||||||
func(["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"])
|
|
||||||
func(**{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit---"})
|
|
||||||
func(*("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit----"))
|
|
||||||
array = [{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"}]
|
|
||||||
array = [("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line")]
|
|
||||||
array = [["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"]]
|
|
||||||
|
|
||||||
foooooooooooooooooooo(
|
foooooooooooooooooooo(
|
||||||
[{c: n + 1 for c in range(256)} for n in range(100)] + [{}], {size}
|
[{c: n + 1 for c in range(256)} for n in range(100)] + [{}], {size}
|
||||||
)
|
)
|
||||||
@ -151,14 +134,11 @@ def foo_square_brackets(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
nested_mapping = {"key": [{"a very long key 1": "with a very long value", "a very long key 2": "with a very long value"}]}
|
nested_mapping = {"key": [{"a very long key 1": "with a very long value", "a very long key 2": "with a very long value"}]}
|
||||||
nested_array = [[["long line", "long long line", "long long long line", "long long long long line", "long long long long long line"]]]
|
|
||||||
explicit_exploding = [[["short", "line",],],]
|
explicit_exploding = [[["short", "line",],],]
|
||||||
single_item_do_not_explode = Context({
|
single_item_do_not_explode = Context({
|
||||||
"version": get_docs_version(),
|
"version": get_docs_version(),
|
||||||
})
|
})
|
||||||
|
|
||||||
foo(*["long long long long long line", "long long long long long line", "long long long long long line"])
|
|
||||||
|
|
||||||
foo(*[str(i) for i in range(100000000000000000000000000000000000000000000000000000000000)])
|
foo(*[str(i) for i in range(100000000000000000000000000000000000000000000000000000000000)])
|
||||||
|
|
||||||
foo(
|
foo(
|
||||||
@ -310,69 +290,6 @@ def foo_square_brackets(request):
|
|||||||
]
|
]
|
||||||
])
|
])
|
||||||
|
|
||||||
func({"short line"})
|
|
||||||
func({
|
|
||||||
"long line",
|
|
||||||
"long long line",
|
|
||||||
"long long long line",
|
|
||||||
"long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
})
|
|
||||||
func({{
|
|
||||||
"long line",
|
|
||||||
"long long line",
|
|
||||||
"long long long line",
|
|
||||||
"long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
}})
|
|
||||||
func((
|
|
||||||
"long line",
|
|
||||||
"long long line",
|
|
||||||
"long long long line",
|
|
||||||
"long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
))
|
|
||||||
func(((
|
|
||||||
"long line",
|
|
||||||
"long long line",
|
|
||||||
"long long long line",
|
|
||||||
"long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
)))
|
|
||||||
func([[
|
|
||||||
"long line",
|
|
||||||
"long long line",
|
|
||||||
"long long long line",
|
|
||||||
"long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
]])
|
|
||||||
|
|
||||||
# Do not hug if the argument fits on a single line.
|
|
||||||
func(
|
|
||||||
{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"}
|
|
||||||
)
|
|
||||||
func(
|
|
||||||
("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line")
|
|
||||||
)
|
|
||||||
func(
|
|
||||||
["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"]
|
|
||||||
)
|
|
||||||
func(
|
|
||||||
**{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit---"}
|
|
||||||
)
|
|
||||||
func(
|
|
||||||
*("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit----")
|
|
||||||
)
|
|
||||||
array = [
|
|
||||||
{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"}
|
|
||||||
]
|
|
||||||
array = [
|
|
||||||
("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line")
|
|
||||||
]
|
|
||||||
array = [
|
|
||||||
["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"]
|
|
||||||
]
|
|
||||||
|
|
||||||
foooooooooooooooooooo(
|
foooooooooooooooooooo(
|
||||||
[{c: n + 1 for c in range(256)} for n in range(100)] + [{}], {size}
|
[{c: n + 1 for c in range(256)} for n in range(100)] + [{}], {size}
|
||||||
)
|
)
|
||||||
@ -387,13 +304,6 @@ def foo_square_brackets(request):
|
|||||||
"a very long key 2": "with a very long value",
|
"a very long key 2": "with a very long value",
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
nested_array = [[[
|
|
||||||
"long line",
|
|
||||||
"long long line",
|
|
||||||
"long long long line",
|
|
||||||
"long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
]]]
|
|
||||||
explicit_exploding = [
|
explicit_exploding = [
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
@ -406,12 +316,6 @@ def foo_square_brackets(request):
|
|||||||
"version": get_docs_version(),
|
"version": get_docs_version(),
|
||||||
})
|
})
|
||||||
|
|
||||||
foo(*[
|
|
||||||
"long long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
"long long long long long line",
|
|
||||||
])
|
|
||||||
|
|
||||||
foo(*[
|
foo(*[
|
||||||
str(i) for i in range(100000000000000000000000000000000000000000000000000000000000)
|
str(i) for i in range(100000000000000000000000000000000000000000000000000000000000)
|
||||||
])
|
])
|
||||||
|
@ -0,0 +1,106 @@
|
|||||||
|
# flags: --preview --no-preview-line-length-1
|
||||||
|
# split out from preview_hug_parens_with_brackes_and_square_brackets, as it produces
|
||||||
|
# different code on the second pass with line-length 1 in many cases.
|
||||||
|
# Seems to be about whether the last string in a sequence gets wrapped in parens or not.
|
||||||
|
foo(*["long long long long long line", "long long long long long line", "long long long long long line"])
|
||||||
|
func({"short line"})
|
||||||
|
func({"long line", "long long line", "long long long line", "long long long long line", "long long long long long line"})
|
||||||
|
func({{"long line", "long long line", "long long long line", "long long long long line", "long long long long long line"}})
|
||||||
|
func(("long line", "long long line", "long long long line", "long long long long line", "long long long long long line"))
|
||||||
|
func((("long line", "long long line", "long long long line", "long long long long line", "long long long long long line")))
|
||||||
|
func([["long line", "long long line", "long long long line", "long long long long line", "long long long long long line"]])
|
||||||
|
|
||||||
|
|
||||||
|
# Do not hug if the argument fits on a single line.
|
||||||
|
func({"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"})
|
||||||
|
func(("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"))
|
||||||
|
func(["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"])
|
||||||
|
func(**{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit---"})
|
||||||
|
func(*("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit----"))
|
||||||
|
array = [{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"}]
|
||||||
|
array = [("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line")]
|
||||||
|
array = [["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"]]
|
||||||
|
|
||||||
|
nested_array = [[["long line", "long long line", "long long long line", "long long long long line", "long long long long long line"]]]
|
||||||
|
|
||||||
|
# output
|
||||||
|
|
||||||
|
# split out from preview_hug_parens_with_brackes_and_square_brackets, as it produces
|
||||||
|
# different code on the second pass with line-length 1 in many cases.
|
||||||
|
# Seems to be about whether the last string in a sequence gets wrapped in parens or not.
|
||||||
|
foo(*[
|
||||||
|
"long long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
])
|
||||||
|
func({"short line"})
|
||||||
|
func({
|
||||||
|
"long line",
|
||||||
|
"long long line",
|
||||||
|
"long long long line",
|
||||||
|
"long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
})
|
||||||
|
func({{
|
||||||
|
"long line",
|
||||||
|
"long long line",
|
||||||
|
"long long long line",
|
||||||
|
"long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
}})
|
||||||
|
func((
|
||||||
|
"long line",
|
||||||
|
"long long line",
|
||||||
|
"long long long line",
|
||||||
|
"long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
))
|
||||||
|
func(((
|
||||||
|
"long line",
|
||||||
|
"long long line",
|
||||||
|
"long long long line",
|
||||||
|
"long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
)))
|
||||||
|
func([[
|
||||||
|
"long line",
|
||||||
|
"long long line",
|
||||||
|
"long long long line",
|
||||||
|
"long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
]])
|
||||||
|
|
||||||
|
|
||||||
|
# Do not hug if the argument fits on a single line.
|
||||||
|
func(
|
||||||
|
{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"}
|
||||||
|
)
|
||||||
|
func(
|
||||||
|
("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line")
|
||||||
|
)
|
||||||
|
func(
|
||||||
|
["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"]
|
||||||
|
)
|
||||||
|
func(
|
||||||
|
**{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit---"}
|
||||||
|
)
|
||||||
|
func(
|
||||||
|
*("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit----")
|
||||||
|
)
|
||||||
|
array = [
|
||||||
|
{"fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"}
|
||||||
|
]
|
||||||
|
array = [
|
||||||
|
("fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line")
|
||||||
|
]
|
||||||
|
array = [
|
||||||
|
["fit line", "fit line", "fit line", "fit line", "fit line", "fit line", "fit line"]
|
||||||
|
]
|
||||||
|
|
||||||
|
nested_array = [[[
|
||||||
|
"long line",
|
||||||
|
"long long line",
|
||||||
|
"long long long line",
|
||||||
|
"long long long long line",
|
||||||
|
"long long long long long line",
|
||||||
|
]]]
|
@ -1,9 +0,0 @@
|
|||||||
# flags: --preview --minimum-version=3.10 --line-length=1
|
|
||||||
|
|
||||||
def foo() -> tuple[int, int,]:
|
|
||||||
...
|
|
||||||
# output
|
|
||||||
def foo() -> tuple[
|
|
||||||
int,
|
|
||||||
int,
|
|
||||||
]: ...
|
|
@ -30,6 +30,7 @@ def check_file(subdir: str, filename: str, *, data: bool = True) -> None:
|
|||||||
fast=args.fast,
|
fast=args.fast,
|
||||||
minimum_version=args.minimum_version,
|
minimum_version=args.minimum_version,
|
||||||
lines=args.lines,
|
lines=args.lines,
|
||||||
|
no_preview_line_length_1=args.no_preview_line_length_1,
|
||||||
)
|
)
|
||||||
if args.minimum_version is not None:
|
if args.minimum_version is not None:
|
||||||
major, minor = args.minimum_version
|
major, minor = args.minimum_version
|
||||||
@ -42,6 +43,7 @@ def check_file(subdir: str, filename: str, *, data: bool = True) -> None:
|
|||||||
fast=args.fast,
|
fast=args.fast,
|
||||||
minimum_version=args.minimum_version,
|
minimum_version=args.minimum_version,
|
||||||
lines=args.lines,
|
lines=args.lines,
|
||||||
|
no_preview_line_length_1=args.no_preview_line_length_1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ class TestCaseArgs:
|
|||||||
fast: bool = False
|
fast: bool = False
|
||||||
minimum_version: Optional[Tuple[int, int]] = None
|
minimum_version: Optional[Tuple[int, int]] = None
|
||||||
lines: Collection[Tuple[int, int]] = ()
|
lines: Collection[Tuple[int, int]] = ()
|
||||||
|
no_preview_line_length_1: bool = False
|
||||||
|
|
||||||
|
|
||||||
def _assert_format_equal(expected: str, actual: str) -> None:
|
def _assert_format_equal(expected: str, actual: str) -> None:
|
||||||
@ -96,6 +97,7 @@ def assert_format(
|
|||||||
fast: bool = False,
|
fast: bool = False,
|
||||||
minimum_version: Optional[Tuple[int, int]] = None,
|
minimum_version: Optional[Tuple[int, int]] = None,
|
||||||
lines: Collection[Tuple[int, int]] = (),
|
lines: Collection[Tuple[int, int]] = (),
|
||||||
|
no_preview_line_length_1: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Convenience function to check that Black formats as expected.
|
"""Convenience function to check that Black formats as expected.
|
||||||
|
|
||||||
@ -124,20 +126,27 @@ def assert_format(
|
|||||||
f"Black crashed formatting this case in {text} mode."
|
f"Black crashed formatting this case in {text} mode."
|
||||||
) from e
|
) from e
|
||||||
# Similarly, setting line length to 1 is a good way to catch
|
# Similarly, setting line length to 1 is a good way to catch
|
||||||
# stability bugs. But only in non-preview mode because preview mode
|
# stability bugs. Some tests are known to be broken in preview mode with line length
|
||||||
# currently has a lot of line length 1 bugs.
|
# of 1 though, and have marked that with a flag --no-preview-line-length-1
|
||||||
|
preview_modes = [False]
|
||||||
|
if not no_preview_line_length_1:
|
||||||
|
preview_modes.append(True)
|
||||||
|
|
||||||
|
for preview_mode in preview_modes:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_assert_format_inner(
|
_assert_format_inner(
|
||||||
source,
|
source,
|
||||||
None,
|
None,
|
||||||
replace(mode, preview=False, line_length=1),
|
replace(mode, preview=preview_mode, line_length=1),
|
||||||
fast=fast,
|
fast=fast,
|
||||||
minimum_version=minimum_version,
|
minimum_version=minimum_version,
|
||||||
lines=lines,
|
lines=lines,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
text = "preview" if preview_mode else "non-preview"
|
||||||
raise FormatFailure(
|
raise FormatFailure(
|
||||||
"Black crashed formatting this case with line-length set to 1."
|
f"Black crashed formatting this case in {text} mode with line-length=1."
|
||||||
) from e
|
) from e
|
||||||
|
|
||||||
|
|
||||||
@ -246,6 +255,15 @@ def get_flags_parser() -> argparse.ArgumentParser:
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
parser.add_argument("--line-ranges", action="append")
|
parser.add_argument("--line-ranges", action="append")
|
||||||
|
parser.add_argument(
|
||||||
|
"--no-preview-line-length-1",
|
||||||
|
default=False,
|
||||||
|
action="store_true",
|
||||||
|
help=(
|
||||||
|
"Don't run in preview mode with --line-length=1, as that's known to cause a"
|
||||||
|
" crash"
|
||||||
|
),
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
@ -266,7 +284,11 @@ def parse_mode(flags_line: str) -> TestCaseArgs:
|
|||||||
else:
|
else:
|
||||||
lines = []
|
lines = []
|
||||||
return TestCaseArgs(
|
return TestCaseArgs(
|
||||||
mode=mode, fast=args.fast, minimum_version=args.minimum_version, lines=lines
|
mode=mode,
|
||||||
|
fast=args.fast,
|
||||||
|
minimum_version=args.minimum_version,
|
||||||
|
lines=lines,
|
||||||
|
no_preview_line_length_1=args.no_preview_line_length_1,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user