fix: allow tests to be run from (hopefully) any directory (GH-2574)
* fix: allow tests to be run from the tests/ directory * fix: try fixing windows build with MarcoGorelli's suggestion * Windows hotfix + better respect test's spirit Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
This commit is contained in:
parent
5434407af7
commit
cbf5401eff
@ -50,6 +50,7 @@
|
|||||||
DATA_DIR,
|
DATA_DIR,
|
||||||
DEFAULT_MODE,
|
DEFAULT_MODE,
|
||||||
DETERMINISTIC_HEADER,
|
DETERMINISTIC_HEADER,
|
||||||
|
PROJECT_ROOT,
|
||||||
PY36_VERSIONS,
|
PY36_VERSIONS,
|
||||||
THIS_DIR,
|
THIS_DIR,
|
||||||
BlackBaseTestCase,
|
BlackBaseTestCase,
|
||||||
@ -1512,9 +1513,11 @@ def test_code_option_config(self) -> None:
|
|||||||
"""
|
"""
|
||||||
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
|
with patch.object(black, "parse_pyproject_toml", return_value={}) as parse:
|
||||||
args = ["--code", "print"]
|
args = ["--code", "print"]
|
||||||
CliRunner().invoke(black.main, args)
|
# This is the only directory known to contain a pyproject.toml
|
||||||
|
with change_directory(PROJECT_ROOT):
|
||||||
|
CliRunner().invoke(black.main, args)
|
||||||
|
pyproject_path = Path(Path.cwd(), "pyproject.toml").resolve()
|
||||||
|
|
||||||
pyproject_path = Path(Path().cwd(), "pyproject.toml").resolve()
|
|
||||||
assert (
|
assert (
|
||||||
len(parse.mock_calls) >= 1
|
len(parse.mock_calls) >= 1
|
||||||
), "Expected config parse to be called with the current directory."
|
), "Expected config parse to be called with the current directory."
|
||||||
@ -1529,7 +1532,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:
|
||||||
with change_directory(Path("tests")):
|
with change_directory(THIS_DIR):
|
||||||
args = ["--code", "print"]
|
args = ["--code", "print"]
|
||||||
CliRunner().invoke(black.main, args)
|
CliRunner().invoke(black.main, args)
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import pathlib
|
import re
|
||||||
|
|
||||||
from click.testing import CliRunner
|
from click.testing import CliRunner
|
||||||
from black.handle_ipynb_magics import jupyter_dependencies_are_installed
|
from black.handle_ipynb_magics import jupyter_dependencies_are_installed
|
||||||
from black import (
|
from black import (
|
||||||
@ -8,11 +9,11 @@
|
|||||||
format_file_contents,
|
format_file_contents,
|
||||||
format_file_in_place,
|
format_file_in_place,
|
||||||
)
|
)
|
||||||
import os
|
|
||||||
import pytest
|
import pytest
|
||||||
from black import Mode
|
from black import Mode
|
||||||
from _pytest.monkeypatch import MonkeyPatch
|
from _pytest.monkeypatch import MonkeyPatch
|
||||||
from py.path import local
|
from py.path import local
|
||||||
|
from tests.util import DATA_DIR
|
||||||
|
|
||||||
pytestmark = pytest.mark.jupyter
|
pytestmark = pytest.mark.jupyter
|
||||||
pytest.importorskip("IPython", reason="IPython is an optional dependency")
|
pytest.importorskip("IPython", reason="IPython is an optional dependency")
|
||||||
@ -178,9 +179,7 @@ def test_empty_cell() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_entire_notebook_empty_metadata() -> None:
|
def test_entire_notebook_empty_metadata() -> None:
|
||||||
with open(
|
with open(DATA_DIR / "notebook_empty_metadata.ipynb", "rb") as fd:
|
||||||
os.path.join("tests", "data", "notebook_empty_metadata.ipynb"), "rb"
|
|
||||||
) as fd:
|
|
||||||
content_bytes = fd.read()
|
content_bytes = fd.read()
|
||||||
content = content_bytes.decode()
|
content = content_bytes.decode()
|
||||||
result = format_file_contents(content, fast=True, mode=JUPYTER_MODE)
|
result = format_file_contents(content, fast=True, mode=JUPYTER_MODE)
|
||||||
@ -217,9 +216,7 @@ def test_entire_notebook_empty_metadata() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_entire_notebook_trailing_newline() -> None:
|
def test_entire_notebook_trailing_newline() -> None:
|
||||||
with open(
|
with open(DATA_DIR / "notebook_trailing_newline.ipynb", "rb") as fd:
|
||||||
os.path.join("tests", "data", "notebook_trailing_newline.ipynb"), "rb"
|
|
||||||
) as fd:
|
|
||||||
content_bytes = fd.read()
|
content_bytes = fd.read()
|
||||||
content = content_bytes.decode()
|
content = content_bytes.decode()
|
||||||
result = format_file_contents(content, fast=True, mode=JUPYTER_MODE)
|
result = format_file_contents(content, fast=True, mode=JUPYTER_MODE)
|
||||||
@ -268,9 +265,7 @@ def test_entire_notebook_trailing_newline() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_entire_notebook_no_trailing_newline() -> None:
|
def test_entire_notebook_no_trailing_newline() -> None:
|
||||||
with open(
|
with open(DATA_DIR / "notebook_no_trailing_newline.ipynb", "rb") as fd:
|
||||||
os.path.join("tests", "data", "notebook_no_trailing_newline.ipynb"), "rb"
|
|
||||||
) as fd:
|
|
||||||
content_bytes = fd.read()
|
content_bytes = fd.read()
|
||||||
content = content_bytes.decode()
|
content = content_bytes.decode()
|
||||||
result = format_file_contents(content, fast=True, mode=JUPYTER_MODE)
|
result = format_file_contents(content, fast=True, mode=JUPYTER_MODE)
|
||||||
@ -319,9 +314,7 @@ def test_entire_notebook_no_trailing_newline() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_entire_notebook_without_changes() -> None:
|
def test_entire_notebook_without_changes() -> None:
|
||||||
with open(
|
with open(DATA_DIR / "notebook_without_changes.ipynb", "rb") as fd:
|
||||||
os.path.join("tests", "data", "notebook_without_changes.ipynb"), "rb"
|
|
||||||
) as fd:
|
|
||||||
content_bytes = fd.read()
|
content_bytes = fd.read()
|
||||||
content = content_bytes.decode()
|
content = content_bytes.decode()
|
||||||
with pytest.raises(NothingChanged):
|
with pytest.raises(NothingChanged):
|
||||||
@ -329,7 +322,7 @@ def test_entire_notebook_without_changes() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_non_python_notebook() -> None:
|
def test_non_python_notebook() -> None:
|
||||||
with open(os.path.join("tests", "data", "non_python_notebook.ipynb"), "rb") as fd:
|
with open(DATA_DIR / "non_python_notebook.ipynb", "rb") as fd:
|
||||||
content_bytes = fd.read()
|
content_bytes = fd.read()
|
||||||
content = content_bytes.decode()
|
content = content_bytes.decode()
|
||||||
with pytest.raises(NothingChanged):
|
with pytest.raises(NothingChanged):
|
||||||
@ -342,23 +335,17 @@ def test_empty_string() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_unparseable_notebook() -> None:
|
def test_unparseable_notebook() -> None:
|
||||||
msg = (
|
path = DATA_DIR / "notebook_which_cant_be_parsed.ipynb"
|
||||||
r"File 'tests[/\\]data[/\\]notebook_which_cant_be_parsed\.ipynb' "
|
msg = rf"File '{re.escape(str(path))}' cannot be parsed as valid Jupyter notebook\."
|
||||||
r"cannot be parsed as valid Jupyter notebook\."
|
|
||||||
)
|
|
||||||
with pytest.raises(ValueError, match=msg):
|
with pytest.raises(ValueError, match=msg):
|
||||||
format_file_in_place(
|
format_file_in_place(path, fast=True, mode=JUPYTER_MODE)
|
||||||
pathlib.Path("tests") / "data/notebook_which_cant_be_parsed.ipynb",
|
|
||||||
fast=True,
|
|
||||||
mode=JUPYTER_MODE,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def test_ipynb_diff_with_change() -> None:
|
def test_ipynb_diff_with_change() -> None:
|
||||||
result = runner.invoke(
|
result = runner.invoke(
|
||||||
main,
|
main,
|
||||||
[
|
[
|
||||||
os.path.join("tests", "data", "notebook_trailing_newline.ipynb"),
|
str(DATA_DIR / "notebook_trailing_newline.ipynb"),
|
||||||
"--diff",
|
"--diff",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -370,7 +357,7 @@ def test_ipynb_diff_with_no_change() -> None:
|
|||||||
result = runner.invoke(
|
result = runner.invoke(
|
||||||
main,
|
main,
|
||||||
[
|
[
|
||||||
os.path.join("tests", "data", "notebook_without_changes.ipynb"),
|
str(DATA_DIR / "notebook_without_changes.ipynb"),
|
||||||
"--diff",
|
"--diff",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -383,7 +370,7 @@ def test_cache_isnt_written_if_no_jupyter_deps_single(
|
|||||||
) -> None:
|
) -> None:
|
||||||
# Check that the cache isn't written to if Jupyter dependencies aren't installed.
|
# Check that the cache isn't written to if Jupyter dependencies aren't installed.
|
||||||
jupyter_dependencies_are_installed.cache_clear()
|
jupyter_dependencies_are_installed.cache_clear()
|
||||||
nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb")
|
nb = DATA_DIR / "notebook_trailing_newline.ipynb"
|
||||||
tmp_nb = tmpdir / "notebook.ipynb"
|
tmp_nb = tmpdir / "notebook.ipynb"
|
||||||
with open(nb) as src, open(tmp_nb, "w") as dst:
|
with open(nb) as src, open(tmp_nb, "w") as dst:
|
||||||
dst.write(src.read())
|
dst.write(src.read())
|
||||||
@ -405,7 +392,7 @@ def test_cache_isnt_written_if_no_jupyter_deps_dir(
|
|||||||
) -> None:
|
) -> None:
|
||||||
# Check that the cache isn't written to if Jupyter dependencies aren't installed.
|
# Check that the cache isn't written to if Jupyter dependencies aren't installed.
|
||||||
jupyter_dependencies_are_installed.cache_clear()
|
jupyter_dependencies_are_installed.cache_clear()
|
||||||
nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb")
|
nb = DATA_DIR / "notebook_trailing_newline.ipynb"
|
||||||
tmp_nb = tmpdir / "notebook.ipynb"
|
tmp_nb = tmpdir / "notebook.ipynb"
|
||||||
with open(nb) as src, open(tmp_nb, "w") as dst:
|
with open(nb) as src, open(tmp_nb, "w") as dst:
|
||||||
dst.write(src.read())
|
dst.write(src.read())
|
||||||
@ -423,7 +410,7 @@ def test_cache_isnt_written_if_no_jupyter_deps_dir(
|
|||||||
|
|
||||||
|
|
||||||
def test_ipynb_flag(tmpdir: local) -> None:
|
def test_ipynb_flag(tmpdir: local) -> None:
|
||||||
nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb")
|
nb = DATA_DIR / "notebook_trailing_newline.ipynb"
|
||||||
tmp_nb = tmpdir / "notebook.a_file_extension_which_is_definitely_not_ipynb"
|
tmp_nb = tmpdir / "notebook.a_file_extension_which_is_definitely_not_ipynb"
|
||||||
with open(nb) as src, open(tmp_nb, "w") as dst:
|
with open(nb) as src, open(tmp_nb, "w") as dst:
|
||||||
dst.write(src.read())
|
dst.write(src.read())
|
||||||
@ -440,11 +427,11 @@ def test_ipynb_flag(tmpdir: local) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def test_ipynb_and_pyi_flags() -> None:
|
def test_ipynb_and_pyi_flags() -> None:
|
||||||
nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb")
|
nb = DATA_DIR / "notebook_trailing_newline.ipynb"
|
||||||
result = runner.invoke(
|
result = runner.invoke(
|
||||||
main,
|
main,
|
||||||
[
|
[
|
||||||
nb,
|
str(nb),
|
||||||
"--pyi",
|
"--pyi",
|
||||||
"--ipynb",
|
"--ipynb",
|
||||||
"--diff",
|
"--diff",
|
||||||
|
Loading…
Reference in New Issue
Block a user