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
if expected != actual:
dump = black.dump_to_file(actual)
msg = (
black.assert_equivalent(source, actual)
black.assert_stable(source, actual, mode)
+ def test_skip_magic_trailing_comma(self) -> None:
+ source, _ = read_data("expression.py")
+ expected, _ = read_data("expression_skip_magic_trailing_comma.diff")
+ tmp_file = Path(black.dump_to_file(source))
+ diff_header = re.compile(
+ rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d "
+ r"\d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
+ )
+ try:
+ result = BlackRunner().invoke(black.main, ["-C", "--diff", str(tmp_file)])
+ self.assertEqual(result.exit_code, 0)
+ finally:
+ 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
+ if expected != actual:
+ dump = black.dump_to_file(actual)
+ msg = (
+ "Expected diff isn't equal to the actual. If you made changes to"
+ " expression.py and this is an anticipated difference, overwrite"
+ f" tests/data/expression_skip_magic_trailing_comma.diff with {dump}"
+ )
+ self.assertEqual(expected, actual, msg)
+
@patch("black.dump_to_file", dump_to_stderr)
def test_python2_print_function(self) -> None:
source, expected = read_data("python2_print_function")
fobj.write("print('hello')")
self.invokeBlack([str(src)])
cache = black.read_cache(mode)
- self.assertIn(src, cache)
+ self.assertIn(str(src), cache)
def test_cache_single_file_already_cached(self) -> None:
mode = DEFAULT_MODE
with two.open("r") as fobj:
self.assertEqual(fobj.read(), 'print("hello")\n')
cache = black.read_cache(mode)
- self.assertIn(one, cache)
- self.assertIn(two, cache)
+ self.assertIn(str(one), cache)
+ self.assertIn(str(two), cache)
def test_no_cache_when_writeback_diff(self) -> None:
mode = DEFAULT_MODE
src.touch()
black.write_cache({}, [src], mode)
cache = black.read_cache(mode)
- self.assertIn(src, cache)
- self.assertEqual(cache[src], black.get_cache_info(src))
+ self.assertIn(str(src), cache)
+ self.assertEqual(cache[str(src)], black.get_cache_info(src))
def test_filter_cached(self) -> None:
with TemporaryDirectory() as workspace:
uncached.touch()
cached.touch()
cached_but_changed.touch()
- cache = {cached: black.get_cache_info(cached), cached_but_changed: (0.0, 0)}
+ cache = {
+ str(cached): black.get_cache_info(cached),
+ str(cached_but_changed): (0.0, 0),
+ }
todo, done = black.filter_cached(
cache, {uncached, cached, cached_but_changed}
)
fobj.write('print("hello")\n')
self.invokeBlack([str(workspace)], exit_code=123)
cache = black.read_cache(mode)
- self.assertNotIn(failing, cache)
- self.assertIn(clean, cache)
+ self.assertNotIn(str(failing), cache)
+ self.assertIn(str(clean), cache)
def test_write_cache_write_fail(self) -> None:
mode = DEFAULT_MODE
path.touch()
black.write_cache({}, [path], mode)
one = black.read_cache(mode)
- self.assertIn(path, one)
+ self.assertIn(str(path), one)
two = black.read_cache(short_mode)
- self.assertNotIn(path, two)
+ self.assertNotIn(str(path), two)
def test_single_file_force_pyi(self) -> None:
pyi_mode = replace(DEFAULT_MODE, is_pyi=True)
actual = fh.read()
# verify cache with --pyi is separate
pyi_cache = black.read_cache(pyi_mode)
- self.assertIn(path, pyi_cache)
+ self.assertIn(str(path), pyi_cache)
normal_cache = black.read_cache(DEFAULT_MODE)
- self.assertNotIn(path, normal_cache)
+ self.assertNotIn(str(path), normal_cache)
self.assertFormatEqual(expected, actual)
black.assert_equivalent(contents, actual)
black.assert_stable(contents, actual, pyi_mode)
pyi_cache = black.read_cache(pyi_mode)
normal_cache = black.read_cache(reg_mode)
for path in paths:
- self.assertIn(path, pyi_cache)
- self.assertNotIn(path, normal_cache)
+ self.assertIn(str(path), pyi_cache)
+ self.assertNotIn(str(path), normal_cache)
def test_pipe_force_pyi(self) -> None:
source, expected = read_data("force_pyi")
actual = fh.read()
# verify cache with --target-version is separate
py36_cache = black.read_cache(py36_mode)
- self.assertIn(path, py36_cache)
+ self.assertIn(str(path), py36_cache)
normal_cache = black.read_cache(reg_mode)
- self.assertNotIn(path, normal_cache)
+ self.assertNotIn(str(path), normal_cache)
self.assertEqual(actual, expected)
@event_loop()
pyi_cache = black.read_cache(py36_mode)
normal_cache = black.read_cache(reg_mode)
for path in paths:
- self.assertIn(path, pyi_cache)
- self.assertNotIn(path, normal_cache)
+ self.assertIn(str(path), pyi_cache)
+ self.assertNotIn(str(path), normal_cache)
def test_pipe_force_py36(self) -> None:
source, expected = read_data("force_py36")
finally:
os.chdir(str(old_cwd))
+ def test_newline_comment_interaction(self) -> None:
+ source = "class A:\\\r\n# type: ignore\n pass\n"
+ output = black.format_str(source, mode=DEFAULT_MODE)
+ black.assert_stable(source, output, mode=DEFAULT_MODE)
+
+ def test_bpo_2142_workaround(self) -> None:
+
+ # https://bugs.python.org/issue2142
+
+ source, _ = read_data("missing_final_newline.py")
+ # read_data adds a trailing newline
+ source = source.rstrip()
+ expected, _ = read_data("missing_final_newline.diff")
+ tmp_file = Path(black.dump_to_file(source, ensure_final_newline=False))
+ diff_header = re.compile(
+ rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d "
+ r"\d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
+ )
+ try:
+ result = BlackRunner().invoke(black.main, ["--diff", str(tmp_file)])
+ self.assertEqual(result.exit_code, 0)
+ finally:
+ os.unlink(tmp_file)
+ actual = result.output
+ actual = diff_header.sub(DETERMINISTIC_HEADER, actual)
+ self.assertEqual(actual, expected)
+
with open(black.__file__, "r", encoding="utf-8") as _bf:
black_source_lines = _bf.readlines()