d0aab9212a
test release tool / test-release-tool (macOS-latest, 3.12) (push) Waiting to run
test release tool / test-release-tool (macOS-latest, 3.13) (push) Waiting to run
test release tool / test-release-tool (macOS-latest, 3.14) (push) Waiting to run
test release tool / test-release-tool (macOS-latest, 3.15) (push) Waiting to run
docker / build (linux/arm64) (push) Waiting to run
docker / push (push) Blocked by required conditions
docs / docs (windows-latest) (push) Waiting to run
test release tool / test-release-tool (windows-latest, 3.12) (push) Waiting to run
test release tool / test-release-tool (windows-latest, 3.13) (push) Waiting to run
test release tool / test-release-tool (windows-latest, 3.14) (push) Waiting to run
test release tool / test-release-tool (windows-latest, 3.15) (push) Waiting to run
test / test (macOS-latest, 3.10) (push) Waiting to run
test / test (macOS-latest, 3.11) (push) Waiting to run
test / test (macOS-latest, 3.12.10) (push) Waiting to run
test / test (macOS-latest, 3.13) (push) Waiting to run
test / test (macOS-latest, 3.14) (push) Waiting to run
test / test (macOS-latest, 3.15) (push) Waiting to run
test / test (macOS-latest, pypy3.11-v7.3.22) (push) Waiting to run
test / test (windows-11-arm, 3.11) (push) Waiting to run
test / test (windows-11-arm, 3.12.10) (push) Waiting to run
test / test (windows-11-arm, 3.13) (push) Waiting to run
test / test (windows-11-arm, 3.14) (push) Waiting to run
test / test (windows-11-arm, 3.15) (push) Waiting to run
test / test (windows-latest, 3.10) (push) Waiting to run
test / test (windows-latest, 3.11) (push) Waiting to run
test / test (windows-latest, 3.12.10) (push) Waiting to run
test / test (windows-latest, 3.13) (push) Waiting to run
test / test (windows-latest, 3.14) (push) Waiting to run
test / test (windows-latest, 3.15) (push) Waiting to run
test / test (windows-latest, pypy3.11-v7.3.22) (push) Waiting to run
test / coveralls-finish (push) Blocked by required conditions
test / uvloop (macOS-latest) (push) Waiting to run
test / uvloop (windows-11-arm) (push) Waiting to run
test / uvloop (windows-latest) (push) Waiting to run
fuzz / fuzz (3.11) (push) Failing after 1s
fuzz / fuzz (3.12) (push) Failing after 1s
build and publish / sdist + pure wheel (push) Failing after 0s
diff-shades / analysis / base / ${{ matrix.mode }} (push) Has been skipped
diff-shades / compare / ${{ matrix.mode }} (push) Waiting to run
docs / docs (ubuntu-latest) (push) Failing after 2s
fuzz / fuzz (3.10) (push) Failing after 1s
fuzz / fuzz (3.14) (push) Failing after 0s
lint and format / lint (push) Failing after 1s
build and publish / publish-mypyc (push) Waiting to run
diff-shades / configure (push) Failing after 1s
docker / build (linux/amd64) (push) Has been skipped
diff-shades / analysis / target / ${{ matrix.mode }} (push) Has been skipped
fuzz / fuzz (3.13) (push) Failing after 0s
fuzz / create-issue (push) Waiting to run
build and publish / generate wheels matrix (push) Failing after 0s
test release tool / test-release-tool (ubuntu-latest, 3.13) (push) Failing after 1s
build and publish / mypyc wheels ${{ matrix.only }} (push) Has been skipped
build and publish / publish-hatch (push) Waiting to run
test / test (ubuntu-latest, 3.10) (push) Failing after 0s
test / test (ubuntu-latest, 3.11) (push) Failing after 1s
test / test (ubuntu-latest, 3.13) (push) Failing after 0s
test / test (ubuntu-latest, pypy3.11-v7.3.22) (push) Failing after 1s
test / test (ubuntu-latest, 3.15) (push) Failing after 1s
test release tool / test-release-tool (ubuntu-latest, 3.15) (push) Failing after 0s
zizmor / zizmor (push) Failing after 0s
test release tool / test-release-tool (ubuntu-latest, 3.12) (push) Failing after 4s
test release tool / test-release-tool (ubuntu-latest, 3.14) (push) Failing after 3s
test / uvloop (ubuntu-latest) (push) Failing after 1s
test / test (ubuntu-latest, 3.14) (push) Failing after 1s
test / test (ubuntu-latest, 3.12.10) (push) Failing after 5s
100 lines
2.8 KiB
Python
100 lines
2.8 KiB
Python
import re
|
|
from collections.abc import Iterator
|
|
from dataclasses import replace
|
|
from typing import Any
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
import black
|
|
from black.mode import TargetVersion
|
|
from tests.util import (
|
|
all_data_cases,
|
|
assert_format,
|
|
dump_to_stderr,
|
|
read_data,
|
|
read_data_with_mode,
|
|
)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def patch_dump_to_file(request: Any) -> Iterator[None]:
|
|
with patch("black.dump_to_file", dump_to_stderr):
|
|
yield
|
|
|
|
|
|
def check_file(subdir: str, filename: str, *, data: bool = True) -> None:
|
|
args, source, expected = read_data_with_mode(subdir, filename, data=data)
|
|
assert_format(
|
|
source,
|
|
expected,
|
|
args.mode,
|
|
fast=args.fast,
|
|
minimum_version=args.minimum_version,
|
|
lines=args.lines,
|
|
no_preview_line_length_1=args.no_preview_line_length_1,
|
|
)
|
|
if args.minimum_version is not None:
|
|
major, minor = args.minimum_version
|
|
target_version = TargetVersion[f"PY{major}{minor}"]
|
|
mode = replace(args.mode, target_versions={target_version})
|
|
assert_format(
|
|
source,
|
|
expected,
|
|
mode,
|
|
fast=args.fast,
|
|
minimum_version=args.minimum_version,
|
|
lines=args.lines,
|
|
no_preview_line_length_1=args.no_preview_line_length_1,
|
|
)
|
|
|
|
|
|
@pytest.mark.filterwarnings("ignore:invalid escape sequence.*:DeprecationWarning")
|
|
@pytest.mark.parametrize("filename", all_data_cases("cases"))
|
|
def test_simple_format(filename: str) -> None:
|
|
check_file("cases", filename)
|
|
|
|
|
|
@pytest.mark.parametrize("filename", all_data_cases("line_ranges_formatted"))
|
|
def test_line_ranges_line_by_line(filename: str) -> None:
|
|
args, source, expected = read_data_with_mode("line_ranges_formatted", filename)
|
|
assert (
|
|
source == expected
|
|
), "Test cases in line_ranges_formatted must already be formatted."
|
|
line_count = len(source.splitlines())
|
|
for line in range(1, line_count + 1):
|
|
assert_format(
|
|
source,
|
|
expected,
|
|
args.mode,
|
|
fast=args.fast,
|
|
minimum_version=args.minimum_version,
|
|
lines=[(line, line)],
|
|
)
|
|
|
|
|
|
# =============== #
|
|
# Unusual cases
|
|
# =============== #
|
|
|
|
|
|
def test_empty() -> None:
|
|
source = expected = ""
|
|
assert_format(source, expected)
|
|
|
|
|
|
def test_patma_invalid() -> None:
|
|
source, expected = read_data("miscellaneous", "pattern_matching_invalid")
|
|
mode = black.Mode(target_versions={black.TargetVersion.PY310})
|
|
with pytest.raises(black.parsing.InvalidInput) as exc_info:
|
|
assert_format(source, expected, mode, minimum_version=(3, 10))
|
|
|
|
exc_info.match(
|
|
re.escape(
|
|
"Cannot parse for target version Python 3.10: 10:11\n"
|
|
" case a := b:\n"
|
|
" ^\n"
|
|
"ParseError: bad input"
|
|
)
|
|
)
|