mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 cb66eb0dec
			
		
	
	
		cb66eb0dec
		
	
	
	
	
		
			
			importlib.machinery that provide the suffix details for import. The attributes were not put on imp so as to compartmentalize everything importlib needs for setting up imports in importlib.machinery. This also led to an indirect deprecation of inspect.getmoduleinfo() as it directly returned imp.get_suffix's returned tuple which no longer makes sense.
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Test case-sensitivity (PEP 235)."""
 | |
| from importlib import _bootstrap
 | |
| from importlib import machinery
 | |
| from .. import util
 | |
| from . import util as source_util
 | |
| import imp
 | |
| import os
 | |
| import sys
 | |
| from test import support as test_support
 | |
| import unittest
 | |
| 
 | |
| 
 | |
| @util.case_insensitive_tests
 | |
| class CaseSensitivityTest(unittest.TestCase):
 | |
| 
 | |
|     """PEP 235 dictates that on case-preserving, case-insensitive file systems
 | |
|     that imports are case-sensitive unless the PYTHONCASEOK environment
 | |
|     variable is set."""
 | |
| 
 | |
|     name = 'MoDuLe'
 | |
|     assert name != name.lower()
 | |
| 
 | |
|     def find(self, path):
 | |
|         finder = machinery.FileFinder(path,
 | |
|                                       (machinery.SourceFileLoader,
 | |
|                                             machinery.SOURCE_SUFFIXES,
 | |
|                                             True),
 | |
|                                         (machinery.SourcelessFileLoader,
 | |
|                                             machinery.BYTECODE_SUFFIXES,
 | |
|                                             True))
 | |
|         return finder.find_module(self.name)
 | |
| 
 | |
|     def sensitivity_test(self):
 | |
|         """Look for a module with matching and non-matching sensitivity."""
 | |
|         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')
 | |
|             return self.find(sensitive_path), self.find(insensitive_path)
 | |
| 
 | |
|     def test_sensitive(self):
 | |
|         with test_support.EnvironmentVarGuard() as env:
 | |
|             env.unset('PYTHONCASEOK')
 | |
|             if b'PYTHONCASEOK' 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.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))
 | |
| 
 | |
| 
 | |
| def test_main():
 | |
|     test_support.run_unittest(CaseSensitivityTest)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     test_main()
 |