PyCQA / isort

A Python utility / library to sort imports.
https://pycqa.github.io/isort/
MIT License
6.49k stars 580 forks source link

[self tests] test_black_pyi_file fails with black 24.2.0 #2233

Open stanislavlevin opened 8 months ago

stanislavlevin commented 8 months ago
_____________________________ test_black_pyi_file ______________________________

    def test_black_pyi_file():
        """Test consistent code formatting between isort and black for `.pyi` files.

        black only allows no more than two consecutive blank lines in a `.pyi` file.
        """

>       black_test(
            """# comment     

    import math

    from typing import Sequence
    import numpy as np

    def add(a: np.ndarray, b: np.ndarray) -> np.ndarray:
        ...

    def sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:
        ...
    """,
            """# comment

    import math
    from typing import Sequence

    import numpy as np

    def add(a: np.ndarray, b: np.ndarray) -> np.ndarray:
        ...

    def sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:
        ...
    """,
            is_pyi=False,
            lines_before_imports=2,
            lines_after_imports=2,
        )
tests/unit/profiles/test_black.py:385: 

code = '# comment\n\n\nimport math\n\nfrom typing import Sequence\nimport numpy as np\n\n\ndef add(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n\n\ndef sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n'
expected_output = '# comment\n\n\nimport math\nfrom typing import Sequence\n\nimport numpy as np\n\n\ndef add(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n\n\ndef sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n'
is_pyi = False
config_kwargs = {'extension': None, 'lines_after_imports': 2, 'lines_before_imports': 2, 'profile': 'black'}
output = '# comment\n\n\nimport math\nfrom typing import Sequence\n\nimport numpy as np\n\n\ndef add(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n\n\ndef sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n'
@py_assert3 = None, @py_assert7 = None, @py_assert1 = False

    def black_test(code: str, expected_output: str = "", *, is_pyi: bool = False, **config_kwargs):
        """Tests that the given code:
        - Behaves the same when formatted multiple times with isort.
        - Agrees with black formatting.
        - Matches the desired output or itself if none is provided.
        """
        expected_output = expected_output or code
        config_kwargs = {
            "extension": "pyi" if is_pyi else None,
            "profile": "black",
            **config_kwargs,
        }

        # output should stay consistent over multiple runs
        output = isort.code(code, **config_kwargs)
        assert output == isort.code(code, **config_kwargs)

        # output should agree with black
        black_output = black_format(output, is_pyi=is_pyi)
>       assert output == black_output
E       AssertionError: assert '# comment\n\n\nimport math\nfrom typing import Sequence\n\nimport numpy as np\n\n\ndef add(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n\n\ndef sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:\n    ...\n' == '# comment\n\n\nimport math\nfrom typing import Sequence\n\nimport numpy as np\n\n\ndef add(a: np.ndarray, b: np.ndarray) -> np.ndarray: ...\n\n\ndef sub(a: np.ndarray, b: np.ndarray) -> np.ndarray: ...\n'
E         
E           # comment
E           
E           
E           import math
E           from typing import Sequence
E           
E           import numpy as np
E           
E           
E         - def add(a: np.ndarray, b: np.ndarray) -> np.ndarray: ...
E         ?                                                     ----
E         + def add(a: np.ndarray, b: np.ndarray) -> np.ndarray:
E         +     ...
E           
E           
E         - def sub(a: np.ndarray, b: np.ndarray) -> np.ndarray: ...
E         ?                                                     ----
E         + def sub(a: np.ndarray, b: np.ndarray) -> np.ndarray:
E         +     ...

tests/unit/profiles/test_black.py:41: AssertionError

https://github.com/psf/black/blob/main/CHANGES.md#2410

Dummy class and function implementations consisting only of ... are formatted more compactly (#3796)

https://github.com/psf/black/pull/3796 https://github.com/psf/black/issues/1797#issuecomment-1528381732