mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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. | # 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 @@ | ||||||
| 
 | 
 | ||||||
| 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 @@ | ||||||
| 
 | 
 | ||||||
| @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 @@ def find_module(self): | ||||||
|     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 @@ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @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 @@ def sensitivity_test(self): | ||||||
|             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 @@ def test_sensitive(self): | ||||||
|     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 hook(entry): | ||||||
|             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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brett Cannon
						Brett Cannon