[build-system]
requires = ["setuptools>=41.0", "setuptools-scm", "wheel"]
build-backend = "setuptools.build_meta"
+
+[tool.pytest.ini_options]
+markers = ['python2', "without_python2"]
\ No newline at end of file
Iterator,
TypeVar,
)
+import pytest
import unittest
from unittest.mock import patch, MagicMock
)
self.assertEqual(expected, actual, msg)
+ @pytest.mark.without_python2
+ def test_python2_should_fail_without_optional_install(self) -> None:
+ # python 3.7 and below will install typed-ast and will be able to parse Python 2
+ if sys.version_info < (3, 8):
+ return
+ source = "x = 1234l"
+ tmp_file = Path(black.dump_to_file(source))
+ try:
+ runner = BlackRunner()
+ result = runner.invoke(black.main, [str(tmp_file)])
+ self.assertEqual(result.exit_code, 123)
+ finally:
+ os.unlink(tmp_file)
+ actual = (
+ runner.stderr_bytes.decode()
+ .replace("\n", "")
+ .replace("\\n", "")
+ .replace("\\r", "")
+ .replace("\r", "")
+ )
+ msg = (
+ "The requested source code has invalid Python 3 syntax."
+ "If you are trying to format Python 2 files please reinstall Black"
+ " with the 'python2' extra: `python3 -m pip install black[python2]`."
+ )
+ self.assertIn(msg, actual)
+
+ @pytest.mark.python2
@patch("black.dump_to_file", dump_to_stderr)
def test_python2_print_function(self) -> None:
source, expected = read_data("python2_print_function")
actual = diff_header.sub(DETERMINISTIC_HEADER, actual)
self.assertEqual(actual, expected)
+ @pytest.mark.python2
def test_docstring_reformat_for_py27(self) -> None:
"""
Check that stripping trailing whitespace from Python 2 docstrings
from unittest.mock import patch
import black
+import pytest
from parameterized import parameterized
from tests.util import (
"function2",
"function_trailing_comma",
"import_spacing",
- "numeric_literals_py2",
- "python2",
- "python2_unicode_literals",
"remove_parens",
"slices",
"string_prefixes",
"tupleassign",
]
+SIMPLE_CASES_PY2 = [
+ "numeric_literals_py2",
+ "python2",
+ "python2_unicode_literals",
+]
+
EXPERIMENTAL_STRING_PROCESSING_CASES = [
"cantfit",
"comments7",
class TestSimpleFormat(BlackBaseTestCase):
+ @parameterized.expand(SIMPLE_CASES_PY2)
+ @pytest.mark.python2
+ @patch("black.dump_to_file", dump_to_stderr)
+ def test_simple_format_py2(self, filename: str) -> None:
+ self.check_file(filename, DEFAULT_MODE)
+
@parameterized.expand(SIMPLE_CASES)
@patch("black.dump_to_file", dump_to_stderr)
def test_simple_format(self, filename: str) -> None:
deps =
-r{toxinidir}/test_requirements.txt
commands =
- pip install -e .[d,python2]
+ pip install -e .[d]
coverage erase
- coverage run -m pytest tests {posargs}
+ coverage run -m pytest tests -m "not python2" {posargs}
+ pip install -e .[d,python2]
+ coverage run -m pytest tests -m "not without_python2" {posargs}
coverage report
[testenv:fuzz]