mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Fix regressions introduced by fixes for issue #27083.
This commit is contained in:
		
							parent
							
								
									702b0460d2
								
							
						
					
					
						commit
						7ca63cb7cc
					
				
					 5 changed files with 2592 additions and 2576 deletions
				
			
		|  | @ -21,16 +21,22 @@ | |||
| # anything specified at the class level. | ||||
| 
 | ||||
| # Bootstrap-related code ###################################################### | ||||
| 
 | ||||
| _CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin' | ||||
| _CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', | ||||
| _CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' | ||||
| _CASE_INSENSITIVE_PLATFORMS =  (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY | ||||
|                                 + _CASE_INSENSITIVE_PLATFORMS_STR_KEY) | ||||
| 
 | ||||
| 
 | ||||
| def _make_relax_case(): | ||||
|     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(): | ||||
|             """True if filenames must be checked case-insensitively.""" | ||||
|             return (b'PYTHONCASEOK' in _os.environ | ||||
|                     or 'PYTHONCASEOK' in _os.environ) | ||||
|             return key in _os.environ | ||||
|     else: | ||||
|         def _relax_case(): | ||||
|             """True if filenames must be checked case-insensitively.""" | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| 
 | ||||
| from .. import util | ||||
| 
 | ||||
| importlib = util.import_importlib('importlib') | ||||
| machinery = util.import_importlib('importlib.machinery') | ||||
| 
 | ||||
| 
 | ||||
|  | @ -12,7 +13,7 @@ | |||
| 
 | ||||
| @unittest.skipIf(util.EXTENSIONS.filename is None, '_testcapi not available') | ||||
| @util.case_insensitive_tests | ||||
| class ExtensionModuleCaseSensitivityTest: | ||||
| class ExtensionModuleCaseSensitivityTest(util.CASEOKTestBase): | ||||
| 
 | ||||
|     def find_module(self): | ||||
|         good_name = util.EXTENSIONS.name | ||||
|  | @ -26,25 +27,22 @@ def find_module(self): | |||
|     def test_case_sensitive(self): | ||||
|         with support.EnvironmentVarGuard() as env: | ||||
|             env.unset('PYTHONCASEOK') | ||||
|             if b'PYTHONCASEOK' in _bootstrap_external._os.environ: | ||||
|                 self.skipTest('os.environ changes not reflected in ' | ||||
|                               '_os.environ') | ||||
|             self.caseok_env_changed(should_exist=False) | ||||
|             loader = self.find_module() | ||||
|             self.assertIsNone(loader) | ||||
| 
 | ||||
|     def test_case_insensitivity(self): | ||||
|         with support.EnvironmentVarGuard() as env: | ||||
|             env.set('PYTHONCASEOK', '1') | ||||
|             if b'PYTHONCASEOK' not in _bootstrap_external._os.environ: | ||||
|                 self.skipTest('os.environ changes not reflected in ' | ||||
|                               '_os.environ') | ||||
|             self.caseok_env_changed(should_exist=True) | ||||
|             loader = self.find_module() | ||||
|             self.assertTrue(hasattr(loader, 'load_module')) | ||||
| 
 | ||||
| 
 | ||||
| (Frozen_ExtensionCaseSensitivity, | ||||
|  Source_ExtensionCaseSensitivity | ||||
|  ) = util.test_both(ExtensionModuleCaseSensitivityTest, machinery=machinery) | ||||
|  ) = util.test_both(ExtensionModuleCaseSensitivityTest, importlib=importlib, | ||||
|                     machinery=machinery) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| 
 | ||||
| 
 | ||||
| @util.case_insensitive_tests | ||||
| class CaseSensitivityTest: | ||||
| class CaseSensitivityTest(util.CASEOKTestBase): | ||||
| 
 | ||||
|     """PEP 235 dictates that on case-preserving, case-insensitive file systems | ||||
|     that imports are case-sensitive unless the PYTHONCASEOK environment | ||||
|  | @ -39,17 +39,10 @@ def sensitivity_test(self): | |||
|             insensitive_finder = self.finder(insensitive_path) | ||||
|             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): | ||||
|         with test_support.EnvironmentVarGuard() as env: | ||||
|             env.unset('PYTHONCASEOK') | ||||
|             self.env_changed(should_exist=False) | ||||
|             self.caseok_env_changed(should_exist=False) | ||||
|             sensitive, insensitive = self.sensitivity_test() | ||||
|             self.assertIsNotNone(sensitive) | ||||
|             self.assertIn(self.name, sensitive.get_filename(self.name)) | ||||
|  | @ -58,7 +51,7 @@ def test_sensitive(self): | |||
|     def test_insensitive(self): | ||||
|         with test_support.EnvironmentVarGuard() as env: | ||||
|             env.set('PYTHONCASEOK', '1') | ||||
|             self.env_changed(should_exist=True) | ||||
|             self.caseok_env_changed(should_exist=True) | ||||
|             sensitive, insensitive = self.sensitivity_test() | ||||
|             self.assertIsNotNone(sensitive) | ||||
|             self.assertIn(self.name, sensitive.get_filename(self.name)) | ||||
|  |  | |||
|  | @ -378,3 +378,12 @@ def hook(entry): | |||
|             raise ImportError | ||||
|         return importer | ||||
|     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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brett Cannon
						Brett Cannon