Add test for #11895

This commit is contained in:
Bruno Oliveira 2024-02-05 18:14:13 -03:00
parent cefb3e2277
commit dc3130be67
1 changed files with 28 additions and 0 deletions

View File

@ -4,9 +4,11 @@ from pathlib import Path
import pprint import pprint
import shutil import shutil
import sys import sys
import tempfile
import textwrap import textwrap
from typing import List from typing import List
from _pytest.assertion.util import running_on_ci
from _pytest.config import ExitCode from _pytest.config import ExitCode
from _pytest.fixtures import FixtureRequest from _pytest.fixtures import FixtureRequest
from _pytest.main import _in_venv from _pytest.main import _in_venv
@ -1759,3 +1761,29 @@ def test_does_not_crash_on_recursive_symlink(pytester: Pytester) -> None:
assert result.ret == ExitCode.OK assert result.ret == ExitCode.OK
assert result.parseoutcomes() == {"passed": 1} assert result.parseoutcomes() == {"passed": 1}
@pytest.mark.skipif(not sys.platform.startswith("win"), reason="Windows only")
def test_collect_short_file_windows(pytester: Pytester) -> None:
"""Reproducer for #11895: short paths not colleced on Windows."""
short_path = tempfile.mkdtemp()
if "~" not in short_path:
if running_on_ci():
# On CI, we are expecting that under the current GitHub actions configuration,
# tempfile.mkdtemp() is producing short paths, so we want to fail to prevent
# this from silently changing without us noticing.
pytest.fail(
f"tempfile.mkdtemp() failed to produce a short path on CI: {short_path}"
)
else:
# We want to skip failing this test locally in this situation because
# depending on the local configuration tempfile.mkdtemp() might not produce a short path:
# For example, user might have configured %TEMP% exactly to avoid generating short paths.
pytest.skip(
f"tempfile.mkdtemp() failed to produce a short path: {short_path}, skipping"
)
test_file = Path(short_path).joinpath("test_collect_short_file_windows.py")
test_file.write_text("def test(): pass", encoding="UTF-8")
result = pytester.runpytest(short_path)
assert result.parseoutcomes() == {"passed": 1}