+ 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")
+ self.assertFalse(black.is_python36(node))
+ node = black.lib2to3_parse("def f(*, arg,): ...\n")
+ self.assertTrue(black.is_python36(node))
+ node = black.lib2to3_parse("def f(*, arg): f'string'\n")
+ self.assertTrue(black.is_python36(node))
+ source, expected = read_data("function")
+ node = black.lib2to3_parse(source)
+ self.assertTrue(black.is_python36(node))
+ node = black.lib2to3_parse(expected)
+ self.assertTrue(black.is_python36(node))
+ source, expected = read_data("expression")
+ node = black.lib2to3_parse(source)
+ self.assertFalse(black.is_python36(node))
+ 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}",
+ )