mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Issue #16826: Don't check for PYTHONCASEOK when using -E.
This commit fixes a regression that sneaked into Python 3.3 where importlib was not respecting -E when checking for the PYTHONCASEOK environment variable.
This commit is contained in:
		
							parent
							
								
									9edb168dd7
								
							
						
					
					
						commit
						d151da9ef7
					
				
					 5 changed files with 4322 additions and 4244 deletions
				
			
		|  | @ -8,6 +8,7 @@ | |||
| import sys | ||||
| from test import support as test_support | ||||
| import unittest | ||||
| import subprocess | ||||
| 
 | ||||
| 
 | ||||
| @util.case_insensitive_tests | ||||
|  | @ -50,16 +51,62 @@ def test_sensitive(self): | |||
|             self.assertIsNone(insensitive) | ||||
| 
 | ||||
|     def test_insensitive(self): | ||||
|         with test_support.EnvironmentVarGuard() as env: | ||||
|             env.set('PYTHONCASEOK', '1') | ||||
|             if b'PYTHONCASEOK' not in _bootstrap._os.environ: | ||||
|                 self.skipTest('os.environ changes not reflected in ' | ||||
|                               '_os.environ') | ||||
|             sensitive, insensitive = self.sensitivity_test() | ||||
|             self.assertTrue(hasattr(sensitive, 'load_module')) | ||||
|             self.assertIn(self.name, sensitive.get_filename(self.name)) | ||||
|             self.assertTrue(hasattr(insensitive, 'load_module')) | ||||
|             self.assertIn(self.name, insensitive.get_filename(self.name)) | ||||
|         sensitive_pkg = 'sensitive.{0}'.format(self.name) | ||||
|         insensitive_pkg = 'insensitive.{0}'.format(self.name.lower()) | ||||
|         context = source_util.create_modules(insensitive_pkg, sensitive_pkg) | ||||
|         with context as mapping: | ||||
|             sensitive_path = os.path.join(mapping['.root'], 'sensitive') | ||||
|             insensitive_path = os.path.join(mapping['.root'], 'insensitive') | ||||
|             find_snippet = """if True: | ||||
|                 import sys | ||||
|                 from importlib import machinery | ||||
| 
 | ||||
|                 def find(path): | ||||
|                     f = machinery.FileFinder(path, | ||||
|                                              (machinery.SourceFileLoader, | ||||
|                                               machinery.SOURCE_SUFFIXES), | ||||
|                                              (machinery.SourcelessFileLoader, | ||||
|                                               machinery.BYTECODE_SUFFIXES)) | ||||
|                     return f.find_module('{name}') | ||||
| 
 | ||||
|                 sensitive = find('{sensitive_path}') | ||||
|                 insensitive = find('{insensitive_path}') | ||||
|                 print(str(hasattr(sensitive, 'load_module'))) | ||||
|                 if hasattr(sensitive, 'load_module'): | ||||
|                     print(sensitive.get_filename('{name}')) | ||||
|                 else: | ||||
|                     print('None') | ||||
|                 print(str(hasattr(insensitive, 'load_module'))) | ||||
|                 if hasattr(insensitive, 'load_module'): | ||||
|                     print(insensitive.get_filename('{name}')) | ||||
|                 else: | ||||
|                     print('None') | ||||
|                 """.format(sensitive_path=sensitive_path, | ||||
|                            insensitive_path=insensitive_path, | ||||
|                            name=self.name) | ||||
| 
 | ||||
|             newenv = os.environ.copy() | ||||
|             newenv["PYTHONCASEOK"] = "1" | ||||
| 
 | ||||
|             def check_output(expected, extra_arg=None): | ||||
|                 args = [sys.executable] | ||||
|                 if extra_arg: | ||||
|                     args.append(extra_arg) | ||||
|                 args.extend(["-c", find_snippet]) | ||||
|                 p = subprocess.Popen(args, stdout=subprocess.PIPE, | ||||
|                                          env=newenv) | ||||
|                 actual = p.communicate()[0].decode().split() | ||||
|                 self.assertEqual(expected[0], actual[0]) | ||||
|                 self.assertIn(expected[1], actual[1]) | ||||
|                 self.assertEqual(expected[2], actual[2]) | ||||
|                 self.assertIn(expected[3], actual[3]) | ||||
|                 self.assertEqual(p.wait(), 0) | ||||
| 
 | ||||
|             # Test with PYTHONCASEOK=1. | ||||
|             check_output(["True", self.name, "True", self.name]) | ||||
| 
 | ||||
|             # Test with PYTHONCASEOK=1 ignored because of -E. | ||||
|             check_output(["True", self.name, "False", "None"], "-E") | ||||
| 
 | ||||
| 
 | ||||
| def test_main(): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Meador Inge
						Meador Inge