X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/10d8976a79f5a7f7e5e36369a81d9e5c983332d1..10bb45c35e8e08215ad9a060aca33be91a98b864:/tests/test_black.py

diff --git a/tests/test_black.py b/tests/test_black.py
index 225ece6..759bda5 100644
--- a/tests/test_black.py
+++ b/tests/test_black.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 from functools import partial
 from io import StringIO
+import os
 from pathlib import Path
 import sys
 from typing import Any, List, Tuple
@@ -16,6 +17,7 @@ ff = partial(black.format_file_in_place, line_length=ll, fast=True)
 fs = partial(black.format_str, line_length=ll)
 THIS_FILE = Path(__file__)
 THIS_DIR = THIS_FILE.parent
+EMPTY_LINE = '# EMPTY LINE WITH WHITESPACE' + ' (this comment will be removed)'
 
 
 def dump_to_stderr(*output: str) -> str:
@@ -24,7 +26,7 @@ def dump_to_stderr(*output: str) -> str:
 
 def read_data(name: str) -> Tuple[str, str]:
     """read_data('test_name') -> 'input', 'output'"""
-    if not name.endswith('.py'):
+    if not name.endswith(('.py', '.out')):
         name += '.py'
     _input: List[str] = []
     _output: List[str] = []
@@ -32,6 +34,7 @@ def read_data(name: str) -> Tuple[str, str]:
         lines = test.readlines()
     result = _input
     for line in lines:
+        line = line.replace(EMPTY_LINE, '')
         if line.rstrip() == '# output':
             result = _output
             continue
@@ -47,7 +50,7 @@ class BlackTestCase(unittest.TestCase):
     maxDiff = None
 
     def assertFormatEqual(self, expected: str, actual: str) -> None:
-        if actual != expected:
+        if actual != expected and not os.environ.get('SKIP_AST_PRINT'):
             bdv: black.DebugVisitor[Any]
             black.out('Expected tree:', fg='green')
             try:
@@ -89,7 +92,7 @@ class BlackTestCase(unittest.TestCase):
         try:
             sys.stdin, sys.stdout = StringIO(source), StringIO()
             sys.stdin.name = '<stdin>'
-            black.format_stdin_to_stdout(line_length=ll, fast=True)
+            black.format_stdin_to_stdout(line_length=ll, fast=True, write_back=True)
             sys.stdout.seek(0)
             actual = sys.stdout.read()
         finally:
@@ -171,6 +174,30 @@ class BlackTestCase(unittest.TestCase):
         black.assert_equivalent(source, actual)
         black.assert_stable(source, actual, line_length=ll)
 
+    @patch("black.dump_to_file", dump_to_stderr)
+    def test_empty_lines(self) -> None:
+        source, expected = read_data('empty_lines')
+        actual = fs(source)
+        self.assertFormatEqual(expected, actual)
+        black.assert_equivalent(source, actual)
+        black.assert_stable(source, actual, line_length=ll)
+
+    @patch("black.dump_to_file", dump_to_stderr)
+    def test_python2(self) -> None:
+        source, expected = read_data('python2')
+        actual = fs(source)
+        self.assertFormatEqual(expected, actual)
+        # black.assert_equivalent(source, actual)
+        black.assert_stable(source, actual, line_length=ll)
+
+    @patch("black.dump_to_file", dump_to_stderr)
+    def test_fmtonoff(self) -> None:
+        source, expected = read_data('fmtonoff')
+        actual = fs(source)
+        self.assertFormatEqual(expected, actual)
+        black.assert_equivalent(source, actual)
+        black.assert_stable(source, actual, line_length=ll)
+
     def test_report(self) -> None:
         report = black.Report()
         out_lines = []
@@ -196,7 +223,10 @@ class BlackTestCase(unittest.TestCase):
             self.assertEqual(
                 unstyle(str(report)), '1 file reformatted, 1 file left unchanged.'
             )
+            self.assertEqual(report.return_code, 0)
+            report.check = True
             self.assertEqual(report.return_code, 1)
+            report.check = False
             report.failed(Path('e1'), 'boom')
             self.assertEqual(len(out_lines), 2)
             self.assertEqual(len(err_lines), 1)
@@ -237,6 +267,12 @@ class BlackTestCase(unittest.TestCase):
                 '2 files failed to reformat.',
             )
             self.assertEqual(report.return_code, 123)
+            report.check = True
+            self.assertEqual(
+                unstyle(str(report)),
+                '2 files would be reformatted, 2 files would be left unchanged, '
+                '2 files would fail to reformat.',
+            )
 
     def test_is_python36(self) -> None:
         node = black.lib2to3_parse("def f(*, arg): ...\n")
@@ -256,6 +292,30 @@ class BlackTestCase(unittest.TestCase):
         node = black.lib2to3_parse(expected)
         self.assertFalse(black.is_python36(node))
 
+    def test_debug_visitor(self) -> None:
+        source, _ = read_data('debug_visitor.py')
+        expected, _ = read_data('debug_visitor.out')
+        out_lines = []
+        err_lines = []
+
+        def out(msg: str, **kwargs: Any) -> None:
+            out_lines.append(msg)
+
+        def err(msg: str, **kwargs: Any) -> None:
+            err_lines.append(msg)
+
+        with patch("black.out", out), patch("black.err", err):
+            black.DebugVisitor.show(source)
+        actual = '\n'.join(out_lines) + '\n'
+        log_name = ''
+        if expected != actual:
+            log_name = black.dump_to_file(*out_lines)
+        self.assertEqual(
+            expected,
+            actual,
+            f"AST print out is different. Actual version dumped to {log_name}",
+        )
+
 
 if __name__ == '__main__':
     unittest.main()