86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
"""
|
|
Tests for msvc support module (msvc14 unit tests).
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
import pytest
|
|
|
|
from distutils.errors import DistutilsPlatformError
|
|
|
|
|
|
@pytest.mark.skipif(sys.platform != "win32", reason="These tests are only for win32")
|
|
class TestMSVC14:
|
|
"""Python 3.8 "distutils/tests/test_msvccompiler.py" backport"""
|
|
|
|
def test_no_compiler(self):
|
|
import setuptools.msvc as _msvccompiler
|
|
|
|
# makes sure query_vcvarsall raises
|
|
# a DistutilsPlatformError if the compiler
|
|
# is not found
|
|
|
|
def _find_vcvarsall(plat_spec):
|
|
return None, None
|
|
|
|
old_find_vcvarsall = _msvccompiler._msvc14_find_vcvarsall
|
|
_msvccompiler._msvc14_find_vcvarsall = _find_vcvarsall
|
|
try:
|
|
pytest.raises(
|
|
DistutilsPlatformError,
|
|
_msvccompiler._msvc14_get_vc_env,
|
|
'wont find this version',
|
|
)
|
|
finally:
|
|
_msvccompiler._msvc14_find_vcvarsall = old_find_vcvarsall
|
|
|
|
def test_get_vc_env_unicode(self):
|
|
import setuptools.msvc as _msvccompiler
|
|
|
|
test_var = 'ṰḖṤṪ┅ṼẨṜ'
|
|
test_value = '₃⁴₅'
|
|
|
|
# Ensure we don't early exit from _get_vc_env
|
|
old_distutils_use_sdk = os.environ.pop('DISTUTILS_USE_SDK', None)
|
|
os.environ[test_var] = test_value
|
|
try:
|
|
env = _msvccompiler._msvc14_get_vc_env('x86')
|
|
assert test_var.lower() in env
|
|
assert test_value == env[test_var.lower()]
|
|
finally:
|
|
os.environ.pop(test_var)
|
|
if old_distutils_use_sdk:
|
|
os.environ['DISTUTILS_USE_SDK'] = old_distutils_use_sdk
|
|
|
|
def test_get_vc2017(self):
|
|
import setuptools.msvc as _msvccompiler
|
|
|
|
# This function cannot be mocked, so pass it if we find VS 2017
|
|
# and mark it skipped if we do not.
|
|
version, path = _msvccompiler._msvc14_find_vc2017()
|
|
if os.environ.get('APPVEYOR_BUILD_WORKER_IMAGE', '') == 'Visual Studio 2017':
|
|
assert version
|
|
if version:
|
|
assert version >= 15
|
|
assert os.path.isdir(path)
|
|
else:
|
|
pytest.skip("VS 2017 is not installed")
|
|
|
|
def test_get_vc2015(self):
|
|
import setuptools.msvc as _msvccompiler
|
|
|
|
# This function cannot be mocked, so pass it if we find VS 2015
|
|
# and mark it skipped if we do not.
|
|
version, path = _msvccompiler._msvc14_find_vc2015()
|
|
if os.environ.get('APPVEYOR_BUILD_WORKER_IMAGE', '') in [
|
|
'Visual Studio 2015',
|
|
'Visual Studio 2017',
|
|
]:
|
|
assert version
|
|
if version:
|
|
assert version >= 14
|
|
assert os.path.isdir(path)
|
|
else:
|
|
pytest.skip("VS 2015 is not installed")
|