Change tests with stdin/out to exercise black.main (#307)
This commit is contained in:
parent
4ad7c9c107
commit
33baccd88e
@ -9,7 +9,7 @@
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
from typing import Any, List, Tuple, Iterator
|
from typing import Any, BinaryIO, Generator, List, Tuple, Iterator
|
||||||
import unittest
|
import unittest
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
@ -78,6 +78,26 @@ def event_loop(close: bool) -> Iterator[None]:
|
|||||||
loop.close()
|
loop.close()
|
||||||
|
|
||||||
|
|
||||||
|
class BlackRunner(CliRunner):
|
||||||
|
"""Modify CliRunner so that stderr is not merged with stdout.
|
||||||
|
|
||||||
|
This is a hack that can be removed once we depend on Click 7.x"""
|
||||||
|
|
||||||
|
def __init__(self, stderrbuf: BinaryIO) -> None:
|
||||||
|
self.stderrbuf = stderrbuf
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def isolation(self, *args: Any, **kwargs: Any) -> Generator[BinaryIO, None, None]:
|
||||||
|
with super().isolation(*args, **kwargs) as output:
|
||||||
|
try:
|
||||||
|
hold_stderr = sys.stderr
|
||||||
|
sys.stderr = TextIOWrapper(self.stderrbuf, encoding=self.charset)
|
||||||
|
yield output
|
||||||
|
finally:
|
||||||
|
sys.stderr = hold_stderr
|
||||||
|
|
||||||
|
|
||||||
class BlackTestCase(unittest.TestCase):
|
class BlackTestCase(unittest.TestCase):
|
||||||
maxDiff = None
|
maxDiff = None
|
||||||
|
|
||||||
@ -139,21 +159,14 @@ def test_black(self) -> None:
|
|||||||
|
|
||||||
def test_piping(self) -> None:
|
def test_piping(self) -> None:
|
||||||
source, expected = read_data("../black")
|
source, expected = read_data("../black")
|
||||||
hold_stdin, hold_stdout = sys.stdin, sys.stdout
|
stderrbuf = BytesIO()
|
||||||
try:
|
result = BlackRunner(stderrbuf).invoke(
|
||||||
sys.stdin = TextIOWrapper(BytesIO(source.encode("utf8")), encoding="utf8")
|
black.main, ["-", "--fast", f"--line-length={ll}"], input=source
|
||||||
sys.stdout = TextIOWrapper(BytesIO(), encoding="utf8")
|
)
|
||||||
sys.stdin.buffer.name = "<stdin>" # type: ignore
|
self.assertEqual(result.exit_code, 0)
|
||||||
black.format_stdin_to_stdout(
|
self.assertFormatEqual(expected, result.output)
|
||||||
line_length=ll, fast=True, write_back=black.WriteBack.YES
|
black.assert_equivalent(source, result.output)
|
||||||
)
|
black.assert_stable(source, result.output, line_length=ll)
|
||||||
sys.stdout.seek(0)
|
|
||||||
actual = sys.stdout.read()
|
|
||||||
finally:
|
|
||||||
sys.stdin, sys.stdout = hold_stdin, hold_stdout
|
|
||||||
self.assertFormatEqual(expected, actual)
|
|
||||||
black.assert_equivalent(source, actual)
|
|
||||||
black.assert_stable(source, actual, line_length=ll)
|
|
||||||
|
|
||||||
def test_piping_diff(self) -> None:
|
def test_piping_diff(self) -> None:
|
||||||
diff_header = re.compile(
|
diff_header = re.compile(
|
||||||
@ -162,18 +175,12 @@ def test_piping_diff(self) -> None:
|
|||||||
)
|
)
|
||||||
source, _ = read_data("expression.py")
|
source, _ = read_data("expression.py")
|
||||||
expected, _ = read_data("expression.diff")
|
expected, _ = read_data("expression.diff")
|
||||||
hold_stdin, hold_stdout = sys.stdin, sys.stdout
|
stderrbuf = BytesIO()
|
||||||
try:
|
result = BlackRunner(stderrbuf).invoke(
|
||||||
sys.stdin = TextIOWrapper(BytesIO(source.encode("utf8")), encoding="utf8")
|
black.main, ["-", "--fast", f"--line-length={ll}", "--diff"], input=source
|
||||||
sys.stdout = TextIOWrapper(BytesIO(), encoding="utf8")
|
)
|
||||||
black.format_stdin_to_stdout(
|
self.assertEqual(result.exit_code, 0)
|
||||||
line_length=ll, fast=True, write_back=black.WriteBack.DIFF
|
actual = diff_header.sub("[Deterministic header]", result.output)
|
||||||
)
|
|
||||||
sys.stdout.seek(0)
|
|
||||||
actual = sys.stdout.read()
|
|
||||||
actual = diff_header.sub("[Deterministic header]", actual)
|
|
||||||
finally:
|
|
||||||
sys.stdin, sys.stdout = hold_stdin, hold_stdout
|
|
||||||
actual = actual.rstrip() + "\n" # the diff output has a trailing space
|
actual = actual.rstrip() + "\n" # the diff output has a trailing space
|
||||||
self.assertEqual(expected, actual)
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
@ -232,16 +239,16 @@ def test_expression_diff(self) -> None:
|
|||||||
rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d "
|
rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d "
|
||||||
rf"\d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
|
rf"\d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
|
||||||
)
|
)
|
||||||
hold_stdout = sys.stdout
|
stderrbuf = BytesIO()
|
||||||
try:
|
try:
|
||||||
sys.stdout = TextIOWrapper(BytesIO(), encoding="utf8")
|
result = BlackRunner(stderrbuf).invoke(
|
||||||
self.assertTrue(ff(tmp_file, write_back=black.WriteBack.DIFF))
|
black.main, ["--diff", str(tmp_file)]
|
||||||
sys.stdout.seek(0)
|
)
|
||||||
actual = sys.stdout.read()
|
self.assertEqual(result.exit_code, 0)
|
||||||
actual = diff_header.sub("[Deterministic header]", actual)
|
|
||||||
finally:
|
finally:
|
||||||
sys.stdout = hold_stdout
|
|
||||||
os.unlink(tmp_file)
|
os.unlink(tmp_file)
|
||||||
|
actual = result.output
|
||||||
|
actual = diff_header.sub("[Deterministic header]", actual)
|
||||||
actual = actual.rstrip() + "\n" # the diff output has a trailing space
|
actual = actual.rstrip() + "\n" # the diff output has a trailing space
|
||||||
if expected != actual:
|
if expected != actual:
|
||||||
dump = black.dump_to_file(actual)
|
dump = black.dump_to_file(actual)
|
||||||
@ -1150,6 +1157,10 @@ def test_preserves_line_endings(self) -> None:
|
|||||||
if nl == "\n":
|
if nl == "\n":
|
||||||
self.assertNotIn(b"\r\n", updated_contents) # type: ignore
|
self.assertNotIn(b"\r\n", updated_contents) # type: ignore
|
||||||
|
|
||||||
|
def test_assert_equivalent_different_asts(self) -> None:
|
||||||
|
with self.assertRaises(AssertionError):
|
||||||
|
black.assert_equivalent("{}", "None")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user