Skip to content

Commit

Permalink
add unit tests to check setuptools correctly identifies windows arch
Browse files Browse the repository at this point in the history
  • Loading branch information
MusicalNinjaDad committed Jun 14, 2024
1 parent da2529c commit 57f8ddd
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ test = [
"pytest-timeout",
"pytest-xdist",
"pytest>=6",
"setuptools",
"tomli_w",
"validate-pyproject",
]
Expand Down Expand Up @@ -140,6 +141,8 @@ disallow_untyped_decorators = true
[[tool.mypy.overrides]]
module = [
"setuptools",
"setuptools._distutils", # needed even if only directly import setuptools._distutils.util
"setuptools._distutils.util",
"pytest", # ignored in pre-commit to speed up check
"bashlex",
"bashlex.*",
Expand Down
88 changes: 88 additions & 0 deletions unit_test/get_platform_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# ruff: noqa: ARG001
import contextlib
from pathlib import Path
from typing import Dict

import pytest
import setuptools._distutils.util

from cibuildwheel.windows import PythonConfiguration, setup_setuptools_cross_compile


@contextlib.contextmanager
def patched_environment(monkeypatch: pytest.MonkeyPatch, environment: Dict[str, str]):
with monkeypatch.context() as mp:
mp.setattr("os.name", "nt")
for envvar, val in environment.items():
mp.setenv(name=envvar, value=val)
yield


def test_x86(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
arch = "32"
environment: Dict[str, str] = {}

configuration = PythonConfiguration("irrelevant", arch, "irrelevant", None)

setup_setuptools_cross_compile(tmp_path, configuration, tmp_path, environment)
with patched_environment(monkeypatch, environment):
target_platform = setuptools._distutils.util.get_platform()

assert environment["VSCMD_ARG_TGT_ARCH"] == "x86"
assert target_platform == "win32"


def test_x64(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
arch = "64"
environment: Dict[str, str] = {}

configuration = PythonConfiguration("irrelevant", arch, "irrelevant", None)

setup_setuptools_cross_compile(tmp_path, configuration, tmp_path, environment)
with patched_environment(monkeypatch, environment):
target_platform = setuptools._distutils.util.get_platform()

assert environment["VSCMD_ARG_TGT_ARCH"] == "x64"
assert target_platform == "win-amd64"


def test_arm(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
arch = "ARM64"
environment: Dict[str, str] = {}

configuration = PythonConfiguration("irrelevant", arch, "irrelevant", None)

setup_setuptools_cross_compile(tmp_path, configuration, tmp_path, environment)
with patched_environment(monkeypatch, environment):
target_platform = setuptools._distutils.util.get_platform()

assert environment["VSCMD_ARG_TGT_ARCH"] == "arm64"
assert target_platform == "win-arm64"


def test_env_set(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
arch = "32"
environment = {"VSCMD_ARG_TGT_ARCH": "arm64"}

configuration = PythonConfiguration("irrelevant", arch, "irrelevant", None)

setup_setuptools_cross_compile(tmp_path, configuration, tmp_path, environment)
with patched_environment(monkeypatch, environment):
target_platform = setuptools._distutils.util.get_platform()

assert environment["VSCMD_ARG_TGT_ARCH"] == "arm64"
assert target_platform == "win-arm64"


def test_env_blank(tmp_path: Path, monkeypatch: pytest.MonkeyPatch):
arch = "32"
environment = {"VSCMD_ARG_TGT_ARCH": ""}

configuration = PythonConfiguration("irrelevant", arch, "irrelevant", None)

setup_setuptools_cross_compile(tmp_path, configuration, tmp_path, environment)
with patched_environment(monkeypatch, environment):
target_platform = setuptools._distutils.util.get_platform()

assert environment["VSCMD_ARG_TGT_ARCH"] == "x86"
assert target_platform == "win32"

0 comments on commit 57f8ddd

Please sign in to comment.