]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

add test configurations that don't contain python2 optional install (#2190)
authorKotlinIsland <65446343+KotlinIsland@users.noreply.github.com>
Tue, 4 May 2021 08:47:22 +0000 (18:47 +1000)
committerGitHub <noreply@github.com>
Tue, 4 May 2021 08:47:22 +0000 (10:47 +0200)
add test for negative scenario: formatting python2 code
tag python2 only tests

Co-authored-by: KotlinIsland <kotlinisland@users.noreply.github.com>
pyproject.toml
tests/test_black.py
tests/test_format.py
tox.ini

index 7f632f2839d8f3d7ed0dea8926d2051f15fe9c1d..ca75f8f92ef5a41b674ba2db74a00b16f4587707 100644 (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"]
\ No newline at end of file
index 43368d4bbe913230c9bcb59d2c6673e9aa9f098a..7d855cab3d3786b00945f637630a80041ff846f9 100644 (file)
@@ -24,6 +24,7 @@ from typing import (
     Iterator,
     TypeVar,
 )
+import pytest
 import unittest
 from unittest.mock import patch, MagicMock
 
@@ -459,6 +460,34 @@ class BlackTestCase(BlackBaseTestCase):
             )
             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 @@ class BlackTestCase(BlackBaseTestCase):
         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
index e1335aedf43411e9247a7d7f933deae4f56aa62c..78f2b558a4ff5417f6a5698445b633e1704c3bf2 100644 (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 @@ SIMPLE_CASES = [
     "function2",
     "function_trailing_comma",
     "import_spacing",
-    "numeric_literals_py2",
-    "python2",
-    "python2_unicode_literals",
     "remove_parens",
     "slices",
     "string_prefixes",
@@ -56,6 +54,12 @@ SIMPLE_CASES = [
     "tupleassign",
 ]
 
+SIMPLE_CASES_PY2 = [
+    "numeric_literals_py2",
+    "python2",
+    "python2_unicode_literals",
+]
+
 EXPERIMENTAL_STRING_PROCESSING_CASES = [
     "cantfit",
     "comments7",
@@ -86,6 +90,12 @@ SOURCES = [
 
 
 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:
diff --git a/tox.ini b/tox.ini
index affc3c9876a7c104ccf7826b62da0ae004e99485..cbb0f75d1457e4a0bd4544aae232970bd91269ff 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -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]