@pytest.mark.blackd
-class BlackDTestCase(AioHTTPTestCase): # type: ignore[misc]
+class BlackDTestCase(AioHTTPTestCase):
def test_blackd_main(self) -> None:
with patch("blackd.web.run_app"):
result = CliRunner().invoke(blackd.main, [])
@unittest_run_loop
async def test_blackd_pyi(self) -> None:
- source, expected = read_data("miscellaneous", "stub.pyi")
+ source, expected = read_data("cases", "stub.py")
response = await self.client.post(
"/", data=source, headers={blackd.PYTHON_VARIANT_HEADER: "pyi"}
)
@unittest_run_loop
async def test_blackd_diff(self) -> None:
diff_header = re.compile(
- 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"
+ 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("miscellaneous", "blackd_diff")
)
self.assertEqual(response.status, 400)
+ @unittest_run_loop
+ async def test_blackd_skip_first_source_line(self) -> None:
+ invalid_first_line = b"Header will be skipped\r\ni = [1,2,3]\nj = [1,2,3]\n"
+ expected_result = b"Header will be skipped\r\ni = [1, 2, 3]\nj = [1, 2, 3]\n"
+ response = await self.client.post("/", data=invalid_first_line)
+ self.assertEqual(response.status, 400)
+ response = await self.client.post(
+ "/",
+ data=invalid_first_line,
+ headers={blackd.SKIP_SOURCE_FIRST_LINE: "true"},
+ )
+ self.assertEqual(response.status, 200)
+ self.assertEqual(await response.read(), expected_result)
+
@unittest_run_loop
async def test_blackd_preview(self) -> None:
response = await self.client.post(
response = await self.client.post("/", headers={"Origin": "*"})
self.assertIsNotNone(response.headers.get("Access-Control-Allow-Origin"))
self.assertIsNotNone(response.headers.get("Access-Control-Expose-Headers"))
+
+ @unittest_run_loop
+ async def test_preserves_line_endings(self) -> None:
+ for data in (b"c\r\nc\r\n", b"l\nl\n"):
+ # test preserved newlines when reformatted
+ response = await self.client.post("/", data=data + b" ")
+ self.assertEqual(await response.text(), data.decode())
+ # test 204 when no change
+ response = await self.client.post("/", data=data)
+ self.assertEqual(response.status, 204)
+
+ @unittest_run_loop
+ async def test_normalizes_line_endings(self) -> None:
+ for data, expected in ((b"c\r\nc\n", "c\r\nc\r\n"), (b"l\nl\r\n", "l\nl\n")):
+ response = await self.client.post("/", data=data)
+ self.assertEqual(await response.text(), expected)
+ self.assertEqual(response.status, 200)
+
+ @unittest_run_loop
+ async def test_single_character(self) -> None:
+ response = await self.client.post("/", data="1")
+ self.assertEqual(await response.text(), "1\n")
+ self.assertEqual(response.status, 200)