Skip to content

Commit

Permalink
add context manager to temporarily change the cwd
Browse files Browse the repository at this point in the history
  • Loading branch information
JelleZijlstra committed Jul 17, 2021
1 parent e3000ac commit 4cc78c6
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 28 deletions.
43 changes: 16 additions & 27 deletions tests/test_black.py
Expand Up @@ -44,6 +44,7 @@
# Import other test classes
from tests.util import (
THIS_DIR,
change_directory,
read_data,
DETERMINISTIC_HEADER,
BlackBaseTestCase,
Expand Down Expand Up @@ -2009,17 +2010,12 @@ def test_bpo_33660_workaround(self) -> None:
return

# https://bugs.python.org/issue33660

old_cwd = Path.cwd()
try:
root = Path("/")
os.chdir(str(root))
root = Path("/")
with change_directory(root):
path = Path("workspace") / "project"
report = black.Report(verbose=True)
normalized_path = black.normalize_path_maybe_ignore(path, root, report)
self.assertEqual(normalized_path, "workspace/project")
finally:
os.chdir(str(old_cwd))

def test_newline_comment_interaction(self) -> None:
source = "class A:\\\r\n# type: ignore\n pass\n"
Expand Down Expand Up @@ -2170,10 +2166,6 @@ def test_code_option_config(self) -> None:
Test that the code option finds the pyproject.toml in the current directory.
"""
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"]
CliRunner().invoke(black.main, args)

Expand All @@ -2192,22 +2184,19 @@ def test_code_option_parent_config(self) -> None:
Test that the code option finds the pyproject.toml in the parent directory.
"""
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
# Make sure we are in the tests directory
if Path("tests").exists():
os.chdir("tests")

args = ["--code", "print"]
CliRunner().invoke(black.main, args)

pyproject_path = Path(Path().cwd().parent, "pyproject.toml").resolve()
assert (
len(parse.mock_calls) >= 1
), "Expected config parse to be called with the current directory."

_, call_args, _ = parse.mock_calls[0]
assert (
call_args[0].lower() == str(pyproject_path).lower()
), "Incorrect config loaded."
with change_directory(Path("tests")):
args = ["--code", "print"]
CliRunner().invoke(black.main, args)

pyproject_path = Path(Path().cwd().parent, "pyproject.toml").resolve()
assert (
len(parse.mock_calls) >= 1
), "Expected config parse to be called with the current directory."

_, call_args, _ = parse.mock_calls[0]
assert (
call_args[0].lower() == str(pyproject_path).lower()
), "Incorrect config loaded."


with open(black.__file__, "r", encoding="utf-8") as _bf:
Expand Down
14 changes: 13 additions & 1 deletion tests/util.py
@@ -1,7 +1,8 @@
import os
import unittest
from pathlib import Path
from typing import List, Tuple, Any
from typing import Iterable, List, Tuple, Any
from contextlib import contextmanager
from functools import partial

import black
Expand Down Expand Up @@ -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.
_output = _input[:]
return "".join(_input).strip() + "\n", "".join(_output).strip() + "\n"


@contextmanager
def change_directory(path: Path) -> Iterable[None]:
"""Context manager to temporarily chdir to a different directory."""
previous_dir = os.getcwd()
try:
os.chdir(path)
yield
finally:
os.chdir(previous_dir)

0 comments on commit 4cc78c6

Please sign in to comment.