python / python/mypy

Certain tests can't deal with symlinks on Windows

Open
#19,956 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
20.6k
Forks
3.3k
PR merge metrics
PR metrics pending

Description

I'm running the tests in a directory that I got to using a symlink. It is now complaining that the output isn't right on some tests, since apparently the absolute path is reported instead of the symlinky one it expects. I'm running from a venv, and also on windows 10. (The symlink is a symlinkd, which I mention because windows sadly has like 4 different types of symlink. But I doubt it's relevant.) I tried to replicate this on WSL2 (Ubuntu) but couldn't.

Here are the test failures of uv run runtests.py pytest-fast:

================================================================================================================= FAILURES =================================================================================================================
_______________________________________________________________________________________________________ testNamedTupleAdditionalArgs _______________________________________________________________________________________________________
[gw3] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\check-namedtuple.test:118:
Failed: Unexpected type checker output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\check-namedtuple.test, line 118)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  main:4: error: Boolean literal expected as the "rename" argument to namedtuple()
  main:5: error: Boolean literal expected as the "rename" argument to namedtuple()
  main:5: error: Argument "rename" to "namedtuple" has incompatible type "str"; expected "int"
  main:6: error: Unexpected keyword argument "unrecognized_arg" for "namedtuple"
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/collections.pyi:3: note: "namedtuple" defined here (diff)
  main:7: error: Too many positional arguments for "namedtuple"
Actual:
  main:4: error: Boolean literal expected as the "rename" argument to namedtuple()
  main:5: error: Boolean literal expected as the "rename" argument to namedtuple()
  main:5: error: Argument "rename" to "namedtuple" has incompatible type "str"; expected "int"
  main:6: error: Unexpected keyword argument "unrecognized_arg" for "namedtuple"
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/collections.pyi:3: note: "namedtuple" defined here (diff)
  main:7: error: Too many positional arguments for "namedtuple"

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/collections.pyi:3:...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/collection...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
______________________________________________________________________________________________ testImportBringsAnotherFileWithBlockingError1 _______________________________________________________________________________________________
[gw3] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test:400:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test, line 400)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  ==
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:1: error: "int" not callable
Actual:
  ==
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:1: error: "int" not callable

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: err...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.py...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
_______________________________________________________________________________________ testImportBringsAnotherFileWithSemanticAnalysisBlockingError _______________________________________________________________________________________
[gw3] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test:420:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test, line 420)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  ==
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker2.pyi:2: error: "continue" outside loop (diff)
  ==
  a.py:1: error: "int" not callable
Actual:
  ==
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker2.pyi:2: error: "continue" outside loop (diff)
  ==
  a.py:1: error: "int" not callable

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker2.pyi:2: er...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker2.p...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
_________________________________________________________________________________________ testFixingBlockingErrorBringsInAnotherModuleWithBlocker __________________________________________________________________________________________
[gw3] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test:474:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test, line 474)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  ==
  a.py:1: error: Invalid syntax
  ==
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:2: error: "int" not callable
Actual:
  ==
  a.py:1: error: Invalid syntax
  ==
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:2: error: "int" not callable

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: err...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.py...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
________________________________________________________________________________________________ testAddFileWhichImportsLibModuleWithErrors ________________________________________________________________________________________________
[gw3] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-modules.test:754:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-modules.test, line 754)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  main:2: error: Cannot find implementation or library stub for module named "a"
  main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
  ==
  a.py:3: error: Name "z" is not defined
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/broken.pyi:2: error: Name "y" is not defined (diff)
Actual:
  main:2: error: Cannot find implementation or library stub for module named "a"
  main:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
  ==
  a.py:3: error: Name "z" is not defined
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/broken.pyi:2: error: Name "y" is not defined (diff)

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/broken.pyi:2: erro...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/broken.pyi...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
___________________________________________________________________________________________ testImportBringsAnotherFileWithBlockingError1_cached ___________________________________________________________________________________________
[gw2] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test:400:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test, line 400)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  ==
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:1: error: "int" not callable
Actual:
  ==
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:1: error: "int" not callable

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: err...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.py...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
___________________________________________________________________________________ testImportBringsAnotherFileWithSemanticAnalysisBlockingError_cached ____________________________________________________________________________________
[gw2] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test:420:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test, line 420)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  ==
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker2.pyi:2: error: "continue" outside loop (diff)
  ==
  a.py:1: error: "int" not callable
Actual:
  ==
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker2.pyi:2: error: "continue" outside loop (diff)
  ==
  a.py:1: error: "int" not callable

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker2.pyi:2: er...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker2.p...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
______________________________________________________________________________________ testFixingBlockingErrorBringsInAnotherModuleWithBlocker_cached ______________________________________________________________________________________
[gw2] win32 -- Python 3.9.22 C:\Users\wyatt\files\tmp\mypy\.venv\Scripts\python.exe
data: C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test:474:
Failed: Invalid output (C:\Users\wyatt\files\tmp\mypy\test-data\unit\fine-grained-blockers.test, line 474)
----------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------
Expected:
  ==
  a.py:1: error: Invalid syntax
  ==
  C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:2: error: "int" not callable
Actual:
  ==
  a.py:1: error: Invalid syntax
  ==
  C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.pyi:2: error: Invalid syntax (diff)
  ==
  a.py:2: error: "int" not callable

Alignment of first line difference:
  E: C:/Users/wyatt/files/tmp/mypy/test-data/unit/lib-stub/blocker.pyi:2: err...
  A: C:/Users/wyatt/files/tmp/mypy_symlink/test-data/unit/lib-stub/blocker.py...
                                  ^
Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
========================================================================================================= short test summary info ==========================================================================================================
FAILED mypy/test/testcheck.py::TypeCheckSuite::check-namedtuple.test::testNamedTupleAdditionalArgs
FAILED mypy/test/testfinegrained.py::FineGrainedSuite::fine-grained-blockers.test::testImportBringsAnotherFileWithBlockingError1
FAILED mypy/test/testfinegrained.py::FineGrainedSuite::fine-grained-blockers.test::testImportBringsAnotherFileWithSemanticAnalysisBlockingError
FAILED mypy/test/testfinegrained.py::FineGrainedSuite::fine-grained-blockers.test::testFixingBlockingErrorBringsInAnotherModuleWithBlocker
FAILED mypy/test/testfinegrained.py::FineGrainedSuite::fine-grained-modules.test::testAddFileWhichImportsLibModuleWithErrors
FAILED mypy/test/testfinegrainedcache.py::FineGrainedCacheSuite::fine-grained-blockers.test::testImportBringsAnotherFileWithBlockingError1_cached
FAILED mypy/test/testfinegrainedcache.py::FineGrainedCacheSuite::fine-grained-blockers.test::testImportBringsAnotherFileWithSemanticAnalysisBlockingError_cached
FAILED mypy/test/testfinegrainedcache.py::FineGrainedCacheSuite::fine-grained-blockers.test::testFixingBlockingErrorBringsInAnotherModuleWithBlocker_cached
8 failed, 11353 passed, 301 skipped, 8 xfailed in 418.89s (0:06:58)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with runtests.py pytest-fast and the failing cases in test-data/unit/check-namedtuple.test, fine-grained-blockers.test, and fine-grained-modules.test. Investigate how paths are represented when the tests run through a Windows symlink, then verify the listed tests pass with expected and actual paths aligned.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
testing
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.