Files
cibuildwheel/unit_test/main_tests/main_requires_python_test.py
T
Henry Schreinerandpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> 097806b6b1 tests: fully type the test suite (#2794)
* tests: fully type the test suite

* chore: require more typing

Signed-off-by: Henry Schreiner <henryfs@princeton.edu>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Signed-off-by: Henry Schreiner <henryfs@princeton.edu>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-04-01 15:23:02 +01:00

133 lines
3.4 KiB
Python

import sys
import textwrap
from pathlib import Path
import pytest
from packaging.specifiers import SpecifierSet
from cibuildwheel.__main__ import main
from .conftest import ArgsInterceptor
@pytest.fixture(autouse=True)
def fake_package_dir(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> Path:
"""
Set up a fake project
"""
local_path = tmp_path / "tmp_project"
local_path.mkdir()
local_path.joinpath("setup.py").touch()
monkeypatch.setattr(sys, "argv", ["cibuildwheel", str(local_path)])
return local_path
@pytest.mark.usefixtures("platform")
def test_no_override(intercepted_build_args: ArgsInterceptor) -> None:
main()
options = intercepted_build_args.args[0]
intercepted_build_selector = options.globals.build_selector
assert intercepted_build_selector("cp39-win32")
assert intercepted_build_selector("cp36-win32")
assert intercepted_build_selector.requires_python is None
@pytest.mark.usefixtures("platform")
def test_override_env(
monkeypatch: pytest.MonkeyPatch, intercepted_build_args: ArgsInterceptor
) -> None:
monkeypatch.setenv("CIBW_PROJECT_REQUIRES_PYTHON", ">=3.8")
main()
options = intercepted_build_args.args[0]
intercepted_build_selector = options.globals.build_selector
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.8")
assert intercepted_build_selector("cp39-win32")
assert not intercepted_build_selector("cp36-win32")
@pytest.mark.usefixtures("platform")
def test_override_setup_cfg(
intercepted_build_args: ArgsInterceptor, fake_package_dir: Path
) -> None:
fake_package_dir.joinpath("setup.cfg").write_text(
textwrap.dedent(
"""
[options]
python_requires = >=3.8
"""
)
)
main()
options = intercepted_build_args.args[0]
intercepted_build_selector = options.globals.build_selector
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.8")
assert intercepted_build_selector("cp39-win32")
assert not intercepted_build_selector("cp36-win32")
@pytest.mark.usefixtures("platform")
def test_override_pyproject_toml(
intercepted_build_args: ArgsInterceptor, fake_package_dir: Path
) -> None:
fake_package_dir.joinpath("pyproject.toml").write_text(
textwrap.dedent(
"""
[project]
requires-python = ">=3.8"
"""
)
)
main()
options = intercepted_build_args.args[0]
intercepted_build_selector = options.globals.build_selector
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.8")
assert intercepted_build_selector("cp39-win32")
assert not intercepted_build_selector("cp36-win32")
@pytest.mark.usefixtures("platform")
def test_override_setup_py_simple(
intercepted_build_args: ArgsInterceptor, fake_package_dir: Path
) -> None:
fake_package_dir.joinpath("setup.py").write_text(
textwrap.dedent(
"""
from setuptools import setup
setup(
name = "other",
python_requires = ">=3.7",
)
"""
)
)
main()
options = intercepted_build_args.args[0]
intercepted_build_selector = options.globals.build_selector
assert intercepted_build_selector.requires_python == SpecifierSet(">=3.7")
assert intercepted_build_selector("cp39-win32")
assert not intercepted_build_selector("cp36-win32")