add context manager to temporarily change the cwd (#2377)
Commit history before merge: * add context manager to temporarily change the cwd * Iterator, not Iterable
This commit is contained in:
parent
4dd100bff2
commit
65abd1006b
@ -44,6 +44,7 @@
|
|||||||
# Import other test classes
|
# Import other test classes
|
||||||
from tests.util import (
|
from tests.util import (
|
||||||
THIS_DIR,
|
THIS_DIR,
|
||||||
|
change_directory,
|
||||||
read_data,
|
read_data,
|
||||||
DETERMINISTIC_HEADER,
|
DETERMINISTIC_HEADER,
|
||||||
BlackBaseTestCase,
|
BlackBaseTestCase,
|
||||||
@ -2009,17 +2010,12 @@ def test_bpo_33660_workaround(self) -> None:
|
|||||||
return
|
return
|
||||||
|
|
||||||
# https://bugs.python.org/issue33660
|
# https://bugs.python.org/issue33660
|
||||||
|
|
||||||
old_cwd = Path.cwd()
|
|
||||||
try:
|
|
||||||
root = Path("/")
|
root = Path("/")
|
||||||
os.chdir(str(root))
|
with change_directory(root):
|
||||||
path = Path("workspace") / "project"
|
path = Path("workspace") / "project"
|
||||||
report = black.Report(verbose=True)
|
report = black.Report(verbose=True)
|
||||||
normalized_path = black.normalize_path_maybe_ignore(path, root, report)
|
normalized_path = black.normalize_path_maybe_ignore(path, root, report)
|
||||||
self.assertEqual(normalized_path, "workspace/project")
|
self.assertEqual(normalized_path, "workspace/project")
|
||||||
finally:
|
|
||||||
os.chdir(str(old_cwd))
|
|
||||||
|
|
||||||
def test_newline_comment_interaction(self) -> None:
|
def test_newline_comment_interaction(self) -> None:
|
||||||
source = "class A:\\\r\n# type: ignore\n pass\n"
|
source = "class A:\\\r\n# type: ignore\n pass\n"
|
||||||
@ -2170,10 +2166,6 @@ def test_code_option_config(self) -> None:
|
|||||||
Test that the code option finds the pyproject.toml in the current directory.
|
Test that the code option finds the pyproject.toml in the current directory.
|
||||||
"""
|
"""
|
||||||
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
|
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
|
||||||
# Make sure we are in the project root with the pyproject file
|
|
||||||
if not Path("tests").exists():
|
|
||||||
os.chdir("..")
|
|
||||||
|
|
||||||
args = ["--code", "print"]
|
args = ["--code", "print"]
|
||||||
CliRunner().invoke(black.main, args)
|
CliRunner().invoke(black.main, args)
|
||||||
|
|
||||||
@ -2192,10 +2184,7 @@ def test_code_option_parent_config(self) -> None:
|
|||||||
Test that the code option finds the pyproject.toml in the parent directory.
|
Test that the code option finds the pyproject.toml in the parent directory.
|
||||||
"""
|
"""
|
||||||
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
|
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
|
||||||
# Make sure we are in the tests directory
|
with change_directory(Path("tests")):
|
||||||
if Path("tests").exists():
|
|
||||||
os.chdir("tests")
|
|
||||||
|
|
||||||
args = ["--code", "print"]
|
args = ["--code", "print"]
|
||||||
CliRunner().invoke(black.main, args)
|
CliRunner().invoke(black.main, args)
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Tuple, Any
|
from typing import Iterator, List, Tuple, Any
|
||||||
|
from contextlib import contextmanager
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
import black
|
import black
|
||||||
@ -72,3 +73,14 @@ def read_data_from_file(file_name: Path) -> Tuple[str, str]:
|
|||||||
# If there's no output marker, treat the entire file as already pre-formatted.
|
# If there's no output marker, treat the entire file as already pre-formatted.
|
||||||
_output = _input[:]
|
_output = _input[:]
|
||||||
return "".join(_input).strip() + "\n", "".join(_output).strip() + "\n"
|
return "".join(_input).strip() + "\n", "".join(_output).strip() + "\n"
|
||||||
|
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def change_directory(path: Path) -> Iterator[None]:
|
||||||
|
"""Context manager to temporarily chdir to a different directory."""
|
||||||
|
previous_dir = os.getcwd()
|
||||||
|
try:
|
||||||
|
os.chdir(path)
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
os.chdir(previous_dir)
|
||||||
|
Loading…
Reference in New Issue
Block a user