from io import BytesIO, TextIOWrapper
import os
from pathlib import Path
-import re
+import regex as re
import sys
from tempfile import TemporaryDirectory
from typing import Any, BinaryIO, Generator, List, Tuple, Iterator, TypeVar
result = runner.invoke(black.main, args)
self.assertEqual(result.exit_code, exit_code, msg=runner.stderr_bytes.decode())
+ @patch("black.dump_to_file", dump_to_stderr)
+ def checkSourceFile(self, name: str) -> None:
+ path = THIS_DIR.parent / name
+ source, expected = read_data(str(path), data=False)
+ actual = fs(source)
+ self.assertFormatEqual(expected, actual)
+ black.assert_equivalent(source, actual)
+ black.assert_stable(source, actual, black.FileMode())
+ self.assertFalse(ff(path))
+
@patch("black.dump_to_file", dump_to_stderr)
def test_empty(self) -> None:
source = expected = ""
os.unlink(tmp_file)
self.assertFormatEqual(expected, actual)
- @patch("black.dump_to_file", dump_to_stderr)
def test_self(self) -> None:
- source, expected = read_data("test_black", data=False)
- actual = fs(source)
- self.assertFormatEqual(expected, actual)
- black.assert_equivalent(source, actual)
- black.assert_stable(source, actual, black.FileMode())
- self.assertFalse(ff(THIS_FILE))
+ self.checkSourceFile("tests/test_black.py")
- @patch("black.dump_to_file", dump_to_stderr)
def test_black(self) -> None:
- source, expected = read_data("../black", data=False)
- actual = fs(source)
- self.assertFormatEqual(expected, actual)
- black.assert_equivalent(source, actual)
- black.assert_stable(source, actual, black.FileMode())
- self.assertFalse(ff(THIS_DIR / ".." / "black.py"))
+ self.checkSourceFile("black.py")
+
+ def test_pygram(self) -> None:
+ self.checkSourceFile("blib2to3/pygram.py")
+
+ def test_pytree(self) -> None:
+ self.checkSourceFile("blib2to3/pytree.py")
+
+ def test_conv(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/conv.py")
+
+ def test_driver(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/driver.py")
+
+ def test_grammar(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/grammar.py")
+
+ def test_literals(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/literals.py")
+
+ def test_parse(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/parse.py")
+
+ def test_pgen(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/pgen.py")
+
+ def test_tokenize(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/tokenize.py")
+
+ def test_token(self) -> None:
+ self.checkSourceFile("blib2to3/pgen2/token.py")
+
+ def test_setup(self) -> None:
+ self.checkSourceFile("setup.py")
def test_piping(self) -> None:
source, expected = read_data("../black", data=False)
actual = actual.rstrip() + "\n" # the diff output has a trailing space
self.assertEqual(expected, actual)
- @patch("black.dump_to_file", dump_to_stderr)
- def test_setup(self) -> None:
- source, expected = read_data("../setup", data=False)
- actual = fs(source)
- self.assertFormatEqual(expected, actual)
- black.assert_equivalent(source, actual)
- black.assert_stable(source, actual, black.FileMode())
- self.assertFalse(ff(THIS_DIR / ".." / "setup.py"))
-
@patch("black.dump_to_file", dump_to_stderr)
def test_function(self) -> None:
source, expected = read_data("function")
just_nl = "\n"
with self.assertRaises(black.NothingChanged):
black.format_file_contents(just_nl, mode=mode, fast=False)
- same = "l = [1, 2, 3]\n"
+ same = "j = [1, 2, 3]\n"
with self.assertRaises(black.NothingChanged):
black.format_file_contents(same, mode=mode, fast=False)
- different = "l = [1,2,3]"
+ different = "j = [1,2,3]"
expected = same
actual = black.format_file_contents(different, mode=mode, fast=False)
self.assertEqual(expected, actual)
with patch("black.out", out), patch("black.err", err):
with self.assertRaises(AssertionError):
- self.assertFormatEqual("l = [1, 2, 3]", "l = [1, 2, 3,]")
+ self.assertFormatEqual("j = [1, 2, 3]", "j = [1, 2, 3,]")
out_str = "".join(out_lines)
self.assertTrue("Expected tree:" in out_str)
two = black.read_cache(short_mode)
self.assertNotIn(path, two)
+ def test_tricky_unicode_symbols(self) -> None:
+ source, expected = read_data("tricky_unicode_symbols")
+ actual = fs(source)
+ self.assertFormatEqual(expected, actual)
+ black.assert_equivalent(source, actual)
+ black.assert_stable(source, actual, black.FileMode())
+
def test_single_file_force_pyi(self) -> None:
reg_mode = black.FileMode()
pyi_mode = black.FileMode(is_pyi=True)
self.assertIn(path, pyi_cache)
self.assertNotIn(path, normal_cache)
+ def test_collections(self) -> None:
+ source, expected = read_data("collections")
+ actual = fs(source)
+ self.assertFormatEqual(expected, actual)
+ black.assert_equivalent(source, actual)
+ black.assert_stable(source, actual, black.FileMode())
+
def test_pipe_force_py36(self) -> None:
source, expected = read_data("force_py36")
result = CliRunner().invoke(
@unittest_run_loop
async def test_blackd_unsupported_version(self) -> None:
response = await self.client.post(
- "/", data=b"what", headers={blackd.VERSION_HEADER: "2"}
+ "/", data=b"what", headers={blackd.PROTOCOL_VERSION_HEADER: "2"}
)
self.assertEqual(response.status, 501)
@unittest_run_loop
async def test_blackd_supported_version(self) -> None:
response = await self.client.post(
- "/", data=b"what", headers={blackd.VERSION_HEADER: "1"}
+ "/", data=b"what", headers={blackd.PROTOCOL_VERSION_HEADER: "1"}
)
self.assertEqual(response.status, 200)
response = await self.client.post(
"/", data=code, headers={blackd.PYTHON_VARIANT_HEADER: header_value}
)
- self.assertEqual(response.status, expected_status)
+ self.assertEqual(
+ response.status, expected_status, msg=await response.text()
+ )
await check("3.6", 200)
await check("py3.6", 200)
await check("3.6,3.7", 200)
await check("3.6,py3.7", 200)
+ await check("py36,py37", 200)
+ await check("36", 200)
+ await check("3.6.4", 200)
await check("2", 204)
await check("2.7", 204)
await check("py2.7", 204)
await check("3.4", 204)
await check("py3.4", 204)
+ await check("py34,py36", 204)
+ await check("34", 204)
@skip_if_exception("ClientOSError")
@unittest.skipUnless(has_blackd_deps, "blackd's dependencies are not installed")
)
self.assertEqual(response.status, 400)
+ @skip_if_exception("ClientOSError")
+ @unittest.skipUnless(has_blackd_deps, "blackd's dependencies are not installed")
+ @unittest_run_loop
+ async def test_blackd_response_black_version_header(self) -> None:
+ response = await self.client.post("/")
+ self.assertIsNotNone(response.headers.get(blackd.BLACK_VERSION_HEADER))
+
if __name__ == "__main__":
unittest.main(module="test_black")