X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/39b55f787cff41ef9726b256cfdbedefe6d5c716..8c22d232b56104376a12d1e68eaf216d04979830:/tests/test_ipynb.py?ds=inline diff --git a/tests/test_ipynb.py b/tests/test_ipynb.py index 12f176c..fe8d67a 100644 --- a/tests/test_ipynb.py +++ b/tests/test_ipynb.py @@ -1,4 +1,6 @@ import pathlib +import re + from click.testing import CliRunner from black.handle_ipynb_magics import jupyter_dependencies_are_installed from black import ( @@ -8,11 +10,10 @@ from black import ( format_file_contents, format_file_in_place, ) -import os import pytest from black import Mode from _pytest.monkeypatch import MonkeyPatch -from py.path import local +from tests.util import DATA_DIR pytestmark = pytest.mark.jupyter pytest.importorskip("IPython", reason="IPython is an optional dependency") @@ -89,6 +90,10 @@ def test_cell_magic_noop() -> None: id="Line magic with argument", ), pytest.param("%time\n'foo'", '%time\n"foo"', id="Line magic without argument"), + pytest.param( + "env = %env var", "env = %env var", id="Assignment to environment variable" + ), + pytest.param("env = %env", "env = %env", id="Assignment to magic"), ), ) def test_magic(src: str, expected: str) -> None: @@ -101,6 +106,7 @@ def test_magic(src: str, expected: str) -> None: ( "%%bash\n2+2", "%%html --isolated\n2+2", + "%%writefile e.txt\n meh\n meh", ), ) def test_non_python_magics(src: str) -> None: @@ -127,9 +133,9 @@ def test_magic_noop() -> None: def test_cell_magic_with_magic() -> None: - src = "%%t -n1\nls =!ls" + src = "%%timeit -n1\nls =!ls" result = format_cell(src, fast=True, mode=JUPYTER_MODE) - expected = "%%t -n1\nls = !ls" + expected = "%%timeit -n1\nls = !ls" assert result == expected @@ -178,9 +184,7 @@ def test_empty_cell() -> None: def test_entire_notebook_empty_metadata() -> None: - with open( - os.path.join("tests", "data", "notebook_empty_metadata.ipynb"), "rb" - ) as fd: + with open(DATA_DIR / "notebook_empty_metadata.ipynb", "rb") as fd: content_bytes = fd.read() content = content_bytes.decode() result = format_file_contents(content, fast=True, mode=JUPYTER_MODE) @@ -217,9 +221,7 @@ def test_entire_notebook_empty_metadata() -> None: def test_entire_notebook_trailing_newline() -> None: - with open( - os.path.join("tests", "data", "notebook_trailing_newline.ipynb"), "rb" - ) as fd: + with open(DATA_DIR / "notebook_trailing_newline.ipynb", "rb") as fd: content_bytes = fd.read() content = content_bytes.decode() result = format_file_contents(content, fast=True, mode=JUPYTER_MODE) @@ -268,9 +270,7 @@ def test_entire_notebook_trailing_newline() -> None: def test_entire_notebook_no_trailing_newline() -> None: - with open( - os.path.join("tests", "data", "notebook_no_trailing_newline.ipynb"), "rb" - ) as fd: + with open(DATA_DIR / "notebook_no_trailing_newline.ipynb", "rb") as fd: content_bytes = fd.read() content = content_bytes.decode() result = format_file_contents(content, fast=True, mode=JUPYTER_MODE) @@ -319,9 +319,7 @@ def test_entire_notebook_no_trailing_newline() -> None: def test_entire_notebook_without_changes() -> None: - with open( - os.path.join("tests", "data", "notebook_without_changes.ipynb"), "rb" - ) as fd: + with open(DATA_DIR / "notebook_without_changes.ipynb", "rb") as fd: content_bytes = fd.read() content = content_bytes.decode() with pytest.raises(NothingChanged): @@ -329,7 +327,7 @@ def test_entire_notebook_without_changes() -> 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 = content_bytes.decode() with pytest.raises(NothingChanged): @@ -342,23 +340,17 @@ def test_empty_string() -> None: def test_unparseable_notebook() -> None: - msg = ( - r"File 'tests[/\\]data[/\\]notebook_which_cant_be_parsed\.ipynb' " - r"cannot be parsed as valid Jupyter notebook\." - ) + path = DATA_DIR / "notebook_which_cant_be_parsed.ipynb" + msg = rf"File '{re.escape(str(path))}' cannot be parsed as valid Jupyter notebook\." with pytest.raises(ValueError, match=msg): - format_file_in_place( - pathlib.Path("tests") / "data/notebook_which_cant_be_parsed.ipynb", - fast=True, - mode=JUPYTER_MODE, - ) + format_file_in_place(path, fast=True, mode=JUPYTER_MODE) def test_ipynb_diff_with_change() -> None: result = runner.invoke( main, [ - os.path.join("tests", "data", "notebook_trailing_newline.ipynb"), + str(DATA_DIR / "notebook_trailing_newline.ipynb"), "--diff", ], ) @@ -370,7 +362,7 @@ def test_ipynb_diff_with_no_change() -> None: result = runner.invoke( main, [ - os.path.join("tests", "data", "notebook_without_changes.ipynb"), + str(DATA_DIR / "notebook_without_changes.ipynb"), "--diff", ], ) @@ -379,52 +371,52 @@ def test_ipynb_diff_with_no_change() -> None: def test_cache_isnt_written_if_no_jupyter_deps_single( - monkeypatch: MonkeyPatch, tmpdir: local + monkeypatch: MonkeyPatch, tmp_path: pathlib.Path ) -> None: # Check that the cache isn't written to if Jupyter dependencies aren't installed. jupyter_dependencies_are_installed.cache_clear() - nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb") - tmp_nb = tmpdir / "notebook.ipynb" + nb = DATA_DIR / "notebook_trailing_newline.ipynb" + tmp_nb = tmp_path / "notebook.ipynb" with open(nb) as src, open(tmp_nb, "w") as dst: dst.write(src.read()) monkeypatch.setattr( "black.jupyter_dependencies_are_installed", lambda verbose, quiet: False ) - result = runner.invoke(main, [str(tmpdir / "notebook.ipynb")]) + result = runner.invoke(main, [str(tmp_path / "notebook.ipynb")]) assert "No Python files are present to be formatted. Nothing to do" in result.output jupyter_dependencies_are_installed.cache_clear() monkeypatch.setattr( "black.jupyter_dependencies_are_installed", lambda verbose, quiet: True ) - result = runner.invoke(main, [str(tmpdir / "notebook.ipynb")]) + result = runner.invoke(main, [str(tmp_path / "notebook.ipynb")]) assert "reformatted" in result.output def test_cache_isnt_written_if_no_jupyter_deps_dir( - monkeypatch: MonkeyPatch, tmpdir: local + monkeypatch: MonkeyPatch, tmp_path: pathlib.Path ) -> None: # Check that the cache isn't written to if Jupyter dependencies aren't installed. jupyter_dependencies_are_installed.cache_clear() - nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb") - tmp_nb = tmpdir / "notebook.ipynb" + nb = DATA_DIR / "notebook_trailing_newline.ipynb" + tmp_nb = tmp_path / "notebook.ipynb" with open(nb) as src, open(tmp_nb, "w") as dst: dst.write(src.read()) monkeypatch.setattr( "black.files.jupyter_dependencies_are_installed", lambda verbose, quiet: False ) - result = runner.invoke(main, [str(tmpdir)]) + result = runner.invoke(main, [str(tmp_path)]) assert "No Python files are present to be formatted. Nothing to do" in result.output jupyter_dependencies_are_installed.cache_clear() monkeypatch.setattr( "black.files.jupyter_dependencies_are_installed", lambda verbose, quiet: True ) - result = runner.invoke(main, [str(tmpdir)]) + result = runner.invoke(main, [str(tmp_path)]) assert "reformatted" in result.output -def test_ipynb_flag(tmpdir: local) -> None: - nb = os.path.join("tests", "data", "notebook_trailing_newline.ipynb") - tmp_nb = tmpdir / "notebook.a_file_extension_which_is_definitely_not_ipynb" +def test_ipynb_flag(tmp_path: pathlib.Path) -> None: + nb = DATA_DIR / "notebook_trailing_newline.ipynb" + tmp_nb = tmp_path / "notebook.a_file_extension_which_is_definitely_not_ipynb" with open(nb) as src, open(tmp_nb, "w") as dst: dst.write(src.read()) result = runner.invoke( @@ -440,11 +432,11 @@ def test_ipynb_flag(tmpdir: local) -> 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( main, [ - nb, + str(nb), "--pyi", "--ipynb", "--diff",