import re
+from typing import Any
from unittest.mock import patch
-from click.testing import CliRunner
import pytest
+from click.testing import CliRunner
-from tests.util import read_data, DETERMINISTIC_HEADER
+from tests.util import DETERMINISTIC_HEADER, read_data
try:
- import blackd
- from aiohttp.test_utils import AioHTTPTestCase, unittest_run_loop
from aiohttp import web
+ from aiohttp.test_utils import AioHTTPTestCase
+
+ import blackd
+except ImportError as e:
+ raise RuntimeError("Please install Black with the 'd' extra") from e
+
+try:
+ from aiohttp.test_utils import unittest_run_loop
except ImportError:
- has_blackd_deps = False
-else:
- has_blackd_deps = True
+ # unittest_run_loop is unnecessary and a no-op since aiohttp 3.8, and aiohttp 4
+ # removed it. To maintain compatibility we can make our own no-op decorator.
+ def unittest_run_loop(func: Any, *args: Any, **kwargs: Any) -> Any:
+ return func
@pytest.mark.blackd
@unittest_run_loop
async def test_blackd_pyi(self) -> None:
- source, expected = read_data("stub.pyi")
+ source, expected = read_data("miscellaneous", "stub.pyi")
response = await self.client.post(
"/", data=source, headers={blackd.PYTHON_VARIANT_HEADER: "pyi"}
)
r"(In|Out)\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
)
- source, _ = read_data("blackd_diff.py")
- expected, _ = read_data("blackd_diff.diff")
+ source, _ = read_data("miscellaneous", "blackd_diff")
+ expected, _ = read_data("miscellaneous", "blackd_diff.diff")
response = await self.client.post(
"/", data=source, headers={blackd.DIFF_HEADER: "true"}
)
self.assertEqual(response.status, 400)
+ @unittest_run_loop
+ async def test_blackd_preview(self) -> None:
+ response = await self.client.post(
+ "/", data=b'print("hello")\n', headers={blackd.PREVIEW: "true"}
+ )
+ self.assertEqual(response.status, 204)
+
@unittest_run_loop
async def test_blackd_response_black_version_header(self) -> None:
response = await self.client.post("/")