blob: 18758da476b872302847e4c360d4cc1c8d85a4f7 [file] [edit]
from __future__ import annotations
import asyncio
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
from typing import Any, Optional
import black.concurrency as concurrency
from black import Mode, WriteBack
from black.report import Report
class FakeManager:
shutdown_called: bool
def __init__(self) -> None:
self.shutdown_called = False
def Lock(self) -> object:
return object()
def shutdown(self) -> None:
self.shutdown_called = True
def test_manager_shutdown_called_for_diff(monkeypatch: Any, tmp_path: Path) -> None:
"""
schedule_formatting() creates multiprocessing.Manager() for DIFF/COLOR_DIFF
and must shut it down deterministically.
"""
fake_manager = FakeManager()
monkeypatch.setattr(concurrency, "Manager", lambda: fake_manager)
def fake_format_file_in_place(
src: Path,
fast: bool,
mode: Mode,
write_back: WriteBack,
lock: Optional[object],
) -> bool:
assert lock is not None
return False
monkeypatch.setattr(concurrency, "format_file_in_place", fake_format_file_in_place)
src = tmp_path / "a.py"
src.write_text("x=1\n", encoding="utf8")
async def run() -> None:
loop = asyncio.get_running_loop()
with ThreadPoolExecutor(max_workers=1) as executor:
await concurrency.schedule_formatting(
sources={src},
fast=False,
write_back=WriteBack.DIFF,
mode=Mode(),
report=Report(),
loop=loop,
executor=executor,
no_cache=True,
)
asyncio.run(run())
assert fake_manager.shutdown_called is True