self.assertEqual(set(), black.get_future_imports(node))
node = black.lib2to3_parse("from some.module import black\n")
self.assertEqual(set(), black.get_future_imports(node))
+ node = black.lib2to3_parse(
+ "from __future__ import unicode_literals as _unicode_literals"
+ )
+ self.assertEqual({"unicode_literals"}, black.get_future_imports(node))
+ node = black.lib2to3_parse(
+ "from __future__ import unicode_literals as _lol, print"
+ )
+ self.assertEqual({"unicode_literals", "print"}, black.get_future_imports(node))
def test_debug_visitor(self) -> None:
source, _ = read_data("debug_visitor.py")
src1 = (THIS_DIR / "data" / "string_quotes.py").resolve()
result = CliRunner().invoke(black.main, [str(src1), "--diff", "--check"])
self.assertEqual(result.exit_code, 1, result.output)
-
# Files which will not be reformatted.
src2 = (THIS_DIR / "data" / "composition.py").resolve()
result = CliRunner().invoke(black.main, [str(src2), "--diff", "--check"])
self.assertEqual(result.exit_code, 0, result.output)
-
# Multi file command.
result = CliRunner().invoke(
black.main, [str(src1), str(src2), "--diff", "--check"]
black.assert_equivalent("{}", "None")
def test_symlink_out_of_root_directory(self) -> None:
- # prepare argumens
path = MagicMock()
root = THIS_DIR
child = MagicMock()
include = re.compile(black.DEFAULT_INCLUDES)
exclude = re.compile(black.DEFAULT_EXCLUDES)
report = black.Report()
-
- # set the behavior of mock arguments
- # child should behave like a symlink which resolved path is clearly
- # outside of the root directory
+ # `child` should behave like a symlink which resolved path is clearly
+ # outside of the `root` directory.
path.iterdir.return_value = [child]
child.resolve.return_value = Path("/a/b/c")
child.is_symlink.return_value = True
-
- # call the method
- # it should not raise any error
- list(black.gen_python_files_in_dir(path, root, include, exclude, report))
-
- # check the call of the methods of the mock objects
+ try:
+ list(black.gen_python_files_in_dir(path, root, include, exclude, report))
+ except ValueError as ve:
+ self.fail("`get_python_files_in_dir()` failed: {ve}")
path.iterdir.assert_called_once()
child.resolve.assert_called_once()
child.is_symlink.assert_called_once()
-
- # set the behavior of mock arguments
- # child should behave like a strange file which resolved path is clearly
- # outside of the root directory
+ # `child` should behave like a strange file which resolved path is clearly
+ # outside of the `root` directory.
child.is_symlink.return_value = False
-
- # call the method
- # it should raise a ValueError
with self.assertRaises(ValueError):
list(black.gen_python_files_in_dir(path, root, include, exclude, report))
-
- # check the call of the methods of the mock objects
path.iterdir.assert_called()
self.assertEqual(path.iterdir.call_count, 2)
child.resolve.assert_called()
child.is_symlink.assert_called()
self.assertEqual(child.is_symlink.call_count, 2)
+ def test_shhh_click(self) -> None:
+ try:
+ from click import _unicodefun # type: ignore
+ except ModuleNotFoundError:
+ self.skipTest("Incompatible Click version")
+ if not hasattr(_unicodefun, "_verify_python3_env"):
+ self.skipTest("Incompatible Click version")
+ # First, let's see if Click is crashing with a preferred ASCII charset.
+ with patch("locale.getpreferredencoding") as gpe:
+ gpe.return_value = "ASCII"
+ with self.assertRaises(RuntimeError):
+ _unicodefun._verify_python3_env()
+ # Now, let's silence Click...
+ black.patch_click()
+ # ...and confirm it's silent.
+ with patch("locale.getpreferredencoding") as gpe:
+ gpe.return_value = "ASCII"
+ try:
+ _unicodefun._verify_python3_env()
+ except RuntimeError as re:
+ self.fail(f"`patch_click()` failed, exception still raised: {re}")
+
if __name__ == "__main__":
unittest.main(module="test_black")