mirror of https://github.com/python/cpython
Fix regressions introduced by fixes for issue #27083.
This commit is contained in:
parent
702b0460d2
commit
7ca63cb7cc
|
@ -21,16 +21,22 @@ work. One should use importlib as the public-facing version of this module.
|
||||||
# anything specified at the class level.
|
# anything specified at the class level.
|
||||||
|
|
||||||
# Bootstrap-related code ######################################################
|
# Bootstrap-related code ######################################################
|
||||||
|
_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win',
|
||||||
_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin'
|
_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin'
|
||||||
|
_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY
|
||||||
|
+ _CASE_INSENSITIVE_PLATFORMS_STR_KEY)
|
||||||
|
|
||||||
|
|
||||||
def _make_relax_case():
|
def _make_relax_case():
|
||||||
if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS):
|
if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS):
|
||||||
|
if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS_STR_KEY):
|
||||||
|
key = 'PYTHONCASEOK'
|
||||||
|
else:
|
||||||
|
key = b'PYTHONCASEOK'
|
||||||
|
|
||||||
def _relax_case():
|
def _relax_case():
|
||||||
"""True if filenames must be checked case-insensitively."""
|
"""True if filenames must be checked case-insensitively."""
|
||||||
return (b'PYTHONCASEOK' in _os.environ
|
return key in _os.environ
|
||||||
or 'PYTHONCASEOK' in _os.environ)
|
|
||||||
else:
|
else:
|
||||||
def _relax_case():
|
def _relax_case():
|
||||||
"""True if filenames must be checked case-insensitively."""
|
"""True if filenames must be checked case-insensitively."""
|
||||||
|
|
|
@ -5,6 +5,7 @@ import unittest
|
||||||
|
|
||||||
from .. import util
|
from .. import util
|
||||||
|
|
||||||
|
importlib = util.import_importlib('importlib')
|
||||||
machinery = util.import_importlib('importlib.machinery')
|
machinery = util.import_importlib('importlib.machinery')
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +13,7 @@ machinery = util.import_importlib('importlib.machinery')
|
||||||
|
|
||||||
@unittest.skipIf(util.EXTENSIONS.filename is None, '_testcapi not available')
|
@unittest.skipIf(util.EXTENSIONS.filename is None, '_testcapi not available')
|
||||||
@util.case_insensitive_tests
|
@util.case_insensitive_tests
|
||||||
class ExtensionModuleCaseSensitivityTest:
|
class ExtensionModuleCaseSensitivityTest(util.CASEOKTestBase):
|
||||||
|
|
||||||
def find_module(self):
|
def find_module(self):
|
||||||
good_name = util.EXTENSIONS.name
|
good_name = util.EXTENSIONS.name
|
||||||
|
@ -26,25 +27,22 @@ class ExtensionModuleCaseSensitivityTest:
|
||||||
def test_case_sensitive(self):
|
def test_case_sensitive(self):
|
||||||
with support.EnvironmentVarGuard() as env:
|
with support.EnvironmentVarGuard() as env:
|
||||||
env.unset('PYTHONCASEOK')
|
env.unset('PYTHONCASEOK')
|
||||||
if b'PYTHONCASEOK' in _bootstrap_external._os.environ:
|
self.caseok_env_changed(should_exist=False)
|
||||||
self.skipTest('os.environ changes not reflected in '
|
|
||||||
'_os.environ')
|
|
||||||
loader = self.find_module()
|
loader = self.find_module()
|
||||||
self.assertIsNone(loader)
|
self.assertIsNone(loader)
|
||||||
|
|
||||||
def test_case_insensitivity(self):
|
def test_case_insensitivity(self):
|
||||||
with support.EnvironmentVarGuard() as env:
|
with support.EnvironmentVarGuard() as env:
|
||||||
env.set('PYTHONCASEOK', '1')
|
env.set('PYTHONCASEOK', '1')
|
||||||
if b'PYTHONCASEOK' not in _bootstrap_external._os.environ:
|
self.caseok_env_changed(should_exist=True)
|
||||||
self.skipTest('os.environ changes not reflected in '
|
|
||||||
'_os.environ')
|
|
||||||
loader = self.find_module()
|
loader = self.find_module()
|
||||||
self.assertTrue(hasattr(loader, 'load_module'))
|
self.assertTrue(hasattr(loader, 'load_module'))
|
||||||
|
|
||||||
|
|
||||||
(Frozen_ExtensionCaseSensitivity,
|
(Frozen_ExtensionCaseSensitivity,
|
||||||
Source_ExtensionCaseSensitivity
|
Source_ExtensionCaseSensitivity
|
||||||
) = util.test_both(ExtensionModuleCaseSensitivityTest, machinery=machinery)
|
) = util.test_both(ExtensionModuleCaseSensitivityTest, importlib=importlib,
|
||||||
|
machinery=machinery)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -11,7 +11,7 @@ import unittest
|
||||||
|
|
||||||
|
|
||||||
@util.case_insensitive_tests
|
@util.case_insensitive_tests
|
||||||
class CaseSensitivityTest:
|
class CaseSensitivityTest(util.CASEOKTestBase):
|
||||||
|
|
||||||
"""PEP 235 dictates that on case-preserving, case-insensitive file systems
|
"""PEP 235 dictates that on case-preserving, case-insensitive file systems
|
||||||
that imports are case-sensitive unless the PYTHONCASEOK environment
|
that imports are case-sensitive unless the PYTHONCASEOK environment
|
||||||
|
@ -39,17 +39,10 @@ class CaseSensitivityTest:
|
||||||
insensitive_finder = self.finder(insensitive_path)
|
insensitive_finder = self.finder(insensitive_path)
|
||||||
return self.find(sensitive_finder), self.find(insensitive_finder)
|
return self.find(sensitive_finder), self.find(insensitive_finder)
|
||||||
|
|
||||||
def env_changed(self, *, should_exist):
|
|
||||||
possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK'
|
|
||||||
if any(x in self.importlib._bootstrap_external._os.environ
|
|
||||||
for x in possibilities) == should_exist:
|
|
||||||
self.skipTest('os.environ changes not reflected in '
|
|
||||||
'_os.environ')
|
|
||||||
|
|
||||||
def test_sensitive(self):
|
def test_sensitive(self):
|
||||||
with test_support.EnvironmentVarGuard() as env:
|
with test_support.EnvironmentVarGuard() as env:
|
||||||
env.unset('PYTHONCASEOK')
|
env.unset('PYTHONCASEOK')
|
||||||
self.env_changed(should_exist=False)
|
self.caseok_env_changed(should_exist=False)
|
||||||
sensitive, insensitive = self.sensitivity_test()
|
sensitive, insensitive = self.sensitivity_test()
|
||||||
self.assertIsNotNone(sensitive)
|
self.assertIsNotNone(sensitive)
|
||||||
self.assertIn(self.name, sensitive.get_filename(self.name))
|
self.assertIn(self.name, sensitive.get_filename(self.name))
|
||||||
|
@ -58,7 +51,7 @@ class CaseSensitivityTest:
|
||||||
def test_insensitive(self):
|
def test_insensitive(self):
|
||||||
with test_support.EnvironmentVarGuard() as env:
|
with test_support.EnvironmentVarGuard() as env:
|
||||||
env.set('PYTHONCASEOK', '1')
|
env.set('PYTHONCASEOK', '1')
|
||||||
self.env_changed(should_exist=True)
|
self.caseok_env_changed(should_exist=True)
|
||||||
sensitive, insensitive = self.sensitivity_test()
|
sensitive, insensitive = self.sensitivity_test()
|
||||||
self.assertIsNotNone(sensitive)
|
self.assertIsNotNone(sensitive)
|
||||||
self.assertIn(self.name, sensitive.get_filename(self.name))
|
self.assertIn(self.name, sensitive.get_filename(self.name))
|
||||||
|
|
|
@ -378,3 +378,12 @@ def mock_path_hook(*entries, importer):
|
||||||
raise ImportError
|
raise ImportError
|
||||||
return importer
|
return importer
|
||||||
return hook
|
return hook
|
||||||
|
|
||||||
|
|
||||||
|
class CASEOKTestBase:
|
||||||
|
|
||||||
|
def caseok_env_changed(self, *, should_exist):
|
||||||
|
possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK'
|
||||||
|
if any(x in self.importlib._bootstrap_external._os.environ
|
||||||
|
for x in possibilities) != should_exist:
|
||||||
|
self.skipTest('os.environ changes not reflected in _os.environ')
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue