add test configurations that don't contain python2 optional install (#2190)

add test for negative scenario: formatting python2 code
tag python2 only tests

Co-authored-by: KotlinIsland <kotlinisland@users.noreply.github.com>
This commit is contained in:
KotlinIsland 2021-05-04 18:47:22 +10:00 committed by GitHub
parent e42f9921e2
commit 204f76e0c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 5 deletions

View File

@ -25,3 +25,6 @@ extend-exclude = '''
[build-system]
requires = ["setuptools>=41.0", "setuptools-scm", "wheel"]
build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
markers = ['python2', "without_python2"]

View File

@ -24,6 +24,7 @@
Iterator,
TypeVar,
)
import pytest
import unittest
from unittest.mock import patch, MagicMock
@ -459,6 +460,34 @@ def test_skip_magic_trailing_comma(self) -> None:
)
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")
@ -1971,6 +2000,7 @@ def test_bpo_2142_workaround(self) -> None:
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

View File

@ -1,6 +1,7 @@
from unittest.mock import patch
import black
import pytest
from parameterized import parameterized
from tests.util import (
@ -46,9 +47,6 @@
"function2",
"function_trailing_comma",
"import_spacing",
"numeric_literals_py2",
"python2",
"python2_unicode_literals",
"remove_parens",
"slices",
"string_prefixes",
@ -56,6 +54,12 @@
"tupleassign",
]
SIMPLE_CASES_PY2 = [
"numeric_literals_py2",
"python2",
"python2_unicode_literals",
]
EXPERIMENTAL_STRING_PROCESSING_CASES = [
"cantfit",
"comments7",
@ -86,6 +90,12 @@
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:

View File

@ -7,9 +7,11 @@ skip_install = True
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]