60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
__lazy_modules__ = {"tempfile"}
|
||
|
|
|
||
|
|
import os
|
||
|
|
import platform
|
||
|
|
import sys
|
||
|
|
import tempfile
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
|
||
|
|
def _new_files_inherit_process_gid() -> bool:
|
||
|
|
"""Whether a newly created file's group is the process gid.
|
||
|
|
|
||
|
|
On BSD/macOS a new file inherits its parent directory's group rather than
|
||
|
|
the creating process's gid, so chown tests that assert ``p.gid ==
|
||
|
|
os.getgid()`` do not hold (e.g. when the temp dir is group-owned by wheel).
|
||
|
|
"""
|
||
|
|
if not hasattr(os, "getgid"):
|
||
|
|
return False
|
||
|
|
try:
|
||
|
|
with tempfile.NamedTemporaryFile() as f:
|
||
|
|
return os.fstat(f.fileno()).st_gid == os.getgid()
|
||
|
|
except OSError:
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
skip_without_chown = pytest.mark.skipif(
|
||
|
|
not hasattr(os, "chown") or not _new_files_inherit_process_gid(),
|
||
|
|
reason="os.chown not supported, or new files do not inherit the process gid (e.g. BSD/macOS)",
|
||
|
|
)
|
||
|
|
|
||
|
|
skip_without_tty = pytest.mark.skipif(not sys.stdin.isatty(), reason="Not a TTY")
|
||
|
|
|
||
|
|
skip_on_windows = pytest.mark.skipif(
|
||
|
|
sys.platform == "win32", reason="Windows not supported for this test (yet)"
|
||
|
|
)
|
||
|
|
|
||
|
|
xfail_on_windows = pytest.mark.xfail(
|
||
|
|
sys.platform == "win32", reason="Windows not supported for this test (yet)"
|
||
|
|
)
|
||
|
|
|
||
|
|
xfail_on_pypy = pytest.mark.xfail(
|
||
|
|
platform.python_implementation() == "PyPy",
|
||
|
|
reason="PyPy is currently not working on this test!",
|
||
|
|
)
|
||
|
|
|
||
|
|
__all__ = [
|
||
|
|
"skip_on_windows",
|
||
|
|
"skip_without_chown",
|
||
|
|
"skip_without_tty",
|
||
|
|
"xfail_on_pypy",
|
||
|
|
"xfail_on_windows",
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def __dir__() -> list[str]:
|
||
|
|
return list(__all__)
|